Change Data Capture und andere Funktionen

Gilt für:SQL ServerAzure SQL Managed Instance

In diesem Artikel wird beschrieben, wie die folgenden Features mit der Änderungsdatenerfassung für SQL Server und Azure SQL verwaltete Instanz interagieren. Informationen zu Azure SQL-Datenbank finden Sie unter CDC mit Azure SQL-Datenbank.

Änderungsnachverfolgung

Change Data Capture und die Änderungsnachverfolgung können für dieselbe Datenbank aktiviert werden. Dabei sind keine besonderen Aspekte zu berücksichtigen. Weitere Informationen finden Sie unter "Arbeiten mit Änderungsnachverfolgung".

Datenbankspiegelung

Eine Datenbank, die für Change Data Capture aktiviert ist, kann gespiegelt werden. Um sicherzustellen, dass Erfassungen und Cleanups nach einem Failover automatisch durchgeführt werden, führen Sie folgende Schritte aus:

  1. Stellen Sie sicher, dass SQL Server-Agent auf der neuen Prinzipalserverinstanz ausgeführt wird.

  2. Erstellen Sie den Erfassungs- und Cleanupauftrag in der neuen Prinzipaldatenbank (der vorherigen Spiegeldatenbank). Verwenden Sie zum Erstellen der Aufträge die gespeicherte sp_cdc_add_job -Prozedur.

Um die aktuelle Konfiguration eines Cleanup- oder Erfassungsauftrags anzuzeigen, verwenden Sie die gespeicherte sys.sp_cdc_help_jobs -Prozedur in der neuen Prinzipalserverinstanz. Für eine gegebene Datenbank heißt der (Capture-Auftrag) cdc.Datenbankname_capture und der Cleanupauftrag cdc.Datenbankname_cleanup wobei Datenbankname der Name der entsprechenden Datenbank ist.

Um die Konfiguration eines Auftrags zu ändern, verwenden Sie die gespeicherte sys.sp_cdc_change_job -Prozedur.

Informationen zur Datenbank-Spiegel ing finden Sie unter Datenbankspiegelung (SQL Server).For information about database Spiegel ing, see Database Mirroring (SQL Server).

Transaktionsreplikation

Change Data Capture und die Transaktionsreplikation können in einer Datenbank parallel vorhanden sein, allerdings wird die Auffüllung der Änderungstabellen anders behandelt, wenn beide Funktionen aktiviert sind. Change Data Capture und die Transaktionsreplikation verwenden immer dieselbe Prozedur, nämlich sp_replcmds, um die Änderungen aus dem Transaktionsprotokoll auszulesen. Wenn die Datenerfassung eigenständig aktiviert ist, wird ein SQL Server-Agent Auftragsaufruf sp_replcmds. Wenn für eine Datenbank beide Funktionen aktiviert sind, ruft der Protokolllese-Agent die Prozedur sp_replcmdsauf. Dieser Agent füllt sowohl die Änderungstabellen als auch die Tabellen der Verteilungsdatenbank auf. Weitere Informationen finden Sie unter Replication Log Reader Agent.

Angenommen, Change Data Capture ist für die AdventureWorks2022 -Datenbank aktiviert, und zwei Tabellen sind für die Erfassung aktiviert. Um die Änderungstabellen aufzufüllen, ruft der Capture-Auftrag sp_replcmdsauf. Die Datenbank wird für die Transaktionsreplikation aktiviert, und eine Veröffentlichung wird erstellt. Anschließend wird der Protokolllese-Agent für die Datenbank erstellt, und der Erfassungsauftrag wird gelöscht. Der Protokolllese-Agent fährt fort, das Protokoll ab der letzten Protokollfolgenummer zu durchsuchen, für die ein Commit in die Änderungstabelle ausgeführt wurde. Auf diese Weise wird die Datenkonsistenz in den Änderungstabellen sichergestellt. Wenn die Transaktionsreplikation in dieser Datenbank deaktiviert wird, wird der Protokolllese-Agent entfernt und der Aufzeichnungsauftrag neu erstellt.

