Über Change Data Capture (SQL Server)About Change Data Capture (SQL Server)

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse Change Data Capture zeichnet Einfüge-, Aktualisierungs- und Löschaktivitäten auf, die an einer SQL ServerSQL Server-Tabelle vorgenommen werden. Change data capture records insert, update, and delete activity that is applied to a SQL ServerSQL Server table. Hierdurch werden die Details zu diesen Änderungen in einem leicht verwendbaren relationalen Format bereitgestellt.This makes the details of the changes available in an easily consumed relational format. Für die geänderten Zeilen werden die Spaltendaten sowie die Metadaten, die zur Übernahme der Änderungen in einer Zielumgebung erforderlich sind, aufgezeichnet und in Änderungstabellen gespeichert, die die Spaltenstruktur der nachverfolgten Quelltabellen widerspiegeln.Column information and the metadata that is required to apply the changes to a target environment is captured for the modified rows and stored in change tables that mirror the column structure of the tracked source tables. Für den systematischen Zugriff auf die Änderungsdaten durch den Consumer werden Tabellenwertfunktionen bereitgestellt.Table-valued functions are provided to allow systematic access to the change data by consumers.

Ein Beispiel für einen Datenconsumer, auf den diese Technologie abzielt, ist eine Anwendung zum Extrahieren, Transformieren und Laden (ETL-Anwendung).A good example of a data consumer that is targeted by this technology is an extraction, transformation, and loading (ETL) application. Eine ETL-Anwendung lädt Änderungsdaten inkrementell aus SQL ServerSQL Server -Quelltabellen in ein Data Warehouse oder Data Mart.An ETL application incrementally loads change data from SQL ServerSQL Server source tables to a data warehouse or data mart. Obwohl die Darstellung der Quelltabellen innerhalb des Data Warehouse Änderungen in den Quelltabellen widerspiegeln muss, sind End-to-End-Technologien, die eine Kopie der Quelle aktualisieren, ungeeignet.Although the representation of the source tables within the data warehouse must reflect changes in the source tables, an end-to-end technology that refreshes a replica of the source is not appropriate. Benötigt wird stattdessen ein zuverlässiger Datenstrom von Änderungsdaten, der so strukturiert ist, dass er vom Consumer problemlos auf unterschiedliche Darstellungen der Daten in einer Zielumgebung angewendet werden kann.Instead, you need a reliable stream of change data that is structured so that consumers can apply it to dissimilar target representations of the data. SQL ServerSQL Server stellt diese Technologie bereit. change data capture provides this technology.

Change Data Capture – DatenflussChange Data Capture Data Flow

Die folgende Abbildung zeigt den Hauptdatenfluss für Change Data Capture.The following illustration shows the principal data flow for change data capture.

Change data capture data flowChange data capture data flow

Die Quelle der Änderungsdaten ist für Change Data Capture das SQL ServerSQL Server -Transaktionsprotokoll.The source of change data for change data capture is the SQL ServerSQL Server transaction log. Bei Einfügungen, Aktualisierungen und Löschungen in den nachverfolgten Quelltabellen werden diesem Protokoll entsprechende Einträge hinzugefügt, die diese Änderungen beschreiben.As inserts, updates, and deletes are applied to tracked source tables, entries that describe those changes are added to the log. Das Protokoll dient als Eingabe für den Erfassungsvorgang.The log serves as input to the capture process. Der Prozess liest das Protokoll und fügt der Änderungstabelle, die mit der nachverfolgten Tabelle verknüpft ist, Informationen über die Änderungen hinzu.This reads the log and adds information about changes to the tracked table’s associated change table. Zur Aufzählung der Änderungen in den Änderungstabellen innerhalb eines angegebenen Bereichs werden Funktionen bereitgestellt, und die Informationen werden in Form eines gefilterten Resultsets zurückgegeben.Functions are provided to enumerate the changes that appear in the change tables over a specified range, returning the information in the form of a filtered result set. Das gefilterte Resultset wird typischerweise von einem Anwendungsprozess verwendet, um die Darstellung der Quelle in einer externen Umgebung zu aktualisieren.The filtered result set is typically used by an application process to update a representation of the source in some external environment.

Change Data Capture und die AufzeichnungsinstanzUnderstanding Change Data Capture and the Capture Instance

