cdc.<capture_instance>_CT (Transact-SQL)

Die Änderungstabelle, die erstellt wird, wenn Change Data Capture für eine Quelltabelle aktiviert wird. Für jeden Einfüge- oder Löschvorgang, der in der Quelltabelle ausgeführt wird, gibt die Tabelle eine Zeile zurück, für jeden Updatevorgang in der Quelltabelle gibt sie zwei Zeilen zurück. Wird der Name der Änderungstabelle bei der Aktivierung der Quelltabelle nicht angegeben, wird der Name abgeleitet. Der Name hat das Format cdc.capture_instance_CT, wobei capture_instance sich aus dem Schemanamen der Quelltabelle und dem Namen der Quelltabelle im Format schema_table zusammensetzt. Wenn beispielsweise die Tabelle Person.Address in der AdventureWorks2008R2-Beispieldatenbank für Change Data Capture aktiviert ist, lautet der abgeleitete Name der Änderungstabelle cdc.Person_Address_CT.

Es wird empfohlen, die Systemtabellen nicht direkt abzufragen. Führen Sie stattdessen die Funktionen cdc.fn_cdc_get_all_changes_<capture_instance> und cdc.fn_cdc_get_net_changes_<capture_instance> aus.

Spaltenname

Datentyp

Beschreibung

__$start_lsn

binary(10)

Protokollfolgenummer (LSN, Log Sequence Number), die dem Commit für die Änderung zugeordnet wurde.

Alle Änderungen, für die ein Commit in derselben Transaktion ausgeführt wurde, verwenden dieselbe Commit-LSN. Wenn z. B. bei einem Löschvorgang in der Quelltabelle zwei Zeilen entfernt werden, enthält die Änderungstabelle zwei Zeilen, die jeweils denselben __$start_lsn-Wert aufweisen.

__$end_lsn

binary(10)

Nur für Informationszwecke identifiziert. Nicht unterstützt. Zukünftige Kompatibilität wird nicht sichergestellt.

In SQL Server 2008 hat diese Spalte immer den Wert NULL.

__$seqval

binary(10)

Sequenzwert, der verwendet wird, um die Zeilenänderungen innerhalb einer Transaktion zu sortieren.

__$operation

int

Identifiziert den Vorgang der Datenbearbeitungssprache (Data Manipulation Language, DML), der der Änderung zugeordnet ist. Dabei kann es sich um einen der folgenden Werte handeln:

1 = Löschen

2 = Einfügen

3 = Aktualisieren (alte Werte)

Spaltendaten verfügen vor der Ausführung der UPDATE-Anweisung über Zeilenwerte.

4 = Aktualisieren (neue Werte)

Spaltendaten verfügen nach der Ausführung der UPDATE-Anweisung über Zeilenwerte.

__$update_mask

varbinary(128)

Eine Bitmaske, die auf den Spaltenordnungszahlen der Änderungstabelle basiert, die geänderte Spalten identifiziert.

<<captured source table columns>>

variiert

Bei den verbleibenden Spalten in der Änderungstabelle handelt es sich um die Spalten aus der Quelltabelle, die beim Erstellen der Aufzeichnungsinstanz als aufgezeichnete Tabellen identifiziert wurden. Wenn in der Liste der aufgezeichneten Spalten keine Spalten angegeben wurden, werden alle Spalten in der Quelltabelle in diese Tabelle aufgenommen.

Hinweise

Datentypen von aufgezeichneten Spalten

Die in dieser Tabelle enthaltenen aufgezeichneten Spalten haben denselben Datentyp und Wert wie die entsprechenden Quellspalten. Hierbei gelten folgende Ausnahmen:

  • Timestamp-Spalten sind als binary(8)-Datentyp definiert.

  • Identity-Spalten sind als int-Datentyp oder bigint-Datentyp definiert.

Die Werte in diesen Spalten sind jedoch mit den Quellspaltenwerten identisch.

LOB (Large Object)-Datentypen

Für die LOB-Datentypen varchar(max), nvarchar(max), varbinary(max), image, text, ntext und xml wird der alte Wert nur dann in der alten Zeile des Updates angezeigt, wenn die Spalte während des Updates tatsächlich geändert wurde. Für andere Datentypen wird der Spaltenwert immer in beiden Updatezeilen angezeigt.

Standardmäßig können einer aufgezeichneten Spalte in einer einzelnen Anweisung vom Typ INSERT, UPDATE, WRITETEXT oder UPDATETEXT maximal 65.536 Bytes oder 64 KB hinzugefügt werden. Geben Sie mithilfe der Option max text repl size einen höheren Wert für die Maximalgröße an, sodass auch umfangreichere LOB-Daten unterstützt werden. Weitere Informationen finden Sie unter Vorgehensweise: Konfigurieren der Option max text repl size (SQL Server Management Studio).

