Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Osservare Transaction Log
mercoledì 13 giugno 2007 - 16.51
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
adima80
Profilo
| Junior Member
158
messaggi | Data Invio:
mer 13 giu 2007 - 16:51
Ciao,
da quello che ho letto su internet l'unico modo per vedere il transaction log di Sql Server 2005 è utilizzare tools di terze parti e mi chiedevo se esistesse qualche componente da aggiungere hai miei progetti di c#per osservare il transaction log.
Ho necessità di questo tool perchè devo sincronizzare due tabelle identiche in due database diversi, uno Sql 2005 e l'altro MSDE, una volta che il db di MSDE viene aggiornato io guarderei il LOG per vedere quali record sono stati aggiornati e quali inseriti, visto che le operazioni potrebbe toccare al massimo un migliaio di record per volta, così da ridurre drasticamente il tempo di esecuzione; utilizzerei questo metodo perchè sono tabelle molto voluminose, da almeno 4 milioni di record ciascuna.
Grazie per l'attenzione, ciao.
p.s.: Il problema esiste perchè non sono io ad aggiornare il database MSDE, ma un programma di terze parti i cui sviluppatori, naturalmente, non divulgano informazioni.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 13 giu 2007 - 17:02
>da quello che ho letto su internet l'unico modo per vedere il
>transaction log di Sql Server 2005 è utilizzare tools di terze
>parti mi chiedevo se esiste qualche componente da aggiungere
>hai miei progetti di x#epr osservare il transaction log. Ho necessità
>di questo tool perchè devo sincronizzare due tabelle identiche
>in due database diversi, uno Sql 2005 e l'altro MSDE, una volta
>che il db di MSDE viene aggiornato io guarderei il LOG per vedere
>quali record sono stati aggiornati e quali inseriti; utilizzerei
>questo metodo perchè sono tabelle molto voluminose, da almeno
>4 milioni di record ciascuna.
Le sincronizzazioni non devono essere eseguite applicativamente, ma utilizzando gli strumenti adatti.
Il Transaction Log non serve assolutamente al tuo scopo, ma ha funzioni del tutto differenti.
Nel tuo caso puoi risolvere il problema in molti modi differenti, ma occorrerebbe una analisi più precisa.
Visto che parli di MSDE e che la sincronizzazione deve avvenire su versioni differenti di SQL Server, ecluderei a priori strumenti come il Log Shipping ed il Database Mirroring.
Un discorso a parte sono le Repliche ma tutto sta nel vedere dove avvengono le modifiche (solo in MSDE, solo in SQL Server 2005 o in entrambi), alla edizione di SQL Server 2005 (che non hai specificato) e al tipo di sincronizzazione di cui hai bisogno (sincrona/asincrona).
Come vedi il discorso è complesso e richiede una mole considerevole di dettagli che difficilmente possono essere forniti in un post su un forum...
>Grazie per l'attenzione, ciao.
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
adima80
Profilo
| Junior Member
158
messaggi | Data Invio:
mer 13 giu 2007 - 18:26
In effetti hai ragione, inoltre non sono stato abbastanza esauriente nell'esporre il problema. La sincronizzazione tramite trigger credo sia possibile solo tra istanze di sql server 2005, o sbaglio?
Comunque sto usando Sql Server 2005 Standard e l'altro db è un db di MSDE, credi che tramite un trigger appartenente all'istanza di Sql 2005 potrei controllare gli eventuali INSERT / UPDATE all'interno della specifica tabella dell'altro DB, perchè è questo il mio problema: peridicamente viene aggiornata la base dati su MSDE e io devo sincronizzare Sql 2005. Farlo in maniera sincrona poi sarebbe una figata!
Grazie ancora, ciao
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 13 giu 2007 - 20:17
>In effetti hai ragione, inoltre non sono stato abbastanza esauriente
>nell'esporre il problema. La sincronizzazione tramite trigger
>credo sia possibile solo tra istanze di sql server 2005, o sbaglio?
Sbagli, nel senso che la sincronizzazione è possibile con qualunque linked server (che poi sia una buona idea è tutt'altra faccenda
).
Qui trovi un esempio:
http://msdn.microsoft.com/msdnmag/issues/04/11/DataPoints/default.aspx
>Comunque sto usando Sql Server 2005 Standard e l'altro db è un
>db di MSDE, credi che tramite un trigger appartenente all'istanza
>di Sql 2005 potrei controllare gli eventuali INSERT / UPDATE
>all'interno della specifica tabella dell'altro DB, perchè è questo
>il mio problema: peridicamente viene aggiornata la base dati
>su MSDE e io devo sincronizzare Sql 2005. Farlo in maniera sincrona
>poi sarebbe una figata!
Ecco, io invece ti suggerisco proprio di utilizzare una sincronizzazione periodica asincrona, onde evitare di ammazzare le prestazioni dei DBMS.
Ti ricordo che un AFTER TRIGGER mantiene aperta la transazione fino alla sua completa esecuzione.
Questo significa che i locks vengono mantenuti per tutta la durata di esecuzione del trigger, diminuendo ENORMEMENTE la scalabilità del sistema.
Sulla istanza MSDE definirei un linked server all'istanza SQL Server 2005 e creerei un job schedulato ogni x tempo (che deciderai tu) che provvederà a "spazzolare" la specifica tabella copiando le righe nuove/modificate nella corrispetiva tabella sul linked server.
Per evitare ogni volta di eseguire una query distribuita per stabilire quali righe sono state inserite o modificate, potresti prevedere una colonna aggiuntiva chiamata Status char(1) che andrai a valorizzare ad "I" tramite un TRIGGER di INSERT per tutte le nuove righe inserite e a "U" tramite un TRIGGER di UPDATE per ogni riga aggiornata.
Al termine della "spazzolata" da parte del Job di sincronizzazione potrai impostare a NULL o ad un valore che preferisci (tipo "E" per Exported) questa colonna, in modo che al passaggio suggessivo non andrai più a considerare le righe già sincronizzate in precedenza.
>Grazie ancora, ciao
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 14 giu 2007 - 00:48
>Ecco, io invece ti suggerisco proprio di utilizzare una sincronizzazione
>periodica asincrona, onde evitare di ammazzare le prestazioni
>dei DBMS.
Ciao, scusate se intervengo..
A mio avviso potrebbe essere utile anche utilizzare SSIS. Lasciando invariata la parte del campo in più che definisce il tipo di operazione sul record, potrebbe essere vantaggioso far lanciare dal job un package DTSX con le due connessioni, una a sql server 2005 e l'altra a MSDE. In questo modo, il job asincrono, lancerebbe il SSIS ogni tot.
Inoltre non definiresti alcun linked server..
Diciamo che trovo comodo utilizzare Pacchetti di questo tipo poichè sono rivolti al porting ed alla trasformazione dei dati, ed in più ti forniscono strumenti per la logica da applicare sulla trasformazione dei dati stessi.
Potrebbe essere un'altra soluzione, possibile poichè hai una standard edition e comoda sulla manutenibilità..
Per ciò che riguarda le prestazioni, una stored procedure di sincronizzazione è sicuramente più veloce..
L'ho buttata lì
Ciao!
Alx81 =)
http://blogs.dotnethell.it/suxstellino
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
gio 14 giu 2007 - 08:21
>A mio avviso potrebbe essere utile anche utilizzare SSIS. Lasciando
>invariata la parte del campo in più che definisce il tipo di
>operazione sul record, potrebbe essere vantaggioso far lanciare
>dal job un package DTSX con le due connessioni, una a sql server
>2005 e l'altra a MSDE. In questo modo, il job asincrono, lancerebbe
>il SSIS ogni tot.
>Inoltre non definiresti alcun linked server..
Il concetto rimane sempre quello, ma personalmente non mi metterei a tribulare con i SSIS per una banale query di INSERT/UPDATE.
Inoltre come faresti coi SSIS a determinare le righe da aggiungere e quelle da modificare?
- Query distribuite?
- Colonna Status come ho suggerito sopra?
- Altra tecnica?
>Diciamo che trovo comodo utilizzare Pacchetti di questo tipo
>poichè sono rivolti al porting ed alla trasformazione dei dati,
>ed in più ti forniscono strumenti per la logica da applicare
>sulla trasformazione dei dati stessi.
Vero, ma in questo caso non deve essere eseguita alcuna trasformazione.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
adima80
Profilo
| Junior Member
158
messaggi | Data Invio:
gio 14 giu 2007 - 09:09
Grazie a tutti per l'attenzione, credo che procederò con dei trigger visto che credo di riuscire a recuperare le informazioni di variazione ed inserimente.
Ciao
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 14 giu 2007 - 13:53
>Il concetto rimane sempre quello, ma personalmente non mi metterei
>a tribulare con i SSIS per una banale query di INSERT/UPDATE.
Il lavoro è più visuale e forse ai più meno conosciuto.. ma sarebbe di veloce sviluppo..
>Inoltre come faresti coi SSIS a determinare le righe da aggiungere
>e quelle da modificare?
>- Query distribuite?
>- Colonna Status come ho suggerito sopra?
>- Altra tecnica?
La colonna di stato dovrebbe rimanere.. altrimenti non so come fare per capire l'operazione
>>Diciamo che trovo comodo utilizzare Pacchetti di questo tipo
>>poichè sono rivolti al porting ed alla trasformazione dei dati,
>>ed in più ti forniscono strumenti per la logica da applicare
>>sulla trasformazione dei dati stessi.
>Vero, ma in questo caso non deve essere eseguita alcuna trasformazione.
Infatti dipende ovviamente dall'operazione che c'è da fare.. come ripeto, ho buttato lì una, a mio avviso, buona possibilità.
Comunque sono d'accordo con te che non è necessario, in questo caso, complicarsi la vita.
>
>Ciao!
Ciao e grazie.
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>
http://blogs.dotnethell.it/lorenzo/
>
http://italy.mvps.org
Alx81 =)
http://blogs.dotnethell.it/suxstellino
Torna su
Stanze Forum
Elenco Threads
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 !