Damit Änderungen an einzelnen Tabellen innerhalb einer Datenbank nachverfolgt werden können, muss Change Data Capture explizit für die Datenbank aktiviert werden.Before changes to any individual tables within a database can be tracked, change data capture must be explicitly enabled for the database. Dazu wird die gespeicherte Prozedur sys.sp_cdc_enable_dbverwendet.This is done by using the stored procedure sys.sp_cdc_enable_db. Wenn die Datenbank für Change Data Capture aktiviert ist, können Quelltabellen mit der gespeicherten Prozedur sys.sp_cdc_enable_tableals nachverfolgte Tabellen identifiziert werden.When the database is enabled, source tables can be identified as tracked tables by using the stored procedure sys.sp_cdc_enable_table. Wenn eine Tabelle für Change Data Capture aktiviert ist, wird eine Aufzeichnungsinstanz erstellt und zugeordnet, die die Verteilung der Änderungsdaten in der Quelltabelle unterstützt.When a table is enabled for change data capture, an associated capture instance is created to support the dissemination of the change data in the source table. Die Aufzeichnungsinstanz besteht aus einer Änderungstabelle und bis zu zwei Abfragefunktionen.The capture instance consists of a change table and up to two query functions. Die Metadaten, mit denen die Konfigurationsdetails der Aufzeichnungsinstanz beschrieben werden, befinden sich in den Change Data Capture-Metadatentabellen cdc.change_tables, cdc.index_columnsund cdc.captured_columns.Metadata that describes the configuration details of the capture instance is retained in the change data capture metadata tables cdc.change_tables, cdc.index_columns, and cdc.captured_columns. Diese Informationen können mit der gespeicherten Prozedur sys.sp_cdc_help_change_data_captureabgerufen werden.This information can be retrieved by using the stored procedure sys.sp_cdc_help_change_data_capture.

Alle einer Aufzeichnungsinstanz zugeordneten Objekte werden im Change Data Capture-Schema der aktivierten Datenbank erstellt.All objects that are associated with a capture instance are created in the change data capture schema of the enabled database. Der Name der Aufzeichnungsinstanz muss ein gültiger Objektname sein, der innerhalb aller Aufzeichnungsinstanzen der Datenbank eindeutig ist.The requirements for the capture instance name is that it be a valid object name, and that it be unique across the database capture instances. Standardmäßig lautet der Name <SchemanameTabellenname> der Quelltabelle.By default, the name is <schema nametable name> of the source table. Zur Benennung der zugeordneten Änderungstabelle wird dem Namen der Aufzeichnungsinstanz _CT angehängt.Its associated change table is named by appending _CT to the capture instance name. Zur Benennung der Funktion zur Abfrage aller Änderungen wird dem Namen der Aufzeichnungsinstanz fn_cdc_get_all_changes_ vorangestellt.The function that is used to query for all changes is named by prepending fn_cdc_get_all_changes_ to the capture instance name. Wenn die Aufzeichnungsinstanz für die Unterstützung von net changes konfiguriert ist, wird darüber hinaus eine Abfragefunktion für net_changes erstellt. Diese wird benannt, indem dem Aufzeichnungsinstanznamen fn_cdc_get_net_changes_ vorangestellt wird.If the capture instance is configured to support net changes, the net_changes query function is also created and named by prepending fn_cdc_get_net_changes_ to the capture instance name.

ÄnderungstabelleChange Table

Die ersten fünf Spalten einer Change Data Capture-Änderungstabelle sind Metadatenspalten.The first five columns of a change data capture change table are metadata columns. Diese enthalten zusätzliche Informationen zu den aufgezeichneten Änderungen.These provide additional information that is relevant to the recorded change. Die Namen und in der Regel auch der Typ der restlichen Spalten entsprechen den identifizierten nachverfolgten Spalten aus der Quelltabelle.The remaining columns mirror the identified captured columns from the source table in name and, typically, in type. Diese Spalten enthalten die aus der Quelltabelle erfassten Spaltendaten.These columns hold the captured column data that is gathered from the source table.

Jeder auf die Quelltabelle angewendete Einfüge- oder Löschvorgang erscheint als einzelne Zeile in der Änderungstabelle.Each insert or delete operation that is applied to a source table appears as a single row within the change table. Die Datenspalten der Zeile, die sich aus einem Einfügevorgang ergibt, enthalten die Spaltenwerte nach dem Einfügevorgang.The data columns of the row that results from an insert operation contain the column values after the insert. Die Datenspalten der Zeile, die sich aus einem Löschvorgang ergibt, enthalten die Spaltenwerte vor dem Löschvorgang.The data columns of the row that results from a delete operation contain the column values before the delete. Ein Updatevorgang erfordert einen Zeileneintrag, der die Spaltenwerte vor dem Updatevorgang angibt, und einen Zeileneintrag, der die Spaltenwerte nach dem Updatevorgang angibt.An update operation requires one row entry to identify the column values before the update, and a second row entry to identify the column values after the update.

