Das grundsätzliche Problem mit der Erfassung von Datenänderungen besteht darin, dass sie Trigger in der Basistabelle erfordern. Diese Trigger können entweder die Daten direkt in Audit-Tabellen schreiben oder mithilfe der Service-Broker-Funktion zu einem späteren Zeitpunkt erfassen. In beiden Fällen muss die erste Erfassung im Rahmen der ursprünglichen Transaktion erfolgen. In SQL Server 2008 ermöglicht die Funktion Change Data Capture (CDC) eine viel einfachere Erfassung von Datenänderungen, ohne dass Trigger verwendet werden, so dass auch der damit verbundene Aufwand entfällt.
Einrichten der CDC-Funktion
Als Beispiel soll eine Datenbank zum Testen der verwendeten Szenarien erstellt werden. Die Anweisung unten erstellt eine Datenbank namens CaptureChanges in der verwendeten Datenbankinstanz:
CREATE DATABASE CaptureChanges GO
Um CDC nutzen zu können, muss es auf Datenbankebene aktiviert werden. Folgende Anweisung ruft die gespeicherte Prozedur sp_cdc_enable_db auf, die CDC für den aktuellen Datenbankbereich aktiviert:
USE CaptureChanges GO EXEC sys.sp_cdc_enable_db GO
Um zu zeigen, wie CDC Datenänderungen erfasst, ist eine Tabelle erforderlich, in der Datenänderungen vorgenommen werden können. Das unten stehende Skript erstellt eine Tabelle namens SalesHistory und schreibt Daten hinein:
Zu diesem Zeitpunkt sind noch keine Einträge in der SalesHistory erfasst, da sie noch für CDC aktiviert werden muss. Um CDC für eine bestimmte Tabelle zu verwenden, muss die Tabelle einen Primärschlüssel-Constraint oder einen Unique-Constraint enthalten, um die Zeilen in der Tabelle eindeutig zu identifizieren. Im Beispiel oben wird eine IDENTITY-Spalte für den Primärschlüssel-Constraint verwendet.
Um die Tabelle für die Datenerfassung zu aktivieren, muss man eine gespeicherte Prozedur ausführen und den Tabellenname eingeben (Der SQL Server Agent sollte während der Ausführung dieser gespeicherten Prozedur laufen.).
Jetzt soll eine willkürliche Auswahl von Einträgen in der SalesHistory-Tabelle aktualisiert werden. Da CDC für diese Tabelle aktiviert ist, erfasst das CDC-System die Datenänderungen.
UPDATE s SET SalePrice = SalePrice + 1 FROM SalesHistory s where SaleID % 13 = 0
Würde das CDC-Schema nicht bereits in der Datenbank existieren, würde es von der Prozedur oben erstellt werden. Alle CDC-Tabellen gehören zu diesem Schema.
Wenn die CapturesChanges-Tabelle für CDC aktiviert ist, werden zwei SQL-Server-Agent-Jobs erstellt. Der eine Job verwendet den LogReader zur Erfassung von Änderungen, während der andere Job zum Entfernen älterer Meldungen dient. Die erstellten Job-Namen sind unten aufgeführt:
cdc.CaptureChanges_capture cdc.CaptureChanges_cleanup
CDC besitzt Systemtabellen, die bei Aktivierung von CDC erstellt werden. Das Augenmerk muss zunächst auf der Tabelle liegen, welche die auditierten Daten speichert. Eine SalesHistory_CT-Tabelle wird erstellt, wenn die SalesHistory-Tabelle für CDC aktiviert wird. In dieser Tabelle erscheinen die Datenänderungen, zusammen mit einer Reihe zusätzlicher Spalten, die CDC zum Berichten von Datenänderungen verwendet. Zu beachten ist, dass diese Tabelle zum CDC-Schema gehört.
Der Cybersecurity Report von Hornetsecurity stuft 2,3 Prozent der Inhalte gar als bösartig ein. Die…
Die Hintermänner haben es auf Zugangsdaten zu Microsoft Azure abgesehen. Die Kampagne ist bis mindestens…
Cloud-Plattform für elektronische Beschaffungsprozesse mit automatisierter Abwicklung elektronischer Rechnungen.
Mindestens eine Schwachstelle erlaubt eine Remotecodeausführung. Dem Entdecker zahlt Google eine besonders hohe Belohnung von…
Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…
Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…