Aktivieren von Change Data Capture

In diesem Thema wird das Aktivieren von Change Data Capture für eine Datenbank und eine Tabelle erläutert.

Aktivieren von Change Data Capture für eine Datenbank

Bevor eine Aufzeichnungsinstanz für einzelne Tabellen erstellt werden kann, muss ein Mitglied der festen Serverrolle sysadmin zuerst die Datenbank für Change Data Capture aktivieren. Dies geschieht mithilfe der gespeicherten Prozedur sys.sp_cdc_enable_db (Transact-SQL) im Kontext der Datenbank. Um zu bestimmen, ob die Datenbank bereits aktiviert ist, fragen Sie die is_cdc_enabled-Spalte in der sys.databases-Katalogsicht ab.

Wenn eine Datenbank für 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 diese so lange für Change Data Capture nicht aktiviert werden, bis das Schema oder der Benutzer gelöscht oder umbenannt wird.

Ein Beispiel für das Aktivieren einer Datenbank finden Sie in der Vorlage „Datenbank für Change Data Capture aktivieren“.

Wichtiger HinweisWichtig

Um die Vorlagen in SQL Server Management Studio zu suchen, rufen Sie Ansicht auf, klicken Sie auf Vorlagen-Explorer, und wählen Sie dann SQL Server-Vorlagen aus. Change Data Capture ist ein Unterordner. In diesem Ordner finden Sie alle Vorlagen, auf die in diesem Thema verwiesen wird. Es gibt auch ein Vorlagen-Explorer-Symbol auf der SQL Server Management Studio-Symbolleiste.

-- ================================

-- Vorlage Enable Database for CDC

-- ================================

USE MyDB
GO

EXEC sys.sp_cdc_enable_db
GO

Aktivieren von Change Data Capture 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.

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

Columns in the source table to be captured.

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

A filegroup to contain the change table.

Standardmäßig befindet sich die Änderungstabelle in der Standarddateigruppe der Datenbank. Wenn ein Datenbankbesitzer die Position der einzelnen Änderungstabellen steuern möchte, dann kann er den Parameter @filegroup_name verwenden, um für die Änderungstabelle einer 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 zur Verwendung des @filegroup_name-Parameters finden Sie in der Vorlage Enable a Table Specifying Filegroup Option.

===================================================

-- Vorlage Enable a Table Specifying Filegroup Option

-- ===================================================

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

A role for controlling access to a change table.

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. Mitglieder der Rollen sysadmin oder db_owner haben vollen Zugriff auf die Daten in den Änderungstabellen. Alle anderen 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 Gatingrolle verwenden möchten, legen Sie den @role_name-Parameter 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.

-- ===================================================

-- Vorlage Enable a Table Without Using a Gating Role

-- ===================================================

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

A function to query for net changes.

Eine Aufzeichnungsinstanz umfasst immer eine Tabellenwertfunktion, um alle Änderungstabelleneinträge zurückzugeben, die innerhalb eines definierten Intervalls auftreten. 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).

Wenn der Parameter @supports_net_changes auf 1 festgelegt wurde, 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_<Aufzeichnungsinstanz> (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 Spalten 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.

=======================================================

-- Vorlage Enable 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
HinweisHinweis

Wenn Change Data Capture für eine Tabelle mit einem vorhandenen Primärschlüssel aktiviert wird und der @index_name-Parameter nicht zum Identifizieren eines alternativen eindeutigen Indexes verwendet wird, verwendet das Change Data Capture-Feature 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.