Darüber hinaus enthält jede Zeile in einer Änderungstabelle zusätzliche Metadaten, die eine Interpretation der Änderungsaktivitäten erlauben.Each row in a change table also contains additional metadata to allow interpretation of the change activity. Die Spalte $start_lsn identifiziert die Commit-Protokollfolgenummer (Log Sequence Number, LSN), die der Änderung zugewiesen wurde.The column $start_lsn identifies the commit log sequence number (LSN) that was assigned to the change. Die Commit-LSN identifiziert sowohl die Änderungen, die innerhalb der gleichen Transaktion ausgeführt wurden, als auch die Reihenfolge der Transaktionen.The commit LSN both identifies changes that were committed within the same transaction, and orders those transactions. Die Spalte __$seqval kann verwendet werden, um die Reihenfolge weiterer Änderungen festzulegen, die innerhalb der gleichen Transaktion ausgeführt wurden.The column __$seqval can be used to order more changes that occur in the same transaction. In der Spalte __$operation wird der mit der Änderung verbundene Vorgang aufgezeichnet: 1 = Löschung, 2 = Einfügung, 3 = Update (Anfangsimage) und 4 = Update (Endimage).The column __$operation records the operation that is associated with the change: 1 = delete, 2 = insert, 3 = update (before image), and 4 = update (after image). Die Spalte __$update_mask ist eine variable Bitmaske mit einem definierten Bit für jede aufgezeichnete Spalte.The column __$update_mask is a variable bit mask with one defined bit for each captured column. Bei Einträgen für Einfüge- und Löschvorgänge werden alle Bits in der Updatemaske gesetzt.For insert and delete entries, the update mask will always have all bits set. Bei Einträgen für Updatevorgänge sind dagegen nur jene Bits gesetzt, die den geänderten Spalten entsprechen.Update rows, however, will only have those bits set that correspond to changed columns.

Change Data Capture-Gültigkeitsintervall für eine DatenbankChange Data Capture Validity Interval for a Database

Beim Change Data Capture-Gültigkeitsintervall für eine Datenbank handelt es sich um dem Zeitraum, in dem Änderungsdaten für Aufzeichnungsinstanzen verfügbar sind.The change data capture validity interval for a database is the time during which change data is available for capture instances. Das Gültigkeitsintervall beginnt mit der Erstellung der ersten Aufzeichnungsinstanz für eine Datenbanktabelle und dauert bis zum aktuellen Zeitpunkt.The validity interval begins when the first capture instance is created for a database table, and continues to the present time.

Damit die Datenmenge in Änderungstabellen nicht auf eine unüberschaubare Größe anwächst, müssen die Daten regelmäßig und systematisch gekürzt werden.Data that is deposited in change tables will grow unmanageably if you do not periodically and systematically prune the data. Der Change Data Capture-Cleanupprozess dient zur Erzwingung der beibehaltungsbasierten Cleanuprichtlinie.The change data capture cleanup process is responsible for enforcing the retention-based cleanup policy. Zunächst wird der untere Endpunkt des Gültigkeitsintervalls verschoben, um die Zeitbeschränkung festzulegen.First, it moves the low endpoint of the validity interval to satisfy the time restriction. Anschließend werden die abgelaufenen Einträge aus der Änderungstabelle entfernt.Then, it removes expired change table entries. Standardmäßig werden die Daten drei Tage beibehalten.By default, three days of data is retained.

Am oberen Endpunkt werden bei jedem Commit neuer Änderungsdaten durch den Aufzeichnungsprozess für jede Transaktion, die Änderungstabelleneinträge beinhaltet, neue Einträge zu cdc.lsn_time_mapping hinzugefügt.At the high end, as the capture process commits each new batch of change data, new entries are added to cdc.lsn_time_mapping for each transaction that has change table entries. In der Zuordnungstabelle werden sowohl die Commit-Protokollfolgenummern als auch die Commitzeitpunkte der Transaktion (Spalten start_lsn und tran_end_time) beibehalten.Within the mapping table, both a commit Log Sequence Number (LSN) and a transaction commit time (columns start_lsn and tran_end_time, respectively) are retained. Der maximale LSN-Wert in cdc.lsn_time_mapping entspricht der Obergrenzenmarkierung des Datenbank-Gültigkeitsfensters.The maximum LSN value that is found in cdc.lsn_time_mapping represents the high water mark of the database validity window. Die entsprechende Commitzeit wird als Basis für die Berechnung einer neuen Untergrenzenmarkierung durch die beibehaltungsbasierte Cleanuprichtlinie verwendet.Its corresponding commit time is used as the base from which retention based cleanup computes a new low water mark.

