SQL Server Change Data Capture ist eine Funktion, mit der Verlaufsdaten aus den SQL Server-Transaktionsprotokollen gelesen und in einer speziellen Tabelle gespeichert werden.
Durch die Verwendung spezieller Tabellenwertfunktionen (TVF) kann der Benutzer diese Daten abfragen, sodass entweder alle Änderungen an einer bestimmten Tabelle oder nur die Nettoveränderungen abgerufen werden können, die sich aus den Änderungen innerhalb einer bestimmten Zeit ergeben.
CDC hat bestimmte Vorteile
- Es kann so konfiguriert werden, dass nur bestimmte Tabellen oder Spalten verfolgt werden.
- Es ist in der Lage, Modelländerungen bis zu einem gewissen Grad zu verarbeiten.
- Es beeinträchtigt die Leistung nicht so stark wie Trigger, da es mit den Transaktionsprotokollen zusammenarbeitet.
- Es ist leicht zu aktivieren / deaktivieren und erfordert keine zusätzlichen Spalten in der Tabelle, die verfolgt werden sollten.
Es hat auch einige Nachteile:
- Die Menge der Verlaufsdaten kann sehr schnell werden.
- Sie können nicht verfolgen, wer die Änderungen vorgenommen hat (zumindest nicht zum Löschen).
- Das Aufrufen der Verlaufsdaten dauert einige Zeit, da sie auf den Transaktionsprotokollen basieren.
- Dies hängt vom SQL Server-Agenten ab. Wenn der Agent nicht ausgeführt wird oder abstürzt, wird kein Verlauf aufgezeichnet.
Ich habe ziemlich viel über CDC gelesen und obwohl ich jetzt weiß, wie man es benutzt, bin ich mir immer noch nicht sicher, ob es das richtige Werkzeug für mich ist.
- Für welche Aufgaben / Szenarien ist CDC das richtige Werkzeug? (z. B. Benutzern erlauben, ein Datenobjekt zu einem bestimmten Zeitpunkt wiederherzustellen? Überwachung? Anzeigen des vollständigen Datenverlaufs?)
- Wann sollten Sie CDC lieber nicht verwenden, sondern auf eine benutzerdefinierte, auf Triggern basierende Lösung zurückgreifen?
- Ist es in Ordnung, CDC in einer Betriebsdatenbank zu verwenden und die CDC-Daten in einer Betriebsanwendung zu verwenden? (zB dem Endbenutzer zeigen) Oder ist dies eindeutig ein Missbrauch dieser Funktion?
Ich höre häufig, dass CDC ein Audit-Tool ist, aber ist das nicht, wofür SQL Server Audit ist? Sind sie beide verschiedene Werkzeuge für die gleiche Aufgabe? Oder kann CDC für andere Dinge verwendet werden?
Mein derzeitiges Szenario ist, dass ich gebeten werde, ein zuverlässiges Datenframework zu erstellen, das die Basis für mehrere zukünftige Anwendungen sein soll. Die genauen Anforderungen sind verschwommen, aber eine davon ist, dass es in der Lage sein sollte, den Datenverlauf zu verfolgen und ältere Einträge zusammen mit allen zugehörigen Daten aus anderen Tabellen wiederherzustellen. Ich prüfe CDC derzeit als Option, bin mir jedoch nicht sicher, ob dies der richtige Weg ist, da ich keine wirklich empfohlenen Anwendungsfälle finden kann.
Während ich Ratschläge für mein bestimmtes Szenario schätze, sollten Antworten allgemeine Ratschläge darüber geben, wann oder wann Change Data Capture nicht verwendet werden soll.