Änderungen mithilfe der Datendefinitionssprache (Data Definition Language, DDL)

DDL-Änderungen an der Quelltabelle, wie das Hinzufügen oder Löschen von Spalten, werden in der cdc.ddl_history-Tabelle aufgezeichnet. Diese Änderungen werden nicht auf die Änderungstabelle angewendet. Die Definition der Änderungstabelle bleibt also konstant. Werden Zeilen in die Änderungstabelle eingefügt, werden während des Aufzeichnungsvorgangs diejenigen Spalten ignoriert, die nicht in der Liste der aufgezeichneten Spalten, die der Quelltabelle zugeordnet ist, aufgeführt sind. Falls in der Liste der aufgezeichneten Spalten eine Spalte angezeigt wird, die sich nicht mehr in der Quelltabelle befindet, wird dieser Spalte ein NULL-Wert zugewiesen.

Wird der Datentyp einer Spalte in der Quelltabelle geändert, wird dies auch in der cdc.ddl_history-Tabelle aufgezeichnet. Durch diese Änderung wird die Definition der Änderungstabelle jedoch nicht geändert. Der Datentyp der aufgezeichneten Spalte in der Änderungstabelle wird geändert, wenn während des Aufzeichnungsvorgangs der Protokolldatensatz für die an der Quelltabelle vorgenommenen Änderungen gefunden wird.

Falls Sie den Datentyp einer aufgezeichneten Spalte in der Quelltabelle so ändern müssen, dass die Größe des Datentyps verringert wird, stellen Sie anhand dieser Schritte sicher, dass die entsprechende Spalte in der Änderungstabelle erfolgreich geändert werden kann.

  1. Aktualisieren Sie in der Quelltabelle die Werte in der zu ändernden Spalte, sodass ihre Größe für die geplante Datentypgröße geeignet ist. Wenn Sie den Datentyp beispielsweise von int in smallint ändern, aktualisieren Sie die Werte auf eine Größe, die im smallint-Bereich von -32.768 bis 32.767 liegt.

  2. Führen Sie denselben Aktualisierungsvorgang in der Änderungstabelle für die entsprechende Spalte aus.

  3. Ändern Sie die Quelltabelle, indem Sie den neuen Datentyp angeben. Die Datentypänderung wird erfolgreich an die Änderungstabelle weitergegeben.

Änderungen mithilfe der Datenbearbeitungssprache (Data Manipulation Language, DDL)

Wenn in einer Change Data Capture-aktivierten Quelltabelle Einfüge-, Aktualisierungs- und Löschvorgänge ausgeführt werden, wird im Datenbanktransaktionsprotokoll ein Datensatz dieser DML-Vorgänge angezeigt. Der Change Data Capture-Prozess ruft Informationen über diese Änderungen aus dem Transaktionsprotokoll ab und fügt der Änderungstabelle zur Aufzeichnung der Änderung eine oder zwei Zeilen hinzu. Die Einträge werden in derselben Reihenfolge in die Änderungstabelle eingefügt, in der sie an die Quelltabelle übergeben wurden, obwohl der Commit für Einträge in der Änderungstabelle normalerweise für Gruppen von Änderungen statt für einzelne Einträge ausgeführt werden muss.

Die __$start_lsn-Spalte im Änderungstabelleneintrag wird für die Aufzeichnung der Commit-LSN verwendet, die der Änderung in der Quelltabelle zugeordnet ist, und die __$seqval-Spalte wird verwendet, um die Änderung innerhalb der zugehörigen Transaktion der Reihenfolge nach zu sortieren. In Kombination können diese Metadatenspalten verwendet werden, um sicherzustellen, dass die Reihenfolge der Änderungen beim Commit beibehalten wird. Da die Änderungsinformationen beim Aufzeichnungsprozess aus dem Transaktionsprotokoll abgerufen werden, werden die Einträge in der Änderungstabelle nicht synchron mit den entsprechenden Änderungen in der Quelltabelle angezeigt. Stattdessen werden die Änderungen asynchron angezeigt, nachdem die relevanten Änderungseinträge aus dem Transaktionsprotokoll vom Aufzeichnungsprozess verarbeitet wurden.

Bei Einfüge- und Löschvorgängen werden alle Bits in der Updatemaske festgelegt. Bei Updatevorgängen wird die Updatemaske sowohl in den alten als auch in den neuen Zeilen des Updates entsprechend den Spalten geändert, die während des Updates geändert wurden.