Da der Aufzeichnungsprozess Änderungsdaten aus dem Transaktionsprotokoll extrahiert, entsteht eine Latenzzeit zwischen dem Commitzeitpunkt einer Änderung in einer Quelltabelle und dem Zeitpunkt, an dem die Änderung in der zugeordneten Änderungstabelle angezeigt wird.Because the capture process extracts change data from the transaction log, there is a built in latency between the time that a change is committed to a source table and the time that the change appears within its associated change table. Diese Latenzzeit ist in der Regel sehr kurz, vergessen Sie jedoch nicht, dass die Änderungsdaten erst verfügbar sind, nachdem der Aufzeichnungsprozess die verbundenen Protokolleinträge verarbeitet hat.While this latency is typically small, it is nevertheless important to remember that change data is not available until the capture process has processed the related log entries.

Change Data Capture-Gültigkeitsintervall für eine AufzeichnungsinstanzChange Data Capture Validity Interval for a Capture Instance

In der Regel stimmt das Gültigkeitsintervall einzelner Aufzeichnungsinstanzen mit dem Gültigkeitsintervall für die Datenbank überein, dies ist jedoch nicht immer so.Although it is common for the database validity interval and the validity interval of individual capture instance to coincide, this is not always true. Das Gültigkeitsintervall der Aufzeichnungsinstanz beginnt zu dem Zeitpunkt, an dem der Aufzeichnungsprozess die Aufzeichnungsinstanz erkennt und die Protokollierung zugeordneter Änderungen in der Änderungstabelle startet.The validity interval of the capture instance starts when the capture process recognizes the capture instance and starts to log associated changes to its change table. Wenn also Aufzeichnungsinstanzen zu verschiedenen Zeiten erstellt werden, weisen diese unterschiedliche untere Endpunkte auf.As a result, if capture instances are created at different times, each will initially have a different low endpoint. Die Spalte „start_lsn“ des von sys.sp_cdc_help_change_data_capture zurückgegebenen Resultsets zeigt den aktuellen unteren Endpunkt für jede definierte Aufzeichnungsinstanz.The start_lsn column of the result set that is returned by sys.sp_cdc_help_change_data_capture shows the current low endpoint for each defined capture instance. Bei der Bereinigung von Änderungstabelleneinträgen durch den Cleanupprozess werden die start_lsn-Werte für alle Aufzeichnungsinstanzen angepasst, sodass sie die neue Untergrenzenmarkierung für verfügbare Änderungsdaten widerspiegeln.When the cleanup process cleans up change table entries, it adjusts the start_lsn values for all capture instances to reflect the new low water mark for available change data. Dabei werden nur die Aufzeichnungsinstanzen angepasst, deren start_lsn-Werte kleiner sind als die neue Untergrenzenmarkierung.Only those capture instances that have start_lsn values that are currently less than the new low water mark are adjusted. Nach einer gewissen Zeit stimmen also die Gültigkeitsintervalle aller einzelnen Instanzen mit dem Gültigkeitsintervall der Datenbank überein, vorausgesetzt, es werden keine neuen Aufzeichnungsinstanzen erstellt.Over time, if no new capture instances are created, the validity intervals for all individual instances will tend to coincide with the database validity interval.

Für Consumer von Änderungsdaten ist das Gültigkeitsintervall wichtig, da das Extrahierungsintervall einer Anforderung vollständig von dem aktuellen Change Data Capture-Gültigkeitsintervall für die Aufzeichnungsinstanz abgedeckt werden muss.The validity interval is important to consumers of change data because the extraction interval for a request must be fully covered by the current change data capture validity interval for the capture instance. Wenn der untere Endpunkt des Extrahierungsintervalls links vom unteren Endpunkt des Gültigkeitsintervalls liegt, kann es bei einem umfassenden Cleanup zu fehlenden Änderungsdaten kommen.If the low endpoint of the extraction interval is to the left of the low endpoint of the validity interval, there could be missing change data due to aggressive cleanup. Wenn der obere Endpunkt des Extrahierungsintervalls rechts vom oberen Endpunkt des Gültigkeitsintervalls liegt, wird der Aufzeichnungsprozess vor dem Ende des Extrahierungsintervalls beendet, was ebenfalls zu fehlenden Daten führen kann.If the high endpoint of the extraction interval is to the right of the high endpoint of the validity interval, the capture process has not yet processed through the time period that is represented by the extraction interval, and change data could also be missing.

Mit der Funktion sys.fn_cdc_get_min_lsn können Sie den aktuellen kleinsten LSN-Wert und mit der Funktion sys.fn_cdc_get_max_lsn den aktuellen größten LSN-Wert für eine Aufzeichnungsinstanz abrufen.The function sys.fn_cdc_get_min_lsn is used to retrieve the current minimum LSN for a capture instance, while sys.fn_cdc_get_max_lsn is used to retrieve the current maximum LSN value. Wenn bei der Abfrage von Änderungsdaten der angegebene LSN-Bereich nicht innerhalb der beiden LSN-Werte liegt, schlagen die Change Data Capture-Abfragefunktionen fehl.When querying for change data, if the specified LSN range does not lie within these two LSN values, the change data capture query functions will fail.