Hinweis

Falls der Protokolllese-Agent sowohl für Change Data Capture als auch für die Transaktionsreplikation verwendet wird, werden die replizierten Änderungen zuerst in die Verteilungsdatenbank geschrieben. Anschließend werden erfasste Änderungen in die Änderungstabellen geschrieben. Der Commit wird für beide Vorgänge zusammen ausgeführt. Wenn beim Schreiben in die Verteilungsdatenbank eine Latenz auftritt, werden Änderungen in den Änderungstabellen auch erst nach dieser Latenzzeit angezeigt.

Die Proc-Exec-Option der Transaktionsreplikation ist nicht verfügbar, wenn die Datenerfassung für Änderungen aktiviert ist.

Datenbankwiederherstellung oder -anfügung

SQL Server verwendet die folgende Logik, um zu ermitteln, ob die Änderung der Datenerfassung wieder aktiviert ist Standard nachdem eine Datenbank wiederhergestellt oder angefügt wurde:

  • Wenn eine Datenbank auf demselben Server mit demselben Datenbanknamen wiederhergestellt wird, bleibt Change Data Capture aktiviert.

  • Wenn eine Datenbank auf einem anderen Server wiederhergestellt wird, wird Change Data Capture standardmäßig deaktiviert, und alle zugehörigen Metadaten werden gelöscht.

    Um Change-Data-Capture beizubehalten, verwenden Sie beim Wiederherstellen der Datenbank die KEEP_CDC -Option. Weitere Informationen zu dieser Option finden Sie unter RESTORE.

  • Wenn eine Datenbank getrennt und an denselben Server oder einen anderen Server angefügt wird, bleibt Change Data Capture aktiviert.

  • Wenn eine Datenbank mit der Option KEEP_CDC einer anderen Edition als Standard,Enterprise oder SQL-verwaltete Instanz angefügt oder wiederhergestellt wird, wird der Vorgang blockiert, da die Datensatzänderung SQL Server Standard, Enterprise oder SQL verwaltete Instanz Editionen erfordert. Die Fehlermeldung 934 wird angezeigt:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

Sie können sys.sp_cdc_disable_db verwenden, um Change Data Capture aus einer wiederhergestellten oder angefügten Datenbank zu entfernen.

Nach dem Wiederherstellen einer Datenbank in Azure SQL Managed Instance bleibt CDC aktiviert. Sie müssen jedoch sicherstellen, dass die Überprüfungs- und Bereinigungsaufträge hinzugefügt und ausgeführt werden. Sie können die Aufträge manuell hinzufügen, indem Sie sys.sp_cdc_add_job ausführen.

Eigenständige Datenbanken

Änderungsdatenerfassung wird in enthaltenen Datenbanken nicht unterstützt.

Verfügbarkeitsgruppen

Wenn Sie Always On-Verfügbarkeitsgruppen verwenden, sollte die Änderungsenumeration auf dem sekundären Replikat erfolgen, um die Datenträgerlast auf dem primären Replikat zu reduzieren.

ColumnStore-Indizes

Die Datenerfassung kann für Tabellen mit einem gruppierten Spaltenspeicherindex nicht aktiviert werden. Ab SQL Server 2016 kann sie für Tabellen mit einem nicht gruppierten Spaltenspeicherindex aktiviert werden.

Berechnete Spalten

CDC unterstützt die Werte für berechnete Spalten nicht, auch wenn die berechnete Spalte als beibehalten definiert ist. Berechnete Spalten, die in einer Aufnahmeinstanz enthalten sind, haben immer einen Wert von NULL. Dieses Verhalten ist kein Fehler, sondern beabsichtigt.

Linux

CDC wird für SQL Server 2017 unter Linux ab CU18 und SQL Server 2019 unter Linux unterstützt.

Weitere Informationen