Freigeben über


Aktivieren und Deaktivieren von Change Data Capture

Gilt für: SQL Server Azure SQL Managed Instance

In diesem Artikel wird beschrieben, wie Sie die Change Data Capture (CDC) für eine Datenbank und eine Tabelle für SQL Server und Azure SQL Managed Instance aktivieren und deaktivieren. Informationen zu Azure SQL Database finden Sie unter CDC mit der Azure SQL Database.

Berechtigungen

Zum Aktivieren oder Deaktivieren des CDC-Features in SQL Server und Azure SQL Managed Instance sind sysadmin-Berechtigungen erforderlich.

Aktivieren für eine Datenbank

Bevor Sie eine Capture-Instanz für einzelne Tabellen erstellen können, müssen Sie Change Data Capture für die Datenbank aktivieren.

Führen Sie zum Aktivieren der Change Data Capture die gespeicherte Prozedur sys.sp_cdc_enable_db (Transact-SQL) im Datenbankkontext aus. Um zu bestimmen, ob für die Datenbank bereits CDC aktiviert ist, fragen Sie die is_cdc_enabled-Spalte in der sys.databases-Katalogsicht ab.

Wenn für eine Datenbank Change Data Capture aktiviert ist, werden das cdc -Schema, der cdc -Benutzer, Metadatentabellen und andere Systemobjekte für die Datenbank erstellt. Das cdc -Schema enthält die Metadatentabellen für Change Data Capture, und sobald die Quelltabellen für Change Data Capture aktiviert wurden, dienen die einzelnen Änderungstabellen als Repository für die Änderungsdaten. Das cdc -Schema enthält außerdem zugeordnete Systemfunktionen, die verwendet werden, um Änderungsdaten abzufragen.

Change Data Capture erfordert die exklusive Verwendung des cdc -Schemas und des cdc -Benutzers. Wenn entweder ein Schema oder ein Datenbankbenutzer namens cdc schon in der Datenbank vorhanden ist, kann Change Data Capture für die Datenbank nicht aktiviert werden, bis das Schema und/oder der Benutzer gelöscht oder umbenannt wird.

-- ====
-- Enable Database for CDC
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO

Hinweis

Um CDC-bezogene Vorlagen in SQL Server Management Studio zu finden, wechseln Sie zu Anzeigen, wählen Sie den Vorlagen-Explorer aus und wählen Sie dann SQL Server-Vorlagen aus. Change Data Capture ist ein Unterordner, der die Vorlagen enthält

Deaktivieren für eine Datenbank

Verwenden Sie sys.sp_cdc_disable_db (Transact-SQL) im Datenbankkontext, um Change Data Capture für eine Datenbank zu deaktivieren. Es ist nicht notwendig, CDC für einzelne Tabellen zu deaktivieren, bevor Sie CDC für die Datenbank deaktivieren. Durch das Deaktivieren von CDC für die Datenbank werden alle mit ihr verbundenen Change Data Capture-Metadaten entfernt, einschließlich des CDC-Benutzers, -Schemas und der Change Data Capture-Aufträge. Durch CDC erstellte Gatingrollen werden jedoch nicht automatisch entfernt und müssen explizit gelöscht werden. Um zu bestimmen, ob CDC in einer Datenbank bereits aktiviert ist, fragen Sie die Spalteis_cdc_enabled in der sys.databases-Katalogsicht ab.

Wenn eine Datenbank, für die CDC aktiviert ist, gelöscht wird, werden Change Data Capture-Aufträge automatisch entfernt.

-- Disable Database for change data capture
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO

Aktivieren für eine Tabelle

Nachdem eine Datenbank für Change Data Capture aktiviert ist, können Mitglieder der festen Datenbankrolle db_owner eine Aufzeichnungsinstanz für einzelne Quelltabellen mithilfe der gespeicherten Prozedur sys.sp_cdc_enable_table erstellen. Um zu bestimmen, ob eine Quelltabelle bereits für Change Data Capture aktiviert ist, überprüfen Sie die is_tracked_by_cdc column-Spalte in dersys.tables-Katalogsicht.

Wichtig

Weitere Informationen zu den sys.sp_cdc_enable_table Argumenten der gespeicherten Prozedur finden Sie unter sys.sp_cdc_enable_table (Transact-SQL).

Wenn Sie eine Aufzeichnungsinstanz erstellen, können Sie die folgenden Optionen angeben:

Aufzuzeichnende Spalten in der Quelltabelle

Standardmäßig werden alle Spalten in der Quelltabelle als aufgezeichnete Spalten identifiziert. Wenn nur ein Teil der Spalten nachverfolgt werden soll, z. B. aus Gründen des Datenschutzes, dann geben Sie diese Teilmenge mithilfe des Parameters @captured_column_list an.

Eine Dateigruppe, welche die Änderungstabelle enthält.

Standardmäßig befindet sich die Änderungstabelle in der Standarddateigruppe der Datenbank. Zum Steuern der Position einzelner Änderungstabellen kann ein Datenbankbesitzer den Parameter @filegroup_name verwenden, um für die Änderungstabelle der Aufzeichnungsinstanz eine bestimmte Dateigruppe anzugeben. Die benannte Dateigruppe muss bereits vorhanden sein. Im Allgemeinen empfehlen wir, Änderungstabellen in eine von den Quelltabellen getrennte Dateigruppe einzufügen. Ein Beispiel für die Verwendung des Parameters @filegroup_name finden Sie in der Vorlage Enable a Table Specifying Filegroup Option .