Handhabung von Änderungen an QuelltabellenHandling Changes to Source Tables

Die Berücksichtigung von Spaltenänderungen in den nachverfolgten Quelltabellen ist für Downstreamconsumer schwierig.To accommodate column changes in the source tables that are being tracked is a difficult issue for downstream consumers. Durch die Aktivierung von Change Data Capture für eine Quelltabelle werden solche DDL-Änderungen zwar nicht verhindert, mit Change Data Capture können die Auswirkungen für den Consumer jedoch minimiert werden, indem erlaubt wird, dass die über die API zurückgegebenen Resultsets unverändert bleiben, auch wenn die Spaltenstruktur der zugrunde liegenden Quelltabelle geändert wird.Although enabling change data capture on a source table does not prevent such DDL changes from occurring, change data capture helps to mitigate the effect on consumers by allowing the delivered result sets that are returned through the API to remain unchanged even as the column structure of the underlying source table changes. Diese feste Spaltenstruktur gilt auch für die zugrunde liegende Änderungstabelle, auf die die definierten Abfragefunktionen zugreifen.This fixed column structure is also reflected in the underlying change table that the defined query functions access.

Um eine Änderungstabelle mit fester Spaltenstruktur zu berücksichtigen, ignoriert der Aufzeichnungsprozess, mit dem Werte in die Änderungstabelle eingefügt werden, alle neuen Spalten, die bei der Aktivierung der Quelltabelle für Change Data Capture nicht zur Aufzeichnung identifiziert wurden.To accommodate a fixed column structure change table, the capture process responsible for populating the change table will ignore any new columns that are not identified for capture when the source table was enabled for change data capture. Wenn eine nachverfolgte Spalte gelöscht wird, werden in den nachfolgenden Änderungseinträgen NULL-Werte für die Spalte angegeben.If a tracked column is dropped, null values will be supplied for the column in the subsequent change entries. Wenn sich jedoch der Datentyp einer vorhandenen Spalte ändert, wird diese Änderung in die Änderungstabelle übernommen, um sicherzustellen, dass durch den Aufzeichnungsmechanismus keine Datenverluste für nachverfolgte Spalten entstehen.However, if an existing column undergoes a change in its data type, the change is propagated to the change table to ensure that the capture mechanism does not introduce data loss to tracked columns. Außerdem sendet der Aufzeichnungsprozess alle erkannten Änderungen an der Spaltenstruktur nachverfolgter Tabellen an die Tabelle cdc.ddl_history.The capture process also posts any detected changes to the column structure of tracked tables to the cdc.ddl_history table. Consumer, die über notwendige Anpassungen von Downstreamanwendungen informiert werden möchten, verwenden die gespeicherte Prozedur sys.sp_cdc_get_ddl_history.Consumers wishing to be alerted of adjustments that might have to be made in downstream applications, use the stored procedure sys.sp_cdc_get_ddl_history.

In der Regel wird die Form der aktuellen Aufzeichnungsinstanz beibehalten, wenn DDL-Änderungen an der verbundenen Quelltabelle vorgenommen werden.Typically, the current capture instance will continue to retain its shape when DDL changes are applied to its associated source table. Es besteht jedoch die Möglichkeit, eine zweite Aufzeichnungsinstanz für die Tabelle zu erstellen, die die neue Spaltenstruktur widerspiegelt.However, it is possible to create a second capture instance for the table that reflects the new column structure. Hierdurch wird die Aufzeichnung von Änderungen an derselben Quelltabelle in zwei unterschiedliche Änderungstabellen mit zwei verschiedenen Spaltenstrukturen ermöglicht.This allows the capture process to make changes to the same source table into two distinct change tables having two different column structures. Eine dieser Änderungstabellen kann für aktuelle Betriebsprogramme und die andere für eine Entwicklungsumgebung verwendet werden, in der versucht wird, die neuen Spaltendaten aufzunehmen.Thus, while one change table can continue to feed current operational programs, the second one can drive a development environment that is trying to incorporate the new column data. Da der Aufzeichnungsmechanismus gleichzeitig Werte in beide Änderungstabellen einfügen kann, ist ein Übergang zwischen den Tabellen ohne Datenverlust möglich.Allowing the capture mechanism to populate both change tables in tandem means that a transition from one to the other can be accomplished without loss of change data. Dies kann immer der Fall sein, wenn die beiden Change Data Capture-Zeitachsen überlappen.This can happen any time the two change data capture timelines overlap. Wenn der Übergang erfolgt, kann die überflüssige Aufzeichnungsinstanz entfernt werden.When the transition is effected, the obsolete capture instance can be removed.

