sys.sp_cdc_enable_table (Transact-SQL)

Aktiviert Change Data Capture für die angegebene Quelltabelle in der aktuellen Datenbank. Wenn eine Tabelle für Change Data Capture aktiviert ist, wird ein Datensatz für jeden auf die Tabelle angewendeten DML-Vorgang (Data Manipulation Language, Datenbearbeitungssprache) in das Transaktionsprotokoll geschrieben. Der Change Data Capture-Prozess ruft diese Informationen aus dem Protokoll ab und schreibt sie in Änderungstabellen, über die auf eine Gruppe von Funktionen zugegriffen wird.

Change Data Capture ist nur in den Editionen SQL Server 2008 Enterprise und Developer sowie in der Evaluierungsversion verfügbar.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sys.sp_cdc_enable_table 
    [ @source_schema = ] 'source_schema', 
    [ @source_name = ] 'source_name' ,
    [ @role_name = ] 'role_name'
    [,[ @capture_instance = ] 'capture_instance' ]
    [,[ @supports_net_changes = ] supports_net_changes ]
    [,[ @index_name = ] 'index_name' ]
    [,[ @captured_column_list = ] 'captured_column_list' ]
    [,[ @filegroup_name = ] 'filegroup_name' ]
  [,[ @partition_switch = ] 'partition_switch' ]

