Aktivieren und Deaktivieren von Change Data Capture (SQL Server)Enable and Disable Change Data Capture (SQL Server)

In diesem Thema wird beschrieben, wie Sie Change Data Capture für Datenbanken und Tabelle aktivieren und deaktivieren können.This topic describes how to enable and disable change data capture for a database and a table.

Aktivieren von Change Data Capture für eine DatenbankEnable Change Data Capture for a Database

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.Before a capture instance can be created for individual tables, a member of the sysadmin fixed server role must first enable the database for change data capture. Dies erfolgt durch Ausführen der gespeicherten Prozedur sys.sp_cdc_enable_db (Transact-SQL) im Kontext der Datenbank.This is done by running the stored procedure sys.sp_cdc_enable_db (Transact-SQL) in the database context. Um zu bestimmen, ob die Datenbank bereits aktiviert ist, fragen Sie die is_cdc_enabled-Spalte in der sys.databases-Katalogsicht ab.To determine if a database is already enabled, query the is_cdc_enabled column in the sys.databases catalog view.

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.When a database is enabled for change data capture, the cdc schema, cdc user, metadata tables, and other system objects are created for the database. 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.The cdc schema contains the change data capture metadata tables and, after source tables are enabled for change data capture, the individual change tables serve as a repository for change data. Das cdc -Schema enthält außerdem zugeordnete Systemfunktionen, die verwendet werden, um Änderungsdaten abzufragen.The cdc schema also contains associated system functions used to query for change data.

Change Data Capture erfordert die exklusive Verwendung des cdc -Schemas und des cdc -Benutzers.Change data capture requires exclusive use of the cdc schema and cdc user. 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.If either a schema or a database user named cdc currently exists in a database, the database cannot be enabled for change data capture until the schema and or user are dropped or renamed.

Ein Beispiel für das Aktivieren einer Datenbank finden Sie in der Vorlage "Datenbank für Change Data Capture aktivieren".See the Enable Database for Change Data Capture template for an example of enabling a database.

Wichtig

Um die Vorlagen in SQL Server Management StudioSQL Server Management Studiozu suchen, rufen Sie Ansichtauf, klicken Sie auf Vorlagen-Explorer, und wählen Sie dann SQL Server-Vorlagenaus.To locate the templates in SQL Server Management StudioSQL Server Management Studio, go to View, click Template Explorer, and then select SQL Server Templates. Change Data Capture ist ein Unterordner.Change Data Capture is a sub-folder. In diesem Ordner finden Sie alle Vorlagen, auf die in diesem Thema verwiesen wird.Under this folder, you will find all the templates referenced in this topic. Es gibt auch ein Vorlagen-Explorer -Symbol auf der SQL Server Management StudioSQL Server Management Studio -Symbolleiste.There is also a Template Explorer icon on the SQL Server Management StudioSQL Server Management Studio toolbar.

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

Deaktivieren von Change Data Capture für eine DatenbankDisable Change Data Capture for a Database

Ein Mitglied der festen Serverrolle sysadmin kann die gespeicherte Prozedur sys.sp_cdc_disable_db (Transact-SQL) im Datenbankkontext ausführen, um Change Data Capture für eine Datenbank zu deaktivieren.A member of the sysadmin fixed server role can run the stored procedure sys.sp_cdc_disable_db (Transact-SQL) in the database context to disable change data capture for a database. Es ist nicht notwendig, einzelne Tabellen zu deaktivieren, bevor Sie die Datenbank deaktivieren.It is not necessary to disable individual tables before you disable the database. Durch das Deaktivieren der Datenbank werden alle mit ihr verbundenen Change Data Capture-Metadaten entfernt, einschließlich des cdc -Benutzers und -Schemas und der Change Data Capture-Aufträge.Disabling the database removes all associated change data capture metadata, including the cdc user and schema and the change data capture jobs. Durch Change Data Capture erstellte Gatingrollen werden jedoch nicht automatisch entfernt und müssen explizit gelöscht werden.However, any gating roles created by change data capture will not be removed automatically and must be explicitly deleted. Um zu bestimmen, ob die Datenbank aktiviert ist, fragen Sie die is_cdc_enabled -Spalte in der sys.databases-Katalogsicht ab.To determine if a database is enabled, query the is_cdc_enabled column in the sys.databases catalog view.

Wenn eine Datenbank, für die Change Data Capture aktiviert ist, gelöscht wird, werden Change Data Capture-Aufträge automatisch entfernt.If a change data capture enabled database is dropped, change data capture jobs are automatically removed.

Ein Beispiel für das Deaktivieren einer Datenbank finden Sie in der Vorlage "Datenbank für Change Data Capture deaktivieren".See the Disable Database for Change Data Capture template for an example of disabling a database.