Hinweis

Einer Quelltabelle können maximal zwei Aufzeichnungsinstanzen gleichzeitig zugeordnet werden.The maximum number of capture instances that can be concurrently associated with a single source table is two.

Beziehung zwischen dem Aufzeichnungsauftrag und dem Protokollleser der TransaktionsreplikationRelationship Between the Capture Job and the Transactional Replication Logreader

Die Logik für den Change Data Capture-Prozess ist in die gespeicherte Prozedur sp_replcmdseingebettet. Hierbei handelt es sich um eine als Teil von „sqlservr.exe“ erstellte interne Serverfunktion, die auch bei der Transaktionsreplikation verwendet wird, um Änderungen aus dem Transaktionsprotokoll zu sammeln.The logic for change data capture process is embedded in the stored procedure sp_replcmds, an internal server function built as part of sqlservr.exe and also used by transactional replication to harvest changes from the transaction log. Wenn für eine Datenbank nur Change Data Capture aktiviert wurde, erstellen Sie den Change Data Capture-Aufzeichnungsauftrag des SQL Server-Agents als Mittel zum Aufrufen von sp_replcmds.When change data capture alone is enabled for a database, you create the change data capture SQL Server Agent capture job as the vehicle for invoking sp_replcmds. Wenn die Replikation ebenfalls aktiviert ist, wird für die Änderungsdatenanforderungen beider Consumer nur der Transaktions-Protokollleser verwendet.When replication is also present, the transactional logreader alone is used to satisfy the change data needs for both of these consumers. Mit dieser Strategie werden Protokollkonflikte erheblich reduziert, wenn sowohl die Replikation als auch Change Data Capture für eine Datenbank aktiviert sind.This strategy significantly reduces log contention when both replication and change data capture are enabled for the same database.

Der Wechsel zwischen diesen beiden Betriebsmodi zur Aufzeichnung von Änderungsdaten erfolgt automatisch, wenn sich der Replikationsstatus einer Datenbank ändert, für die Change Data Capture aktiviert ist.The switch between these two operational modes for capturing change data occurs automatically whenever there is a change in the replication status of a change data capture enabled database.

Wichtig

Für beide Instanzen der Aufzeichnungslogik muss der SQL ServerSQL Server -Agent ausgeführt werden, damit der Prozess ausgeführt werden kann.Both instances of the capture logic require SQL ServerSQL Server Agent to be running for the process to execute.

Die Hauptaufgabe des Capture-Prozesses besteht darin, das Protokoll zu durchsuchen und Spaltendaten und transaktionsrelevante Informationen in die Change Data Capture-Änderungstabellen zu schreiben.The principal task of the capture process is to scan the log and write column data and transaction related information to the change data capture change tables. Um eine transaktionskonsistente Begrenzung über alle von Change Data Capture aufgefüllten Änderungstabellen hinweg sicherzustellen, öffnet der Aufzeichnungsprozess bei jedem Scanzyklus eine eigene Transaktion und führt dafür einen Commit aus.To ensure a transactionally consistent boundary across all the change data capture change tables that it populates, the capture process opens and commits its own transaction on each scan cycle. Der Prozess erkennt neu für Change Data Capture aktivierte Tabellen und nimmt diese automatisch in die Gruppe von Tabellen auf, die aktiv auf Änderungseinträge im Protokoll überwacht werden.It detects when tables are newly enabled for change data capture, and automatically includes them in the set of tables that are actively monitored for change entries in the log. Auch die Deaktivierung von Change Data Capture wird erkannt. In diesem Fall wird die Quelltabelle aus der Gruppe von Tabellen, die aktiv auf Änderungseinträge überwacht werden, entfernt.Similarly, disabling change data capture will also be detected, causing the source table to be removed from the set of tables actively monitored for change data. Wenn die Verarbeitung für einen Protokollabschnitt beendet ist, sendet der Aufzeichnungsprozess ein Signal an die Serverprotokoll-Kürzungslogik, die anhand dieser Informationen für die Kürzung geeignete Protokolleinträge auswählt.When processing for a section of the log is finished, the capture process signals the server log truncation logic, which uses this information to identify log entries eligible for truncation.

Hinweis

Wenn eine Datenbank für Change Data Capture aktiviert ist, wird, auch wenn als Wiederherstellungsmodus die einfache Wiederherstellung festgelegt ist, der Protokollkürzungspunkt nicht weiter verschoben, bevor alle für die Aufzeichnung markierten Änderungen vom Aufzeichnungsprozess erfasst wurden.When a database is enabled for change data capture, even if the recovery mode is set to simple recovery the log truncation point will not advance until all the changes that are marked for capture have been gathered by the capture process. Falls der Aufzeichnungsprozess nicht ausgeführt wird und Änderungen erfasst werden müssen, wird das Protokoll beim Ausführen von CHECKPOINT nicht gekürzt.If the capture process is not running and there are changes to be gathered, executing CHECKPOINT will not truncate the log.

