Sqlserver sincronizzare

mercoledì 17 gennaio 2007 - 08.03

claudio1963 Profilo | Newbie

sono un nuovo utilizzatore di sqlserver 2005.....

ho un problema da risolvere ...per il quale vi chiedo se potete indicarmi come si può risolvere:

ho due db all'interno dei quali due tabelle contengono i dati anagrafici dei clienti.

le tabelle si chiamano in modo diverso e anche le relative colonne hanno nomi diversi (esempio nel primo db il campo indirizzo si chiama andress nel secondo indirizzo)

ho bisogno che al momento dell'inserimento o alla modifica dei dati nel primo db venga aggiornata anche la tabella anagrafica del secondo db.

vi chiedo come posso gestire le due connessioni
e come posso rinominare i campi per consentire l'aggiornamento?

amelix Profilo | Expert

Hai provato con i trigger?
Andrea
http://amelix.blogspot.com/index.html

lbenaglia Profilo | Guru

>ho due db all'interno dei quali due tabelle contengono i dati
>anagrafici dei clienti.
>
>le tabelle si chiamano in modo diverso e anche le relative colonne
>hanno nomi diversi (esempio nel primo db il campo indirizzo si
>chiama andress nel secondo indirizzo)
>
>ho bisogno che al momento dell'inserimento o alla modifica dei
>dati nel primo db venga aggiornata anche la tabella anagrafica
>del secondo db.

Ciao claudio1963,

prima di tutto, i due database risiedono sulla stessa istanza o su istanze diverse?
Nel caso le istanze siano diverse, risiedono sulla stessa macchina o su server distinti?
In questo caso i server appartengono alla stessa LAN (ovvero "si vedono" tra loro)?
Infine, l'aggiornamento deve essere eseguito in tempo reale oppure può avvenire anche in modo asincrono? Eventualmente con quale latenza?
Inizia a rispondere a queste domande, poi andremo avanti con l'analisi

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

claudio1963 Profilo | Newbie

sono proprio nuovo di sqlserver...normalmente ho sempre lavorato con asp e sql ma sempre con access....conosco sql ma poco sqlserver.....

cosa sono i trigger?

lbenaglia Profilo | Guru

>cosa sono i trigger?
I triggers DML sono delle particolari "query" che vengono eseguite a fronte di un inserimento, aggiornamento o eliminazione di una o più righe da una tabella.
Ora, rispondi alle domande che ti ho fatto poco sopra, non è detto che i triggers siano la soluzione più indicata al tuo problema

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

claudio1963 Profilo | Newbie

approfondirò l'argomento trigger grazie

comunque i db risiedono sulla stessa macchina ma con istanze diverse


potete indicarmi schematicamente come devo ragionare?

claudio1963 Profilo | Newbie

dimenticavo...l'aggiornamento deve avvenire in tempo reale

lbenaglia Profilo | Guru

>comunque i db risiedono sulla stessa macchina ma con istanze diverse
>dimenticavo...l'aggiornamento deve avvenire in tempo reale

Se la sincronizzazione deve avvenire realtime, i triggers possono costituire una soluzione al problema (anche se appesantiscono non poco la singola transazione, soprattutto se utilizzati per accedere a db differenti su istanze diverse).
Comunque in linea di principio potresti procedere nel seguente modo:

1) Sulla istanza A andrai a definire un linked server alla istanza B;
2) Sulla tabella A andrai a definire uno o più triggers di INSERT, UPDATE e DELETE (sempre che tu abbia tutte queste esigenze) che eseguono una query distribuita sul linked server B andando a sincronizzare la tebella B remota.

Inizia ad approfondire sui Books Online il discorso Linked Server e Triggers, iniziando a leggere i seguenti paragrafi:

"Understanding DML Triggers"
http://msdn2.microsoft.com/en-us/library/ms178110.aspx

"Linking Servers"
http://msdn2.microsoft.com/en-us/library/ms188279.aspx

Eventualmente se ti servono ulteriori informazioni, posta domande specifiche allegando tutte le informazioni in tuo possesso, in modo da permetterci di riprodurre la situazione.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

claudio1963 Profilo | Newbie

grazie 1000

claudio1963 Profilo | Newbie