Wichtig

Um die Vorlagen in SQL Server Management StudioSQL Server Management Studiozu suchen, rufen Sie Ansichtauf, klicken Sie auf Vorlagen-Explorer, und klicken Sie dann auf SQL Server-Vorlagen.To locate the templates in SQL Server Management StudioSQL Server Management Studio, go to View, click Template Explorer, and then click SQL Server Templates. Change Data Capture ist ein Unterordner, in dem Sie alle Vorlagen finden, auf die in diesem Thema verwiesen wird.Change Data Capture is a sub-folder where you will find all the templates that are referenced in this topic. Es gibt auch ein Vorlagen-Explorer -Symbol auf der SQL Server Management StudioSQL Server Management Studio -Symbolleiste.There is also a Template Explorer icon on the SQL Server Management StudioSQL Server Management Studio toolbar.

-- =======  
-- Disable Database for Change Data Capture template   
-- =======  
USE MyDB  
GO  
EXEC sys.sp_cdc_disable_db  
GO  

Aktivieren von Change Data Capture für eine TabelleEnable Change Data Capture for a Table

Nachdem eine Datenbank für Change Data Capture aktiviert wurde, können Mitglieder der festen Datenbankrolle db_owner mithilfe der gespeicherten Prozedur sys.sp_cdc_enable_tableeine Aufzeichnungsinstanz für einzelne Quelltabellen erstellen.After a database has been enabled for change data capture, members of the db_owner fixed database role can create a capture instance for individual source tables by using the stored procedure sys.sp_cdc_enable_table. Um zu bestimmen, ob eine Quelltabelle bereits für Change Data Capture aktiviert ist, überprüfen Sie die is_tracked_by_cdc-Spalte in der sys.tables -Katalogsicht.To determine whether a source table has already been enabled for change data capture, examine the is_tracked_by_cdc column in the sys.tables catalog view.

Wenn Sie eine Aufzeichnungsinstanz erstellen, können Sie die folgenden Optionen angeben:The following options can be specified when creating a capture instance:

Columns in the source table to be captured.Columns in the source table to be captured.

Standardmäßig werden alle Spalten in der Quelltabelle als aufgezeichnete Spalten identifiziert.By default, all of the columns in the source table are identified as captured columns. 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.If only a subset of columns need to be tracked, such as for privacy or performance reasons, use the @captured_column_list parameter to specify the subset of columns.

Eine Dateigruppe, welche die Änderungstabelle enthält.A filegroup to contain the change table.

Standardmäßig befindet sich die Änderungstabelle in der Standarddateigruppe der Datenbank.By default, the change table is located in the default filegroup of the database. Wenn ein Datenbankbesitzer die Position der einzelnen Änderungstabellen steuern möchte, kann er den Parameter @filegroup_name verwenden, um für die Änderungstabelle der Aufzeichnungsinstanz eine bestimmte Dateigruppe anzugeben.Database owners who want to control the placement of individual change tables can use the @filegroup_name parameter to specify a particular filegroup for the change table associated with the capture instance. Die benannte Dateigruppe muss bereits vorhanden sein.The named filegroup must already exist. Im Allgemeinen empfehlen wir, Änderungstabellen in eine von den Quelltabellen getrennte Dateigruppe einzufügen.Generally, it is recommended that change tables be placed in a filegroup separate from source tables. Ein Beispiel für die Verwendung des Parameters @filegroup_name finden Sie in der Vorlage @filegroup_name .See the Enable a Table Specifying Filegroup Option template for an example showing use of the @filegroup_name parameter.

-- =========  
-- Enable a Table Specifying Filegroup Option Template  
-- =========  
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.A role for controlling access to a change table.

Der Zweck der benannten Rolle besteht darin, den Zugriff auf die Änderungsdaten zu steuern.The purpose of the named role is to control access to the change data. Die angegebene Rolle kann eine vorhandene feste Serverrolle oder eine Datenbankrolle sein.The specified role can be an existing fixed server role or a database role. Wenn die angegebene Rolle nicht bereits vorhanden ist, wird automatisch eine Datenbankrolle mit diesem Namen erstellt.If the specified role does not already exist, a database role of that name is created automatically. Mitglieder der Rollen sysadmin oder db_owner haben vollen Zugriff auf die Daten in den Änderungstabellen.Members of either the sysadmin or db_owner role have full access to the data in the change tables. Alle anderen Benutzer müssen über die SELECT-Berechtigung für alle aufgezeichneten Spalten der Quelltabelle verfügen.All other users must have SELECT permission on all the captured columns of the source table. 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.In addition, when a role is specified, users who are not members of either the sysadmin or db_owner role must also be members of the specified role.

