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.
quelle
Antworten:
Zuerst,
Dies kann für Sie entscheiden, ob einer Ihrer Kunden nicht über die Enterprise-Editionen verfügt oder ob Sie noch nicht wissen, dass Sie die Enterprise-Editionen verwenden werden. (Da die Spezifikation "mehrere zukünftige Anwendungen" enthält, kann dies ein echtes Problem für Sie sein.)
Im Gegensatz zu Triggern ist dies keine Echtzeit, sondern sowohl ein Vorteil als auch ein Nachteil. Die Verwendung von Triggern verlangsamt ein Update immer.
Ich habe an einem System gearbeitet, als wir Trigger verwendeten (von CodeSmith generiert) und alle Änderungen an den Datensätzen verfolgten. Außerdem haben wir die Änderungen mit einer Verlaufstabelle verknüpft, die das Modul der Anwendung enthielt, die die Änderung vorgenommen hat. und das Benutzeroberflächenelement, mit dem der Benutzer die Änderung vorgenommen hat.
Sie können dies jedoch am besten auf Anwendungsebene lösen, indem Sie beispielsweise alle Aktualisierungen in eine Nachrichtenwarteschlange schreiben, die dann wiederholt wird, um zu einem bestimmten Zeitpunkt eine Datenbank zu erstellen. Eine gute Übersicht über die Optionen finden Sie unter Temporale Muster im Martin Flowler-Blog .
quelle
Hier ist eine sehr gut geschriebene 9-teilige Serie, in der die verschiedenen Methoden zum Überwachen von SQL Server-Datenänderungen beschrieben werden. Die Teile 3, 4 und 5 konzentrieren sich auf CDC. Es lohnt sich, alle Artikel durchzulesen, da hierdurch Ihre Fragen beantwortet werden, beispielsweise in den verschiedenen Szenarien, in denen die Funktionen angemessen und überlastet wären. http://solutioncenter.apexsql.com/tag/methods-for-auditing-sql-server
quelle
Vielleicht kommt es darauf an.
Ja.
Ja.
Wenn die Daten in der Änderungstabelle nicht Ihren Anforderungen entsprechen.
Ja.
Nein, dies ist kein Missbrauch dieser Funktion.
Ja.
Nein.
CDC kann für andere Zwecke verwendet werden.
Es gibt Änderungsnachverfolgung und es gibt Änderungsdatenerfassung. Beide haben ihre Wurzeln in der Replikation.
Mit der Änderungsnachverfolgung können Sie die Nettoveränderungen für eine Tabelle bereitstellen. Ein Beispiel für die Verwendung wäre eine Handheld-Gerätesynchronisation.
CDC hingegen verfolgt jede kleine Veränderung, eine Geschichte. Man kann diesen Verlauf verwenden, um ein Data Warehouse zu aktualisieren, anstatt Daten massenweise zu kopieren, oder man kann diesen Verlauf als Daten selbst verwenden und daraus Berichte erstellen. Die Änderungstabelle ist weder versteckt noch enthält sie ein seltsames Schema oder ähnliches. Sie können es abfragen und die Daten verwenden, wie Sie möchten. Denken Sie daran ... es ist keine Echtzeit, wie Ian sagte. Die Daten stammen aus dem Transaktionsprotokoll. Vergewissern Sie sich daher, dass Sie Replikation, Spiegelung oder Protokollversand verwenden. Im Großen und Ganzen ist es schneller als Trigger. Sie müssen die Snapshot-Isolation verwenden, die mit Overhead verbunden ist, und Sie müssen über Disaster Recovery nachdenken.
quelle
Ein Punkt der Korrektur. Zu einer Zeit war die Erfassung von Änderungsdaten nur in den oben aufgeführten Versionen verfügbar. Die Erfassung von Änderungsdaten war jedoch in der Standardausgabe ab 2016 SP1 verfügbar. In vielen Artikeln, die vor 2016 SP1 verfasst wurden, klingt es daher so, als ob CDC für diejenigen von uns, die die Standard-Edition verwenden, unerreichbar wäre. Dies ist nicht mehr der Fall. Das Microsoft-Dokument mit den verfügbaren Informationen zu CDC finden Sie unter dem folgenden Link.
https://docs.microsoft.com/de-de/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017#DW
quelle