>1) Sulla istanza A andrai a definire un linked server alla istanza B;
2) Sulla tabella A andrai a definire uno o più triggers di INSERT, UPDATE e DELETE (sempre che tu abbia tutte queste esigenze) che eseguono una query distribuita sul linked server B andando a sincronizzare la tebella B remota.




se la tabella anagrafica del dba ha nomi diversi di colonne della tabella anagrafica del dbb come posso fare l'aggiornamento?

lbenaglia Profilo | Guru

>se la tabella anagrafica del dba ha nomi diversi di colonne
>della tabella anagrafica del dbb come posso fare l'aggiornamento?

I nomi non sono significativi, lo sono i data type.
Verifica che i data type delle colonne nella tabella di destinazione siano dello stesso tipo e abbiano una lunghezza in bytes >= rispetto a quelli corrispondenti della tabella di origine.
Se è tutto OK puoi procedere con la sincronizzazione.
Ad esempio una operazione di INSERT potrà essere scritta come:

INSERT linkedserver.database.dbo.TabellaB(Colonna1, ..., Colonnan) SELECT Col1, ..., Coln FROM INSERTED

Una di UPDATE:

UPDATE linkedserver.database.dbo.TabellaB SET Colonna1 = I.Col1, ... Colonnan = I.Coln FROM linkedserver.database.dbo.TabellaB AS T JOIN INSERTED AS I ON T.ColonnaID = I.ColID

Una di DELETE:

DELETE linkedserver.database.dbo.TabellaB FROM linkedserver.database.dbo.TabellaB AS T JOIN DELETED AS D ON T.ColonnaID = D.ColID

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

claudio1963 Profilo | Newbie

se i data type sono diversi .....allora dovrò preventivamente convertirli


giusto?

claudio1963 Profilo | Newbie

vorrei rompere di meno .....ma

dagli articoli che mi hai consigliato e da quanto hai postato .. se ho ben capito posso crere il linked server direttamente da sql server management senza ulteriori manovre e richiamare il collegamento nel corpo della query?




lbenaglia Profilo | Guru

>se i data type sono diversi .....allora dovrò preventivamente
>convertirli
>
>giusto?

Giusto, ricorri alle funzioni CAST e CONVERT:
http://msdn2.microsoft.com/en-us/ms187928.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lbenaglia Profilo | Guru

>dagli articoli che mi hai consigliato e da quanto hai postato
>.. se ho ben capito posso crere il linked server direttamente
>da sql server management senza ulteriori manovre e richiamare
>il collegamento nel corpo della query?

Una volta definito il linked server e stabilita la modalità di autenticazione sul server remoto, puoi referenziare un oggetto remoto utilizzando il "four-part name", ovvero specificando linkedserver.database.schema.oggetto.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

claudio1963 Profilo | Newbie

grazie....

ancora una cosa
per fare questo aggiornamento dovrò realizzare un modello su mio computer

ho richiesto una copia della struttura del database dal quale dovrà partire l'aggiornamento...mi è stato inviato un file con estens DUP

che non riesco ad aprire .....

cosè un file dup?

lbenaglia Profilo | Guru

>cosè un file dup?
Non ne ho idea, chiedi a chi te l'ha mandato

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

claudio1963 Profilo | Newbie

arigrazie

pensavo fosse un filedi backup ma avevo cercato in internet e non avevo trovato nulla.....e nulla avevo trovato sui manuali di sql server........bah chiederò......

TomClancy Profilo | Junior Member

mi aggancio a questa discussione... visto che siamo in tema di sincronizzazione.

... e se volessi sincronizzare due postazioni in remoto?... tipo via internet.

Una cosa del tipo sede principale che fa da server con sql ... ed una o più sedi staccate con msde...
magari la sede principale ha il server nattato e mi sa che gli serve un ip statico... quindi la sede staccata potrebbe sincronizzarsi al server solo per le tabelle che gli interessano.

probabilmente il linked server dovrebbe andare (fino ad ora l'ho provato solo nella stessa rete tra diverse istanze di sql... ma in teoria se gli do in pasto l'ip )... oppure potrei passare su un ftp momentaneo con un bcp e poi faccio fare l'import all'altra sede... mah sono veramente perplesso
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5