Argumente

  • [ @source_schema = ] 'source_schema'
    Der Name des Schemas, zu dem die Quelltabelle gehört. source_schema ist vom Datentyp sysname, verfügt über keinen Standardwert und darf nicht NULL sein.

  • [ @source_name = ] 'source_name'
    Der Name der Quelltabelle, für die Change Data Capture aktiviert werden soll. source_name ist vom Datentyp sysname, verfügt über keinen Standardwert und darf nicht NULL sein.

    source_name muss in der aktuellen Datenbank vorhanden sein. Tabellen im CDC-Schema können nicht für Change Data Capture aktiviert werden.

  • [ @role_name = ] 'role_name'
    Der Name der Datenbankrolle, über die der Zugriff auf Änderungsdaten gesteuert wird. role_name ist vom Datentyp sysname und muss angegeben werden. Wenn der Wert explizit auf NULL festgelegt wird, wird zum Einschränken des Zugriffs auf die Änderungsdaten keine Gatingrolle verwendet.

    Wenn die Rolle derzeit vorhanden ist, wird sie verwendet. Ist die Rolle nicht vorhanden, wird versucht, eine Datenbankrolle mit dem angegebenen Namen zu erstellen. Vor dem Versuch zur Erstellung der Rolle wird der Rollenname um die in der Zeichenfolge rechts befindlichen Leerstellen gekürzt. Wenn der Aufrufer nicht berechtigt ist, Rollen in der Datenbank zu erstellen, tritt bei der gespeicherten Prozedur ein Fehler auf.

  • [ @capture_instance = ] 'capture_instance'
    Der Name der Aufzeichnungsinstanz, die für die Benennung der instanzspezifischen Change Data Capture-Objekte verwendet wird. capture_instance ist vom Datentyp sysname und kann nicht NULL sein.

    Wenn der Name nicht angegeben ist, wird er vom Namen des Quellschemas sowie vom Namen der Quelltabelle im Format schemaname_sourcename. capture_instance abgeleitet. Er darf maximal 100 Zeichen umfassen und muss innerhalb der Datenbank eindeutig sein. Unabhängig davon, ob angegeben oder abgeleitet, wird capture_instance um die in der Zeichenfolge rechts befindlichen Leerstellen gekürzt.

    Eine Quelltabelle kann maximal zwei Aufzeichnungsinstanzen aufweisen. Weitere Informationen finden Sie unter sys.sp_cdc_help_change_data_capture (Transact-SQL).

  • [ @supports_net_changes = ] supports_net_changes
    Gibt an, ob die Abfrage von Nettoänderungen für diese Aufzeichnungsinstanz unterstützt werden soll. supports_net_changes ist vom Datentyp bit und hat den Standardwert 1, wenn die Tabelle einen Primärschlüssel oder einen eindeutigen Index aufweist, der mithilfe des Parameters @index_name angegeben wurde. Andernfalls ist der Standardwert des Parameters 0.

    Bei dem Wert 0 werden nur die Funktionen zur Unterstützung der Abfrage von allen Änderungen generiert.

    Bei dem Wert 1 werden außerdem die Funktionen generiert, die zum Abfragen von Nettoänderungen erforderlich sind.

    Wenn supports_net_changes auf 1 festgelegt ist, muss index_name angegeben sein, oder die Quelltabelle muss über einen definierten Primärschlüssel verfügen.

  • [ @index_name = ] **'**index_name'
    Der Name eines eindeutigen Index, mit dessen Hilfe Zeilen in der Quelltabelle eindeutig identifiziert werden. index_name ist sysname und kann NULL sein. Falls angegeben, muss index_name ein gültiger eindeutiger Index in der Quelltabelle sein. Wenn index_name angegeben ist, haben die identifizierten Indexspalten als eindeutige Zeilenbezeichner für die Tabelle Vorrang vor definierten Primärschlüsselspalten.

  • [ @captured_column_list = ] 'captured_column_list'
    Identifiziert die Spalten der Quelltabelle, die in die Änderungstabelle eingeschlossen werden sollen. captured_column_list ist vom Datentyp nvarchar(max) und kann NULL sein. Wenn der Wert NULL ist, werden alle Spalten in der Änderungstabelle eingeschlossen.

    Spaltennamen müssen gültige Spalten in der Quelltabelle sein. Die Spalten, die in einem Primärschlüsselindex oder in einem Index definiert sind, auf den index_name verweist, müssen eingeschlossen werden.

    captured_column_list ist eine durch Trennzeichen getrennte Liste mit Spaltennamen. Die in der Liste enthaltenen Spaltennamen können optional in doppelte Anführungszeichen ("") oder eckige Klammern ([]) eingeschlossen werden. Wenn ein Spaltenname ein eingebettetes Komma enthält, muss er in Anführungszeichen eingeschlossen sein.

    captured_column_list kann folgende reservierten Spaltennamen nicht enthalten: __$start_lsn, __$end_lsn, __$seqval, __$operation und __$update_mask.

  • [ @filegroup_name = ] 'filegroup_name'
    Die Dateigruppe zur Verwendung mit der Änderungstabelle, die für die Aufzeichnungsinstanz erstellt wurde. filegroup_name ist vom Datentyp sysname und kann NULL sein. Wenn angegeben, muss filegroup_name für die aktuelle Datenbank definiert sein. Wenn der Wert NULL ist, wird die Standarddateigruppe verwendet.

    Es wird empfohlen, eine separate Dateigruppe für Change Data Capture-Änderungstabellen zu erstellen. Weitere Informationen finden Sie unter Konfigurieren von Change Data Capture.

  • [ @allow_partition_switch= ] 'allow_partition_switch'
    Gibt an, ob der Befehl SWITCH PARTITION von ALTER TABLE auf eine Tabelle angewendet werden kann, die für Change Data Capture aktiviert ist. allow_partition_switch ist vom Datentyp bit und weist den Standardwert 1 auf.

    Bei nicht partitionierten Tabellen ist die Schaltereinstellung immer 1, und die tatsächliche Einstellung wird ignoriert. Wenn der Schalter für eine nicht partitionierte Tabelle explizit auf 0 festgelegt wird, wird in der Warnung 22857 angegeben, dass die Schaltereinstellung ignoriert wurde. Wenn der Schalter für eine partitionierte Tabelle explizit auf 0 festgelegt wird, gibt die Warnung 22356 an, dass Partitionswechselvorgänge für die Quelltabelle nicht zulässig sind. Wenn die Schaltereinstellung explizit auf 1 festgelegt oder der Standardwert 1 zugelassen und die aktivierte Tabelle partitioniert wird, gibt die Warnung 22855 an, dass Partitionswechsel nicht blockiert werden. Sollten Partitionswechsel auftreten, werden die aus dem Wechsel resultierenden Änderungen von Change Data Capture nicht verfolgt. Dies führt bei der Verarbeitung der Änderungsdaten zu Dateninkonsistenzen.

    Wichtiger HinweisWichtig

    SWITCH PARTITION ist ein Metadatenvorgang, verursacht jedoch Datenänderungen. Die mit diesem Vorgang verbundenen Datenänderungen werden nicht in den Change Data Capture-Änderungstabellen aufgezeichnet. Beispiel: An einer Tabelle mit drei Partitionen werden Änderungen vorgenommen. Mit dem Aufzeichnungsprozess werden Einfüge-, Aktualisierungs- und Löschvorgänge verfolgt, die Benutzer in der Tabelle ausführen. Wenn jedoch eine Partition in eine andere Tabelle ausgelagert wird (z. B. zur Durchführung einer Massenlöschung), werden die verschobenen Zeilen in der Änderungstabelle nicht als gelöschte Zeilen aufgezeichnet. Wenn der Tabelle eine neue Partition mit vorab ausgefüllten Zeilen hinzugefügt wird, werden diese Zeilen auch nicht in der Änderungstabelle erfasst. Dies kann zu inkonsistenten Daten führen, wenn die Änderungen von einer Anwendung belegt und auf ein Ziel angewendet werden.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Resultsets

