it-swarm.com.de

Wann wird CDC verwendet, um den Verlauf zu verfolgen?

SQL Server Change Data Capture ist eine Funktion, mit der historische Daten 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 Nettoänderungen, die sich aus den Änderungen ergeben, innerhalb einer bestimmten Zeit abgerufen werden können.

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.
  • Die Leistung wird nicht so stark beeinträchtigt wie die Auslöser, da sie mit den Transaktionsprotokollen funktioniert.
  • Es ist einfach zu aktivieren/deaktivieren und erfordert keine zusätzlichen Spalten in der Tabelle, die verfolgt werden sollten.

Es hat auch einige Nachteile:

Ich habe 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.

  1. Für welche Aufgaben/Szenarien ist CDC das richtige Tool? (z. B. Benutzer können ein Datenobjekt zu einem bestimmten Zeitpunkt wiederherstellen? Überwachung? Vollständige Anzeige Datenhistorie?)
  2. Wann sollten Sie CDC lieber nicht verwenden, sondern auf eine benutzerdefinierte Trigger-basierte Lösung zurückgreifen?
  3. Ist es in Ordnung, CDC in einer Betriebsdatenbank zu verwenden und die CDC-Daten in einer Betriebsanwendung zu verwenden? (z. B. dem Endbenutzer anzeigen) Oder ist dies eindeutig ein Missbrauch dieser Funktion?

Ich höre häufig, dass CDC ein Audit-Tool ist, aber ist das nicht das, wofür SQL Server Audit ist? Sind beide unterschiedliche Werkzeuge für dieselbe Aufgabe? Oder kann CDC für andere Dinge verwendet werden?

Mein aktuelles Szenario ist, dass ich gebeten werde, ein zuverlässiges Datenframework zu erstellen, das die Grundlage für mehrere zukünftige Anwendungen bilden soll. Die genauen Anforderungen sind verschwommen, aber eine 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 evaluiere CDC derzeit als Option, bin mir aber nicht sicher, ob dies der richtige Weg ist, da ich keine empfohlenen Anwendungsfälle finden kann.

Obwohl ich Ratschläge für mein spezifisches Szenario schätze, sollten Antworten allgemeine Ratschläge geben, wann oder wann Change Data Capture nicht verwendet werden soll.

26
magnattic

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 dies Ihre Fragen beantwortet, z. B. die verschiedenen Szenarien, in denen die Funktionen angemessen und aufwändig wären. http://solutioncenter.apexsql.com/tag/methods-for-auditing-sql-server

12
brynn

Zuerst,

Die Datenerfassung für Änderungen ist nur in den Editionen Enterprise, Developer und Evaluation von SQL Server verfügbar.

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 es keine Echtzeit, dies ist sowohl ein Vorteil als auch ein Nachteil. Die Verwendung von Triggern verlangsamt ein Update immer.

Ich habe an einem System gearbeitet, als wir Trigger (von CodeSmith generiert) verwendet und alle Änderungen an den Datensätzen verfolgt haben. Außerdem haben wir die Änderungen mit einer "Verlauf" -Tabelle verknüpft, die das Modul der Anwendung enthält, die die Änderung vorgenommen hat. und das UI-Element, 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 wiedergegeben wird, um zu einem bestimmten Zeitpunkt eine Datenbank zu erstellen. Siehe Zeitliche Muster im Martin Flowler-Blog für einen guten Überblick über die Optionen.

12
Ian Ringrose

Für welche Aufgaben/Szenarien ist CDC das richtige Werkzeug? (z. B. Benutzern erlauben, ein Datenobjekt zu einem bestimmten Zeitpunkt wiederherzustellen?

Vielleicht kommt es darauf an.

Wirtschaftsprüfung?

Ja.

Den vollständigen Datenverlauf anzeigen?)

Ja.

Wann sollten Sie CDC lieber nicht verwenden, sondern auf eine benutzerdefinierte Trigger-basierte Lösung zurückgreifen?

Wenn die Daten in der Änderungstabelle nicht Ihren Anforderungen entsprechen.

Ist es in Ordnung, CDC in einer Betriebsdatenbank zu verwenden und die CDC-Daten in einer Betriebsanwendung zu verwenden? (z. B. dem Endbenutzer zeigen)

Ja.

Oder ist dies eindeutig ein Missbrauch dieser Funktion?

Nein, es ist kein Missbrauch dieser Funktion.

Ich höre häufig, dass CDC ein Audit-Tool ist, aber ist das nicht der Zweck von SQL Server Audit?

Ja.

Sind beide unterschiedliche Werkzeuge für dieselbe Aufgabe?

Nein.

Oder kann CDC für andere Dinge verwendet werden?

CDC kann für andere Dinge verwendet werden.

Es gibt Change Tracking und Change Data Capture. Beide haben ihre Wurzeln in der Replikation.

Die Änderungsverfolgung bietet eine Möglichkeit, die Nettoänderungen an einer Tabelle bereitzustellen. Ein Anwendungsbeispiel wäre eine Handgerätesynchronisierung.

CDC hingegen verfolgt jede kleine Veränderung, eine Geschichte. Man kann diesen Verlauf verwenden, um ein Data Warehouse zu aktualisieren, anstatt Daten in großen Mengen zu kopieren, oder man kann diesen Verlauf als Daten selbst verwenden und daraus Berichte erstellen. Die Änderungstabelle ist weder ausgeblendet noch hat 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. Achten Sie also darauf, 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 Overhead hat, und Sie müssen über Disaster Recovery nachdenken.

9
stacylaray

Ein Punkt der Korrektur. Zu einem Zeitpunkt war die Erfassung von Änderungsdaten nur in den oben aufgeführten Versionen verfügbar. Die Erfassung von Änderungsdaten wurde jedoch ab 2016 SP1 in der Standardausgabe verfügbar. Daher klingen viele Artikel, die vor 2016 SP1 geschrieben wurden, so, als ob CDC für diejenigen von uns, die die Standard Edition verwenden, unerreichbar ist. Dies ist nicht mehr der Fall. Das Microsoft-Dokument, in dem die Verfügbarkeit von CDC beschrieben wird, befindet sich unter dem folgenden Link.

https://docs.Microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017#DW

2
Robert Sievers