Wenn Sie keine Gatingrolle verwenden möchten, legen Sie den @role_name -Parameter explizit auf NULL fest.If you do not want to use a gating role, explicitly set the @role_name parameter to NULL. Ein Beispiel für das Aktivieren einer Tabelle ohne Gatingrolle finden Sie unter Enable a Table Without Using a Gating Role .See the Enable a Table Without Using a Gating Role template for an example of enabling a table without a gating role.

-- =========  
-- Enable a Table Without Using a Gating Role template   
-- =========  
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.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.A capture instance will always include a table valued function for returning all change table entries that occurred within a defined interval. Diese Funktion wird benannt, indem der Name der Aufzeichnungsinstanz an "cdc.fn_cdc_get_all_changes_" angefügt wird.This function is named by appending the capture instance name to "cdc.fn_cdc_get_all_changes_". Weitere Informationen finden Sie unter cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).For more information, see 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.If the parameter @supports_net_changes is set to 1, a net changes function is also generated for the capture instance. Diese Funktion gibt für jede einzelne Zeile, die innerhalb des beim Aufruf angegebenen Intervalls geändert wurde, nur eine Änderung zurück.This function returns only one change for each distinct row changed in the interval specified in the call. Weitere Informationen finden Sie unter cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).For more information, see 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.To support net changes queries, the source table must have a primary key or unique index to uniquely identify rows. Wird ein eindeutiger Index verwendet, muss dessen Name mithilfe des Parameters @index_name .If a unique index is used, the name of the index must be specified using the @index_name parameter. Die für den Primärschlüssel oder den eindeutigen Index definierten Spalten müssen in der Liste der aufgezeichneten Quellspalten enthalten sein.The columns defined in the primary key or unique index must be included in the list of source columns to be captured.

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 .See the Enable a Table for All and Net Changes Queries template for an example demonstrating the creation of a capture instance with both query functions.

-- =============  
-- Enable a Table for All and Net Changes Queries template   
-- =============  
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.If change data capture is enabled on a table with an existing primary key, and the @index_name parameter is not used to identify an alternative unique index, the change data capture feature will use the primary key. Nachfolgende Änderungen am Primärschlüssel sind nicht zulässig, ohne zuerst Change Data Capture für die Tabelle zu deaktivieren.Subsequent changes to the primary key will not be allowed without first disabling change data capture for the table. Dies gilt unabhängig davon, ob Unterstützung für Abfragen für Nettoänderungen angefordert wurde, als Change Data Capture konfiguriert wurde.This is true regardless of whether support for net changes queries was requested when change data capture was configured. 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.If there is no primary key on a table at the time it is enabled for change data capture, the subsequent addition of a primary key is ignored by change data capture. 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.Because change data capture will not use a primary key that is created after the table was enabled, the key and key columns can be removed without restrictions.

Deaktivieren von Change Data Capture für eine TabelleDisable Change Data Capture for a Table

Mitglieder der festen Datenbankrolle db_owner können eine Aufzeichnungsinstanz für einzelne Quelltabellen mithilfe der gespeicherten Prozedur sys.sp_cdc_disable_tableentfernen.Members of the db_owner fixed database role can remove a capture instance for individual source tables by using the stored procedure sys.sp_cdc_disable_table. Um zu bestimmen, ob eine Quelltabelle derzeit für Change Data Capture aktiviert ist, überprüfen Sie die is_tracked_by_cdc -Spalte in der sys.tables -Katalogsicht.To determine whether a source table is currently enabled for change data capture, examine the is_tracked_by_cdc column in the sys.tables catalog view. Wenn nach dem Deaktivieren keine Tabelle für die Datenbank aktiviert sind, werden die Change Data Capture-Aufträge ebenfalls entfernt.If there are no tables enabled for the database after the disabling takes place, the change data capture jobs are also removed.

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.If a change data capture-enabled table is dropped, change data capture metadata that is associated with the table is automatically removed.

Ein Beispiel für das Deaktivieren einer Tabelle finden Sie in der Vorlage "Eine Aufzeichnungsinstanz für eine Tabelle deaktivieren".See the Disable a Capture Instance for a Table template for an example of disabling a table.

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

Siehe auchSee Also

Nachverfolgen von Datenänderungen (SQL Server) Track Data Changes (SQL Server)
Über Change Data Capture (SQL Server) About Change Data Capture (SQL Server)
Arbeiten mit Änderungsdaten (SQL Server) Work with Change Data (SQL Server)
Verwalten und Überwachen von Change Data Capture (SQL Server) Administer and Monitor Change Data Capture (SQL Server)