Kein

Hinweise

Bevor Sie eine Tabelle für Change Data Capture aktivieren können, muss die Datenbank aktiviert werden. Um zu bestimmen, ob die Datenbank für Change Data Capture aktiviert ist, fragen Sie die is_cdc_enabled-Spalte in der sys.databases-Katalogsicht ab. Um die Datenbank zu aktivieren, verwenden Sie die gespeicherte Prozedur sys.sp_cdc_enable_db.

Wenn Change Data Capture für eine Tabelle aktiviert ist, werden eine Änderungstabelle und eine oder zwei Abfragefunktionen generiert. Die Änderungstabelle fungiert als Repository für die Änderungen an der Quelltabelle, die vom Aufzeichnungsprozess aus dem Transaktionsprotokoll extrahiert werden. Die Abfragefunktionen werden zum Extrahieren von Daten aus der Änderungstabelle verwendet. Die Namen dieser Funktionen werden auf folgende Weise vom capture_instance-Parameter abgeleitet:

  • Funktion für alle Änderungen: cdc.fn_cdc_get_all_changes_<capture_instance>

  • Funktion für Nettoänderungen: cdc.fn_cdc_get_net_changes_<capture_instance>

sys.sp_cdc_enable_table erstellt außerdem die Aufzeichnungs- und Cleanupaufträge für die Datenbank, wenn die Quelltabelle als erste Datenbanktabelle für Change Data Capture aktiviert wird und keine Transaktionsveröffentlichungen für diese Datenbank vorhanden sind. Sie legt die is_tracked_by_cdc-Spalte in der sys.tables-Katalogsicht auf 1 fest.

HinweisHinweis

Der SQL Server-Agent muss nicht ausgeführt werden, wenn Change Data Capture für eine Tabelle aktiviert wird. Nur wenn der SQL Server-Agent ausgeführt wird, verarbeitet der Aufzeichnungsprozess das Transaktionsprotokoll und schreibt Einträge in die Änderungstabelle.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Datenbankrolle db_owner.

Beispiele

A. Aktivieren von Change Data Capture durch das Angeben von nur erforderlichen Parametern

Im folgenden Beispiel wird Change Data Capture für die HumanResources.Employee-Tabelle aktiviert. Nur die erforderlichen Parameter werden angegeben.

USE AdventureWorks;
GO
EXECUTE sys.sp_cdc_enable_table
    @source_schema = N'HumanResources'
  , @source_name = N'Employee'
  , @role_name = N'cdc_Admin';
GO

B. Aktivieren von Change Data Capture durch das Angeben zusätzlicher, optionaler Parameter

Im folgenden Beispiel wird Change Data Capture für die HumanResources.Department-Tabelle aktiviert. Alle Parameter außer @allow\_partition\_switch werden angegeben.

USE AdventureWorks;
GO
EXEC sys.sp_cdc_enable_table
    @source_schema = N'HumanResources'
  , @source_name = N'Department'
  , @role_name = N'cdc_admin'
  , @capture_instance = N'HR_Department' 
  , @supports_net_changes = 1
  , @index_name = N'AK_Department_Name' 
  , @captured_column_list = N'DepartmentID, Name, GroupName' 
  , @filegroup_name = N'PRIMARY';
GO