04/06/2011

Change Data Capture: il tracking delle modifiche secondo SQL Server 2008 (parte 1)

A cura di Gianluca Negrelli


Pagina 1 di 3

Un'esigenza che ricorre spesso nelle applicazioni connesse ad un database è quella di effettuare il tracking delle modifiche cui sono normalmente soggetti i dati. Un qualsiasi record infatti, rispetto al proprio stato attuale, può aver subito modifiche di vario tipo che vengono perdute con le successive sovrascritture. Se, ad un certo punto, il record è soggetto a cancellazione, scompare fisicamente (anche se può permanere per un certo tempo nel log di SQL Server) e viene persa memoria della sua esistenza.

Per alcuni scenari questa modalità di gestione del dato è appropriata ma per altri può essere necessario mantenere traccia delle trasformazioni cui il dato è soggetto, per motivi legali, statistici, di prova o di garanzia. L'approccio Microsoft al problema passa per la tecnologia di SQL Server Change Data Capture (CDC), disponibile a partire da SQL Server 2008.

E' necessario sottolineare che lo scopo di questa tecnologia non è quello di sostituire in tutto e per tutto la gestione storica di un database: la gestione storica presuppone, infatti, la cristallizzazione di alcuni stati di un singolo dato e non delle singole transazioni cui può essere soggetto. Pensiamo ad esempio ad una modifica apportata per correggere un errore grammaticale: difficilmente il dato con l'errore entrerà a far parte della catena storica di quella informazione perché una correzione normalmente non è un evento interessante. Anche una cancellazione può non essere percepita come importante tenendo in considerazione il fenomeno che si sta elaborando.

In altre parole una gestione storica dei dati ha come presupposto che ai dati e alle loro modificazioni vengano dati significato e valore rispetto al contesto che li ospita.

CDC invece non entra nel merito del significato dell'inserimento, della modifica o della cancellazione di un dato ma traccia tutto ciò che a quell'informazione succede. Possiamo interpretare CDC come uno strumento di logging massivo sui dati.

Per trasformare i dati grezzi così raccolti in informazioni significanti, potrebbe essere necessario un ulteriore passaggio verso un data warehouse che venga costruito in modo da attribuire i giusti significati al raccolto.


Vantaggi rispetto a soluzioni home made

L'esigenza di tracciare le modifiche veniva normalmetne risolta, prima dell'avvento di CDC, con vari artifici applicativi: triggers, colonne con timestamps, tabella parallele, comandi impartiti direttamente dai software di gestione e così via.

Ogni soluzione di questo tipo, per quanto ben implementata e funzionante, non può che aggiungere un grosso carico di lavoro al database.

CDC è una tecnlogia implementata con l'accortezza di non appesantire l'istanza di SQL Server. Si avvale infatti di un processo asincrono per la cattura dei dati (lo stesso in uso nel meccanismo delle repliche di SQL Server) leggendo direttamente il transaction log, quindi con un impatto minimo sul sistema, e scrivendo i risultati sulle change tables (le tabelle che raccolgono le modifiche) che vengono gestite in modo autonomo.

In seguito verranno approfonditi meglio i concetti implicati in questa soluzione.


Abilitazione di CDC

CDC può essere utilizzato nelle versioni Enterprise, Developer e Evaluation di SQL Server 2008 e 2008 R2 (sono quindi escluse le versioni Express e Standard).

E' inoltre necessario avviare SQL Server Agent che verrà impiegato per il monitoraggio delle tabelle sorgenti.

CDC va attivato preventivamente a livello di database utilizzando la stored procedure di sistema sys.sp_cdc_enable_db. Per l'eventuale disattivazione del servizio va usata invece la stored procedure sys.sp_cdc_disable_db.

L'effetto pratico dell'abilitazione di CDC si può notare dalla creazione di alcune nuove tabelle di sistema come visibile in figura.

Ogni tabella creata da CDC è preceduta dall'indicazione di uno schema apposito (l'omonimo cdc). Se nel database corrente esistesse già uno schema cdc, SQL Server non sarebbe in grado di abilitare il servizio sul database corrente.

CDC crea anche alcune SP di sistema e un utente apposito (cdc) da utilizzare per la propria gestione.

Pagina 1 di 3

Commenti


21/03/2012 15.56
Ciupaz: Funzionalità di stampa
Ciao,
è possibile aggiungere un pulsantino per poter effettuare la stampa di questi articoli, un po' come succede su MSDN?

Grazie.

Luigi


Cobisi EmailVerify.NET is a Microsoft .NET software component that validates email addresses. valid email