SQL Server Change Data Capture è una funzionalità che legge i dati storici dai registri delle transazioni di SQL Server e li memorizza in una tabella speciale.
Tramite l'uso di speciali funzioni di valori di tabella (TVF) consente quindi all'utente di interrogare questi dati, rendendo possibile sia ottenere tutte le modifiche su una tabella specifica o solo le modifiche nette risultanti dalle modifiche entro un determinato tempo.
CDC ha alcuni vantaggi
- Può essere configurato per tracciare solo determinate tabelle o colonne.
- È in grado di gestire i cambiamenti del modello in una certa misura.
- Non influisce sulle prestazioni tanto quanto i trigger perché funziona con i registri delle transazioni.
- È facilmente abilitato / disabilitato e non richiede colonne aggiuntive sulla tabella che devono essere monitorate.
Ha anche alcuni svantaggi:
- La quantità di dati storici può diventare enorme rapidamente.
- Non è possibile tenere traccia di chi ha apportato le modifiche (almeno non per le eliminazioni).
- I dati della cronologia richiedono un po 'di tempo per essere recuperati, poiché sono basati sui registri delle transazioni.
- Dipende dall'agente SQL Server. Se l'agente non è in esecuzione o si arresta in modo anomalo, non viene rilevata alcuna cronologia.
Ho letto molto su CDC e anche se ora so come usarlo, non sono ancora sicuro che sia lo strumento giusto per me.
- Per quali compiti / scenari CDC è lo strumento giusto? (ad es. consentire agli utenti di ripristinare un oggetto dati fino a un certo momento? Controllo? Visualizzazione della cronologia completa dei dati?)
- Quando preferisci non utilizzare CDC, ma ricorrere a una soluzione personalizzata basata su trigger?
- È possibile utilizzare CDC in un database operativo e utilizzare i dati CDC all'interno di un'applicazione operativa? (es. mostrandolo all'utente finale) O è chiaramente un uso improprio di questa funzione?
Ho sentito comunemente che CDC è uno strumento di controllo, ma non è quello che serve a SQL Server Audit ? Sono entrambi strumenti diversi per lo stesso compito? O CDC può essere utilizzato per altre cose?
Il mio scenario attuale è che mi viene chiesto di costruire un framework di dati affidabile che dovrebbe essere la base per molteplici applicazioni future. I requisiti esatti sono sfocati, ma uno è che dovrebbe essere in grado di tracciare la cronologia dei dati e ripristinare le voci più vecchie insieme a tutti i dati correlati da altre tabelle. Sto valutando CDC in questo momento come un'opzione, ma non sono sicuro che questa sia la strada da percorrere, perché non riesco davvero a trovare alcun caso d'uso raccomandato.
Mentre apprezzo i consigli per il mio scenario specifico, le risposte dovrebbero fornire consigli generali su quando o quando non utilizzare Change Data Capture.