-- Enable CDC for a table specifying filegroup
USE MyDB
GO

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @filegroup_name = N'MyDB_CT',
    @supports_net_changes = 1
GO

Eine Rolle, mit deren Hilfe der Zugriff auf eine Änderungstabelle gesteuert wird.

Der Zweck der benannten Rolle besteht darin, den Zugriff auf die Änderungsdaten zu steuern. Die angegebene Rolle kann eine vorhandene feste Serverrolle oder eine Datenbankrolle sein. Wenn die angegebene Rolle nicht bereits vorhanden ist, wird automatisch eine Datenbankrolle mit diesem Namen erstellt. Benutzer müssen über die SELECT-Berechtigung für alle aufgezeichneten Spalten der Quelltabelle verfügen. Ist eine Rolle angegeben, müssen Benutzer, die nicht Mitglieder der Rollen sysadmin oder db_owner sind, darüber hinaus Mitglieder der angegebenen Rolle sein.

Wenn Sie keine Gating-Rolle verwenden möchten, legen Sie den Parameter @role_name explizit auf NULL fest. Ein Beispiel für das Aktivieren einer Tabelle ohne Gatingrolle finden Sie unter Enable a Table Without Using a Gating Role .

-- Enable CDC for a table using a gating role option
USE MyDB
GO
    EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = NULL,
    @supports_net_changes = 1
GO

Eine Funktion zum Abfragen der Nettoänderungen.

Eine Erfassungsinstanz umfasst immer eine Tabellenwertfunktion (TVF), um alle Änderungstabelleneinträge zurückzugeben, die innerhalb eines definierten Intervalls auftraten. Diese Funktion wird benannt, indem der Name der Aufzeichnungsinstanz an „cdc.fn_cdc_get_all_changes_“ angefügt wird. Weitere Informationen finden Sie unter cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).

Wird der Parameter @supports_net_changes auf 1 festgelegt, wird auch eine Funktion für Nettoänderungen für die Aufzeichnungsinstanz generiert. Diese Funktion gibt für jede einzelne Zeile, die innerhalb des beim Aufruf angegebenen Intervalls geändert wurde, nur eine Änderung zurück. Weitere Informationen finden Sie unter cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).

Zur Unterstützung von Abfragen für Nettoänderungen muss die Quelltabelle einen Primärschlüssel oder einen eindeutigen Index aufweisen, damit die Zeilen eindeutig identifiziert werden können. Wird ein eindeutiger Index verwendet, muss dessen Name mithilfe des Parameters @index_name angegeben werden. Die für den Primärschlüssel oder den eindeutigen Index definierten Spalten müssen in der Liste der aufgezeichneten Quellspalten enthalten sein.

Ein Beispiel zur Erläuterung der Erstellung einer Aufzeichnungsinstanz mit beiden Abfragefunktionen finden Sie in der Vorlage Enable a Table for All and Net Changes Queries .

-- Enable CDC for a table for all and net changes queries
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @supports_net_changes = 1
GO

Hinweis

Wenn Change Data Capture für eine Tabelle mit einem vorhandenen Primärschlüssel aktiviert ist und der @index_name -Parameter nicht zum Identifizieren eines alternativen eindeutigen Indexes verwendet wird, verwendet die Change Data Capture-Funktion den Primärschlüssel. Nachfolgende Änderungen am Primärschlüssel sind nicht zulässig, ohne zuerst Change Data Capture für die Tabelle zu deaktivieren. Dies gilt unabhängig davon, ob Unterstützung für Abfragen für Nettoänderungen angefordert wurde, als Change Data Capture konfiguriert wurde. Wenn zum Zeitpunkt der Aktivierung für Change Data Capture für eine Tabelle kein Primärschlüssel vorhanden ist, wird das nachträgliche Hinzufügen eines Primärschlüssels von Change Data Capture ignoriert. Da Change Data Capture keinen Primärschlüssel verwendet, der nach der Aktivierung der Tabelle erstellt wurde, können der Schlüssel und die Schlüsselspalten ohne Einschränkungen entfernt werden.

Deaktivieren für eine Tabelle

Mitglieder der festen Datenbankrolle db_owner können eine Aufzeichnungsinstanz für einzelne Quelltabellen mithilfe der gespeicherten Prozedur sys.sp_cdc_disable_table entfernen. Um zu bestimmen, ob eine Quelltabelle zurzeit für Change Data Capture aktiviert ist, überprüfen Sie die is_tracked_by_cdc-Spalte in dersys.tables-Katalogsicht. Wenn nach dem Deaktivieren keine Tabelle für die Datenbank aktiviert sind, werden die Change Data Capture-Aufträge ebenfalls entfernt.

Wenn eine Tabelle, für die Change Data Capture aktiviert ist, gelöscht wird, werden Change Data Capture-Metadaten, die mit der Tabelle verbunden sind, automatisch entfernt.

Ein Beispiel für das Deaktivieren einer Tabelle finden Sie in der Vorlage "Eine Aufzeichnungsinstanz für eine Tabelle deaktivieren".

-- Disable a Capture Instance for a table
USE MyDB
GO
    EXEC sys.sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @capture_instance = N'dbo_MyTable'
GO

Weitere Informationen