Der Aufzeichnungsprozess wird auch zur Speicherung des Verlaufs der an nachverfolgten Tabellen vorgenommenen DDL-Änderungen verwendet.The capture process is also used to maintain history on the DDL changes to tracked tables. Die mit Change Data Capture verknüpften DDL-Anweisungen nehmen Einträge im Transaktionsprotokoll der Datenbank vor, wenn eine für Change Data Capture aktivierte Datenbank oder Tabelle gelöscht wird und wenn Spalten einer für Change Data Capture aktivierten Tabelle hinzugefügt, geändert oder gelöscht werden.The DDL statements that are associated with change data capture make entries to the database transaction log whenever a change data capture-enabled database or table is dropped or columns of a change data capture-enabled table are added, modified, or dropped. Diese Protokolleinträge werden vom Aufzeichnungsprozess verarbeitet, der die zugehörigen DDL-Ereignisse an die Tabelle cdc.ddl_history sendet.These log entries are processed by the capture process, which then posts the associated DDL events to the cdc.ddl_history table. Sie können Informationen über DDL-Ereignisse mit Auswirkungen auf nachverfolgte Tabellen mit der gespeicherten Prozedur sys.sp_cdc_get_ddl_historyabrufen.You can obtain information about DDL events that affect tracked tables by using the stored procedure sys.sp_cdc_get_ddl_history.

Change Data Capture-AgentaufträgeChange Data Capture Agent Jobs

Einer Datenbank, für die Change Data Capture aktiviert ist, werden in der Regel zwei SQL ServerSQL Server -Agentaufträge zugeordnet: ein Aufzeichnungsauftrag zur Auffüllung der Datenbank-Änderungstabellen und ein Cleanupauftrag für die Bereinigung der Änderungstabellen.Two SQL ServerSQL Server Agent jobs are typically associated with a change data capture enabled database: one that is used to populate the database change tables, and one that is responsible for change table cleanup. Beide Aufträge bestehen aus einem Einzelschritt, der einen Transact-SQLTransact-SQL -Befehl ausführt.Both jobs consist of a single step that runs a Transact-SQLTransact-SQL command. Bei dem aufgerufenen Transact-SQLTransact-SQL -Befehl handelt es sich um eine in Change Data Capture definierte gespeicherte Prozedur zur Implementierung der Auftragslogik.The Transact-SQLTransact-SQL command that is invoked is a change data capture defined stored procedure that implements the logic of the job. Die Aufträge werden erstellt, wenn die erste Tabelle der Datenbank für Change Data Capture aktiviert wird.The jobs are created when the first table of the database is enabled for change data capture. Der Cleanupauftrag wird immer erstellt.The Cleanup Job is always created. Der Aufzeichnungsauftrag wird nur erstellt, wenn für die Datenbank keine Transaktionsveröffentlichungen definiert wurden.The capture job will only be created if there are no defined transactional publications for the database. Der Aufzeichnungsauftrag wird auch dann erstellt, wenn sowohl Change Data Capture als auch die Transaktionsreplikation für eine Datenbank aktiviert sind und der Transaktions-Protokollleserauftrag entfernt wird, da die Datenbank über keine definierten Veröffentlichungen mehr verfügt.The capture job is also created when both change data capture and transactional replication are enabled for a database, and the transactional logreader job is removed because the database no longer has defined publications.

Sowohl Aufzeichnungs- als auch Cleanupaufträge werden mit Standardparametern erstellt.Both the capture and cleanup jobs are created by using default parameters. Der Aufzeichnungsauftrag wird sofort gestartet.The capture job is started immediately. Er wird kontinuierlich ausgeführt und verarbeitet maximal 1000 Transaktionen pro Scanzyklus mit einer Wartezeit von 5 Sekunden.It runs continuously, processing a maximum of 1000 transactions per scan cycle with a wait of 5 seconds between cycles. Der Cleanupauftrag wird täglich um 2 Uhr morgens ausgeführt.The cleanup job runs daily at 2 A.M. Änderungstabelleneinträge werden 4320 Minuten bzw. 3 Tage beibehalten, und mit einer Löschanweisung werden maximal 5000 Einträge entfernt.It retains change table entries for 4320 minutes or 3 days, removing a maximum of 5000 entries with a single delete statement.

Die Change Data Capture-Agentaufträge werden entfernt, wenn Change Data Capture für eine Datenbank deaktiviert wird.The change data capture agent jobs are removed when change data capture is disabled for a database. Der Aufzeichnungsauftrag kann auch entfernt werden, wenn einer Datenbank die erste Veröffentlichung hinzugefügt wird und sowohl Change Data Capture als auch die Transaktionsreplikation aktiviert sind.The capture job can also be removed when the first publication is added to a database, and both change data capture and transactional replication are enabled.

Intern werden Change Data Capture-Agentaufträge mit den gespeicherten Prozeduren sys.sp_cdc_add_job und sys.sp_cdc_drop_joberstellt bzw. gelöscht.Internally, change data capture agent jobs are created and dropped by using the stored procedures sys.sp_cdc_add_job and sys.sp_cdc_drop_job, respectively. Diese gespeicherten Prozeduren werden ebenfalls verfügbar gemacht, sodass Administratoren die Erstellung und Entfernung dieser Aufträge kontrollieren können.These stored procedures are also exposed so that administrators can control the creation and removal of these jobs.

Die Standardkonfiguration der Change Data Capture-Agentaufträge wird nicht explizit von Administratoren gesteuert.An administrator has no explicit control over the default configuration of the change data capture agent jobs. Mit der gespeicherten Prozedur sys.sp_cdc_change_job können die Standardkonfigurationsparameter geändert werden.The stored procedure sys.sp_cdc_change_job is provided to allow the default configuration parameters to be modified. Darüber hinaus ermöglicht die gespeicherte Prozedur sys.sp_cdc_help_jobs das Anzeigen der aktuellen Konfigurationsparameter.In addition, the stored procedure sys.sp_cdc_help_jobs allows current configuration parameters to be viewed. Sowohl der Aufzeichnungsauftrag als auch der Cleanupauftrag extrahieren Konfigurationsparameter aus der Tabelle msdb.dbo.cdc_jobs, wenn sie gestartet werden.Both the capture job and the cleanup job extract configuration parameters from the table msdb.dbo.cdc_jobs on startup. Änderungen, die mit sys.sp_cdc_change_job an diesen Werten vorgenommen werden, treten ersten in Kraft, wenn der Auftrag beendet und neu gestartet wird.Any changes made to these values by using sys.sp_cdc_change_job will not take effect until the job is stopped and restarted.

Zwei zusätzliche gespeicherte Prozeduren ermöglichen das Starten und Beenden der Change Data Capture-Agentaufträge: sys.sp_cdc_start_job und sys.sp_cdc_stop_job.Two additional stored procedures are provided to allow the change data capture agent jobs to be started and stopped: sys.sp_cdc_start_job and sys.sp_cdc_stop_job.

Hinweis

Beim Starten und Beenden des Aufzeichnungsauftrags gehen keine Änderungsdaten verloren.Starting and stopping the capture job does not result in a loss of change data. Es wird lediglich verhindert, dass der Aufzeichnungsprozess das Protokoll aktiv nach Änderungseinträgen durchsucht, die in die Änderungstabellen eingefügt werden können.It only prevents the capture process from actively scanning the log for change entries to deposit in the change tables. Um die zusätzliche Last durch die Protokollscanvorgänge während der Spitzenlastzeiten zu vermeiden, können Sie den Aufzeichnungsauftrag beenden und dann wieder starten, wenn der Ressourcenbedarf sinkt.A reasonable strategy to prevent log scanning from adding load during periods of peak demand is to stop the capture job and restart it when demand is reduced.

Beide SQL ServerSQL Server -Agentaufträge wurden mit genügend Flexibilität und Konfigurationsmöglichkeiten konzipiert, um die grundlegenden Anforderungen von Change Data Capture-Umgebungen zu erfüllen.Both SQL ServerSQL Server Agent jobs were designed to be flexible enough and sufficiently configurable to meet the basic needs of change data capture environments. In beiden Fällen wurden jedoch die zugrunde liegenden gespeicherten Prozeduren, die die Kernfunktionalität bereitstellen, verfügbar gemacht, um eine weitere Anpassung zu ermöglichen.In both cases, however, the underlying stored procedures that provide the core functionality have been exposed so that further customization is possible.

Change Data Capture kann nicht ordnungsgemäß ausgeführt werden, wenn der Datenbankmoduldienst oder der SQL Server-Agent-Dienst unter dem NETWORK SERVICE-Konto ausgeführt wird.Change data capture cannot function properly when the Database Engine service or the SQL Server Agent service is running under the NETWORK SERVICE account. Dies kann zu Fehler 22832 führen.This can result in error 22832.

Siehe auchSee Also

Nachverfolgen von Datenänderungen (SQL Server) Track Data Changes (SQL Server)
Aktivieren und Deaktivieren von Change Data Capture (SQL Server) Enable and Disable 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)