À propos de la capture de données modifiées (SQL Server)About Change Data Capture (SQL Server)

La capture de données modifiées enregistre les activités d'insertion, de mise à jour et de suppression appliquées à une table SQL ServerSQL Server .Change data capture records insert, update, and delete activity that is applied to a SQL ServerSQL Server table. Elle rend disponibles les détails des modifications dans un format relationnel simple à utiliser.This makes the details of the changes available in an easily consumed relational format. Les informations sur les colonnes et les métadonnées nécessaires à l'application des modifications à un environnement cible sont capturées pour les lignes modifiées et stockées dans des tables de modification qui reflètent la structure de colonne des tables sources suivies.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. Des fonctions table sont fournies afin de procurer aux consommateurs un accès systématique aux données modifiées.Table-valued functions are provided to allow systematic access to the change data by consumers.

Les consommateurs de données auxquels s'adresse cette technologie sont par exemple les applications d'extraction, de transformation et de chargement (ETL).A good example of a data consumer that is targeted by this technology is an extraction, transformation, and loading (ETL) application. Une application ETL charge de façon incrémentielle les données modifiées à partir de tables sources SQL ServerSQL Server vers un entrepôt de données ou un mini-Data Warehouse.An ETL application incrementally loads change data from SQL ServerSQL Server source tables to a data warehouse or data mart. Même si la représentation des tables sources dans l'entrepôt de données doit refléter les modifications apportées aux tables sources, une technologie de bout en bout qui actualise un réplica de la source n'est pas appropriée.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. Au lieu de cela, il faut un flux de données modifiées fiable, structuré de sorte que les consommateurs puissent l'appliquer aux différentes représentations cibles des données.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 apporte cette technologie. change data capture provides this technology.

Flux de données de capture de données modifiéesChange Data Capture Data Flow

L'illustration suivante décrit le flux de données principal pour la capture de données modifiées.The following illustration shows the principal data flow for change data capture.

Change data capture data flowChange data capture data flow

La source des données modifiées pour la capture de données modifiées est le journal des transactions SQL ServerSQL Server .The source of change data for change data capture is the SQL ServerSQL Server transaction log. À mesure que des insertions, des mises à jour et des suppressions sont appliquées aux tables sources suivies, les entrées qui décrivent ces modifications sont ajoutées au journal.As inserts, updates, and deletes are applied to tracked source tables, entries that describe those changes are added to the log. Le journal sert d’entrée au processus de capture.The log serves as input to the capture process. Le journal est lu et les informations relatives aux modifications sont ajoutées à la table de modifications associée à la table faisant l’objet d’un suivi.This reads the log and adds information about changes to the tracked table’s associated change table. Des fonctions sont fournies afin d'énumérer les modifications qui apparaissent dans les tables de modifications sur une plage spécifiée ; ces fonctions retournent les informations sous la forme d'un jeu de résultats filtré.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. Le jeu de résultats filtré est utilisé en général par un processus d'application pour mettre à jour une représentation de la source dans un environnement externe.The filtered result set is typically used by an application process to update a representation of the source in some external environment.

Fonctionnement de la capture de données modifiées et de l'instance de captureUnderstanding Change Data Capture and the Capture Instance

Pour que les modifications apportées à une table d'une base de données puissent être suivies, la capture de données modifiées doit être activée explicitement pour la base de données.Before changes to any individual tables within a database can be tracked, change data capture must be explicitly enabled for the database. Pour cela, utilisez la procédure stockée sys.sp_cdc_enable_db.This is done by using the stored procedure sys.sp_cdc_enable_db. Lorsque la base de données est activée, les tables sources peuvent être identifiées en tant que tables faisant l’objet d’un suivi à l’aide de la procédure stockée sys.sp_cdc_enable_table.When the database is enabled, source tables can be identified as tracked tables by using the stored procedure sys.sp_cdc_enable_table. Lorsqu'une table est activée pour la capture de données modifiées, une instance de capture associée est créée afin de prendre en charge la dissémination des données modifiées dans la table source.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. L'instance de capture se compose d'une table de modifications et de deux fonctions de requête maximum.The capture instance consists of a change table and up to two query functions. Les métadonnées qui décrivent les détails de configuration de l’instance de capture sont conservées dans les tables de métadonnées de capture de données modifiées, cdc.change_tables, cdc.index_columnset 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. Ces informations peuvent être extraites en utilisant la procédure stockée sys.sp_cdc_help_change_data_capture.This information can be retrieved by using the stored procedure sys.sp_cdc_help_change_data_capture.

Tous les objets associés à une instance de capture sont créés dans le schéma de capture de données modifiées de la base de données activée.All objects that are associated with a capture instance are created in the change data capture schema of the enabled database. Le nom d'instance de capture doit être un nom d'objet valide et doit être unique parmi les instances de capture de base de données.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. Par défaut, le nom est <nom schémanom table> de la table source.By default, the name is <schema nametable name> of the source table. Sa table de modifications associée est nommée en ajoutant _CT au nom d’instance de capture.Its associated change table is named by appending _CT to the capture instance name. La fonction utilisée pour vérifier la présence de modifications est nommée en ajoutant le préfixe fn_cdc_get_all_changes_ au nom d’instance de capture.The function that is used to query for all changes is named by prepending fn_cdc_get_all_changes_ to the capture instance name. Si l’instance de capture est configurée pour prendre en charge net changes, la fonction de requête net_changes est également créée et nommée en ajoutant le préfixe fn_cdc_get_net_changes_ au nom d’instance de capture.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.

Table de modificationsChange Table

Les cinq premières colonnes de la table de modifications de capture de données modifiées sont des colonnes de métadonnées.The first five columns of a change data capture change table are metadata columns. Elles fournissent des informations supplémentaires pertinentes à la modification enregistrée.These provide additional information that is relevant to the recorded change. Les autres colonnes reflètent les colonnes capturées de la table source, identifiées par nom et généralement par type.The remaining columns mirror the identified captured columns from the source table in name and, typically, in type. Ces colonnes contiennent les données de colonne capturées recueillies à partir de la table source.These columns hold the captured column data that is gathered from the source table.

Chaque opération d'insertion ou de suppression appliquée à une table source apparaît comme une ligne unique dans la table de modifications.Each insert or delete operation that is applied to a source table appears as a single row within the change table. Les colonnes de données de la ligne qui résulte d'une opération d'insertion contiennent les valeurs de colonne après l'insertion.The data columns of the row that results from an insert operation contain the column values after the insert. Les colonnes de données de la ligne qui résulte d'une opération de suppression contiennent les valeurs de colonne avant la suppression.The data columns of the row that results from a delete operation contain the column values before the delete. Une opération de mise à jour requiert une entrée de ligne pour identifier les valeurs de colonne avant la mise à jour et une deuxième entrée de ligne pour identifier les valeurs de colonne après la mise à jour.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.

Chaque ligne d'une table de modifications contient également des métadonnées supplémentaires permettant d'interpréter l'activité de changement.Each row in a change table also contains additional metadata to allow interpretation of the change activity. La colonne $start_lsn identifie le numéro séquentiel dans le journal de validation affecté à la modification.The column $start_lsn identifies the commit log sequence number (LSN) that was assigned to the change. Ce numéro identifie les modifications qui ont été validées dans la même transaction et il ordonne ces transactions.The commit LSN both identifies changes that were committed within the same transaction, and orders those transactions. La colonne __$seqval peut être utilisée pour ordonner davantage de modifications qui ont lieu dans la même transaction.The column __$seqval can be used to order more changes that occur in the same transaction. La colonne __$operation enregistre l’opération associée à la modification : 1 = suppression, 2 = insertion, 3 = mise à jour (image avant) et 4 = mise à jour (image après).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). La colonne __$update_mask est un masque de bits variable avec un bit défini pour chaque colonne capturée.The column __$update_mask is a variable bit mask with one defined bit for each captured column. Pour les entrées d'insertion et de suppression, tous les bits du masque de mise à jour sont toujours définis.For insert and delete entries, the update mask will always have all bits set. Toutefois, pour les lignes de mise à jour, seuls les bits correspondant aux colonnes modifiées sont définis.Update rows, however, will only have those bits set that correspond to changed columns.

Intervalle de validité de capture de données modifiées pour une base de donnéesChange Data Capture Validity Interval for a Database

L'intervalle de validité de capture de données modifiées pour une base de données est la durée pendant laquelle les données modifiées sont disponibles pour les instances de capture.The change data capture validity interval for a database is the time during which change data is available for capture instances. L'intervalle de validité commence lorsque la première instance de capture est créée pour une table de base de données et il se poursuit jusqu'au moment présent.The validity interval begins when the first capture instance is created for a database table, and continues to the present time.

La taille des données déposées dans les tables de modifications augmentera de manière ingérable si vous n'effectuez pas un nettoyage périodique et systématique de ces données.Data that is deposited in change tables will grow unmanageably if you do not periodically and systematically prune the data. Le processus de nettoyage de capture de données modifiées est responsable de l'application de la stratégie de nettoyage par rétention.The change data capture cleanup process is responsible for enforcing the retention-based cleanup policy. En premier lieu, il déplace le point de terminaison inférieur de l'intervalle de validité afin de satisfaire la restriction temporelle.First, it moves the low endpoint of the validity interval to satisfy the time restriction. Ensuite, il supprime les entrées de table de modifications périmées.Then, it removes expired change table entries. Par défaut, trois jours de données sont conservés.By default, three days of data is retained.

À mesure que le processus de capture valide chaque nouveau lot de données modifiées, de nouvelles entrées sont ajoutées à cdc.lsn_time_mapping pour chaque transaction qui a des entrées de table de modifications.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. Dans la table de mappages, un numéro séquentiel dans le journal de validation et une durée de validation de transaction (colonnes start_lsn et tran_end_time, respectivement) sont conservés.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. La valeur de numéro séquentiel dans le journal maximale indiquée dans cdc.lsn_time_mapping représente la limite supérieure de la fenêtre de validation de la base de données.The maximum LSN value that is found in cdc.lsn_time_mapping represents the high water mark of the database validity window. Sa durée de validation correspondante est utilisée comme base à partir de laquelle le nettoyage par rétention calcule une nouvelle limite inférieure.Its corresponding commit time is used as the base from which retention based cleanup computes a new low water mark.

Dans la mesure où le processus de capture extrait les données modifiées du fichier journal de transactions, il existe une latence inhérente entre le moment où une modification est validée dans une table source et le moment où cette modification apparaît dans sa table de modifications associée.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. Bien que cette latence soit en général assez faible, il est néanmoins important de se souvenir que les données modifiées ne sont disponibles qu'une fois que le processus de capture a traité les entrées de journal connexes.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.

Intervalle de validité de capture de données modifiées pour une instance de captureChange Data Capture Validity Interval for a Capture Instance

Bien qu'il soit courant que l'intervalle de validité de base de données et l'intervalle de validité d'instance de capture coïncident, ce n'est pas toujours le cas.Although it is common for the database validity interval and the validity interval of individual capture instance to coincide, this is not always true. L'intervalle de validité de l'instance de capture démarre lorsque le processus de capture reconnaît l'instance de capture et commence à enregistrer les modifications associées dans sa table de modifications.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. En conséquence, si des instances de capture sont créées à différents moments, chacune aura initialement un point de terminaison inférieur différent.As a result, if capture instances are created at different times, each will initially have a different low endpoint. La colonne start_lsn du jeu de résultats retourné par sys.sp_cdc_help_change_data_capture indique le point d’arrêt inférieur actuel pour chaque instance de capture définie.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. Lorsque le processus de nettoyage nettoie des entrées de table de modifications, il ajuste les valeurs start_lsn pour toutes les instances de capture afin de refléter la nouvelle limite inférieure pour les données modifiées disponibles.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. Seules les instances de capture qui ont des valeurs start_lsn actuellement inférieures à la nouvelle limite inférieure sont ajustées.Only those capture instances that have start_lsn values that are currently less than the new low water mark are adjusted. Avec le temps, si aucune nouvelle instance de capture n'est créée, les intervalles de validité de toutes les instances auront tendance à coïncider avec l'intervalle de validité de base de données.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.

L'intervalle de validité est important pour les consommateurs de données modifiées car l'intervalle d'extraction pour une demande doit être couvert entièrement par l'intervalle de validité de capture de données modifiées actuel de l'instance de capture.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. Si le point de terminaison inférieur de l'intervalle d'extraction se situe à gauche du point de terminaison inférieur de l'intervalle de validité, certaines données modifiées pourraient être manquantes en raison d'un nettoyage agressif.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. Si le point de terminaison supérieur de l'intervalle d'extraction se situe à droite du point de terminaison supérieur de l'intervalle de validité, cela signifie que le processus de capture n'a pas encore effectué de traitement sur toute la durée représentée par l'intervalle d'extraction, auquel cas des données modifiées pourraient également être manquantes.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.

La fonction sys.fn_cdc_get_min_lsn est utilisée pour extraire la valeur LSN minimale actuelle pour une instance de capture, alors que sys.fn_cdc_get_max_lsn permet d’extraire la valeur LSN maximale actuelle.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. Lors de l'interrogation de données modifiées, si la plage de numéros séquentiels dans le journal spécifiée n'est pas comprise entre ces deux valeurs de numéros séquentiels dans le journal, les fonctions de requête de capture de données modifiées échouent.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.

Gestion des modifications apportées aux tables sourcesHandling Changes to Source Tables

La gestion des modifications de colonnes dans les tables sources pour lesquelles un suivi est effectué est un problème délicat pour les consommateurs en aval.To accommodate column changes in the source tables that are being tracked is a difficult issue for downstream consumers. Bien que l'activation de la capture de données modifiées sur une table source n'empêche pas de telles modifications DDL d'avoir lieu, la capture de données modifiées aide à atténuer l'effet sur les consommateurs en permettant aux jeux de résultats remis retournés par le biais de l'API de rester inchangés même lorsque la structure de colonne de la table source sous-jacente change.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. Cette structure de colonne fixe est également répercutée dans la table de modifications sous-jacente à laquelle les fonctions de requête définies accèdent.This fixed column structure is also reflected in the underlying change table that the defined query functions access.

Pour gérer une table de modifications à structure de colonne fixe, le processus de capture responsable du remplissage de la table de modifications ignore toute nouvelle colonne qui n'a pas été identifiée pour la capture lorsque la table source a été activée pour la capture de données modifiées.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. Si une colonne suivie est supprimée, des valeurs NULL sont fournies pour la colonne dans les entrées de modification suivantes.If a tracked column is dropped, null values will be supplied for the column in the subsequent change entries. Toutefois, si une colonne existante subit une modification de son type de données, la modification est propagée à la table de modifications afin de s'assurer que le mécanisme de capture n'introduit pas de perte de données dans les colonnes suivies.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. Le processus de capture publie également dans la table cdc.ddl_history toutes les modifications de structure de colonne détectées pour les tables faisant l'objet d'un suivi.The capture process also posts any detected changes to the column structure of tracked tables to the cdc.ddl_history table. Les consommateurs souhaitant être informés des ajustements qui peuvent se révéler nécessaires dans les applications en aval doivent utiliser la procédure stockée 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.

En général, l'instance de capture actuelle conserve sa forme lorsque des modifications DDL sont appliquées à sa table source associée.Typically, the current capture instance will continue to retain its shape when DDL changes are applied to its associated source table. Toutefois, il est possible de créer pour la table une deuxième instance de capture qui reflète la nouvelle structure de colonne.However, it is possible to create a second capture instance for the table that reflects the new column structure. Cela permet au processus de capture d'apporter des modifications à la même table source dans deux tables de modifications distinctes qui ont deux structures de colonne différentes.This allows the capture process to make changes to the same source table into two distinct change tables having two different column structures. Par conséquent, tandis qu'une table de modifications peut continuer à servir les programmes actuellement opérationnels, la deuxième peut être affectée à un environnement de développement qui tente d'incorporer les nouvelles données de colonnes.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. Le fait d'autoriser le mécanisme de capture à remplir les deux tables de modifications en tandem signifie qu'une transition de l'une à l'autre peut être accomplie sans perte de données de modifications.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. Cela peut arriver à tout moment où les deux chronologies de capture de données modifiées se chevauchent.This can happen any time the two change data capture timelines overlap. Lorsque la transition est terminée, l'instance de capture obsolète peut être supprimée.When the transition is effected, the obsolete capture instance can be removed.

Note

La quantité maximale d'instances de capture qui peuvent être associées simultanément à une table source unique est de deux.The maximum number of capture instances that can be concurrently associated with a single source table is two.

Relation entre le travail de capture et le lecteur de journal de réplication transactionnelleRelationship Between the Capture Job and the Transactional Replication Logreader

La logique du processus de capture de données modifiées est incorporée à la procédure stockée sp_replcmds, une fonction de serveur interne intégrée à sqlservr.exe et utilisée également par la réplication transactionnelle pour la collecte des modifications depuis le journal des transactions.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. Lorsque seule la capture de données modifiées est activée pour une base de données, vous devez créer le travail de capture de SQL Server Agent en tant que véhicule pour l'appel de 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. Lorsque la réplication est également présente, le lecteur de journal transactionnel seul est utilisé pour répondre aux besoins en données modifiées pour ces deux consommateurs.When replication is also present, the transactional logreader alone is used to satisfy the change data needs for both of these consumers. Cette stratégie réduit considérablement les contentions de journaux lorsque la réplication et la capture de données modifiées sont toutes deux activées pour la même base de données.This strategy significantly reduces log contention when both replication and change data capture are enabled for the same database.

Le basculement entre ces deux modes opérationnels de capture de données modifiées se produit automatiquement à chaque modification de l'état de réplication d'une base de données activée pour la capture de données modifiées.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.

Important

Pour que le processus s'exécute, les deux instances de la logique de capture exigent que l'Agent SQL ServerSQL Server soit en cours d'exécution.Both instances of the capture logic require SQL ServerSQL Server Agent to be running for the process to execute.

La principale tâche du processus de capture consiste à analyser le journal et à écrire des données de colonnes et des informations relatives aux transactions dans les tables de modifications de capture de données modifiées.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. Pour garantir une limite transactionnellement cohérente parmi toutes les tables de modifications de capture de données modifiées qu'il remplit, le processus de capture ouvre et valide sa propre transaction à chaque cycle d'analyse.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. Il détecte lorsque des tables sont activées pour la capture de données modifiées et les inclut automatiquement dans le jeu de tables pour lesquelles un contrôle actif est effectué pour les entrées de modification dans le journal.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. De la même façon, la désactivation de la capture de données modifiées est également détectée et provoque la suppression de la table source du jeu de tables contrôlé de manière active.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. Lorsque le traitement d'une section du journal est terminé, le processus de capture en informe la logique de troncation de journal du serveur, qui utilise ces informations pour identifier les entrées de journal éligibles pour la troncation.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.

Note

Lorsqu'une base de données est activée pour la capture de données modifiées, même si le mode de récupération est défini sur la récupération simple le point de troncation de journal n'avancera pas tant que toutes les modifications marquées pour la capture n'ont pas été collectées par le processus de capture.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. Si le processus de capture ne s'exécute pas et que des modifications doivent être collectées, l'exécution de CHECKPOINT ne tronquera pas le journal.If the capture process is not running and there are changes to be gathered, executing CHECKPOINT will not truncate the log.

Le processus de capture est également utilisé pour conserver l'historique des modifications DDL pour les tables faisant l'objet d'un suivi.The capture process is also used to maintain history on the DDL changes to tracked tables. Les instructions DDL qui sont associées à la capture de données modifiées créent des entrées dans le journal des transactions de base de données chaque fois qu'une base de données ou une table prenant en charge la capture de données modifiées est supprimée ou chaque fois que des colonnes d'une table prenant en charge la capture de données modifiées sont ajoutées, modifiées ou supprimées.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. Ces entrées de journal sont traitées par le processus de capture, qui publie ensuite les événements DDL associés dans la table cdc.ddl_history.These log entries are processed by the capture process, which then posts the associated DDL events to the cdc.ddl_history table. Vous pouvez obtenir des informations sur les événements DDL qui affectent les tables faisant l’objet d’un suivi à l’aide de la procédure stockée sys.sp_cdc_get_ddl_history.You can obtain information about DDL events that affect tracked tables by using the stored procedure sys.sp_cdc_get_ddl_history.

Travaux de l'agent de capture de données modifiéesChange Data Capture Agent Jobs

Deux travaux de l'Agent SQL ServerSQL Server sont en général associés à une base de données activée pour la capture de données modifiées : l'un est utilisé pour remplir les tables de modifications de base de données et l'autre est chargé de les nettoyer.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. Ces deux travaux sont constitués d'une seule étape qui exécute une commande Transact-SQLTransact-SQL .Both jobs consist of a single step that runs a Transact-SQLTransact-SQL command. La commande Transact-SQLTransact-SQL appelée est une procédure stockée définie par la capture de données modifiées qui implémente la logique du travail.The Transact-SQLTransact-SQL command that is invoked is a change data capture defined stored procedure that implements the logic of the job. Les travaux sont créés lorsque la première table de la base de données est activée pour la capture de données modifiées.The jobs are created when the first table of the database is enabled for change data capture. Le travail de nettoyage est toujours créé.The Cleanup Job is always created. Le travail de capture est créé seulement si aucune publication transactionnelle n'est définie pour la base de données.The capture job will only be created if there are no defined transactional publications for the database. Le travail de capture est créé également lorsque la capture de données modifiées et la réplication transactionnelle sont toutes deux activées pour une base de données, et le travail du lecteur de journal est supprimé car aucune publication n'est plus définie pour la base de données.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.

Les travaux de capture et de nettoyage sont tous deux créés à l'aide de paramètres par défaut.Both the capture and cleanup jobs are created by using default parameters. Le travail de capture est démarré immédiatement.The capture job is started immediately. Il s'exécute continuellement et traite un maximum de 1000 transactions par cycle d'analyse, avec une attente de 5 secondes entre les cycles.It runs continuously, processing a maximum of 1000 transactions per scan cycle with a wait of 5 seconds between cycles. Le travail de nettoyage s'exécute tous les jours à deux heures du matin.The cleanup job runs daily at 2 A.M. Il conserve les entrées de table de modifications pendant 4 320 minutes (trois jours) et supprime un maximum de 5 000 entrées avec une instruction de suppression unique.It retains change table entries for 4320 minutes or 3 days, removing a maximum of 5000 entries with a single delete statement.

Les travaux de l'agent de capture de données modifiées sont supprimés lorsque la capture de données modifiées est désactivée pour une base de données.The change data capture agent jobs are removed when change data capture is disabled for a database. Le travail de capture peut également être supprimé lorsque la première publication est ajoutée à une base de données et que la capture de données modifiées et la réplication transactionnelle sont toutes deux activées.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.

En interne, les travaux de l’agent de capture de données modifiées sont créés et supprimés à l’aide des procédures stockées sys.sp_cdc_add_job et sys.sp_cdc_drop_job, respectivement.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. Ces procédures stockées sont également exposées afin que les administrateurs puissent contrôler la création et la suppression de ces travaux.These stored procedures are also exposed so that administrators can control the creation and removal of these jobs.

Un administrateur n'a aucun contrôle explicite sur la configuration par défaut des travaux de l'agent de capture de données modifiées.An administrator has no explicit control over the default configuration of the change data capture agent jobs. La procédure stockée sys.sp_cdc_change_job est fournie afin de permettre la modification des paramètres de configuration par défaut.The stored procedure sys.sp_cdc_change_job is provided to allow the default configuration parameters to be modified. En outre, la procédure stockée sys.sp_cdc_help_jobs permet d’afficher les paramètres de configuration actuels.In addition, the stored procedure sys.sp_cdc_help_jobs allows current configuration parameters to be viewed. Le travail de capture et le travail de nettoyage extraient des paramètres de configuration de la table msdb.dbo.cdc_jobs lors du démarrage.Both the capture job and the cleanup job extract configuration parameters from the table msdb.dbo.cdc_jobs on startup. Toute modification apportée à ces valeurs à l’aide de sys.sp_cdc_change_job ne prend effet qu’après l’arrêt et le redémarrage du travail.Any changes made to these values by using sys.sp_cdc_change_job will not take effect until the job is stopped and restarted.

Deux procédures stockées supplémentaires sont fournies afin de permettre le démarrage et l’arrêt des travaux de l’agent de capture de données modifiées : sys.sp_cdc_start_job et 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.

Note

Le démarrage et l'arrêt du travail de capture ne provoque pas de perte des données modifiées.Starting and stopping the capture job does not result in a loss of change data. Il empêche seulement le processus de capture d'analyser activement le journal à la recherche d'entrées de modification à déposer dans les tables de modifications.It only prevents the capture process from actively scanning the log for change entries to deposit in the change tables. Une stratégie raisonnable visant à empêcher l'analyse du journal d'ajouter une charge durant les périodes de demande de pointe consiste à arrêter le travail de capture et à le redémarrer lorsque la demande est réduite.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.

Les deux travaux de l'Agent SQL ServerSQL Server ont été conçus pour être suffisamment flexibles et configurables afin de répondre aux besoins élémentaires des environnements de capture de données modifiées.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. Dans les deux cas, toutefois, les procédures stockées sous-jacentes qui fournissent la fonctionnalité principale ont été exposées afin qu'une personnalisation supplémentaire soit possible.In both cases, however, the underlying stored procedures that provide the core functionality have been exposed so that further customization is possible.

La capture de données modifiées ne peut pas fonctionner correctement lorsque le service Moteur de base de données ou le service SQL Server Agent s'exécute sous la compte SERVICE RÉSEAU.Change data capture cannot function properly when the Database Engine service or the SQL Server Agent service is running under the NETWORK SERVICE account. Cela peut entraîner l'erreur 22832.This can result in error 22832.

Voir aussiSee Also

Suivi des modifications de données (SQL Server) Track Data Changes (SQL Server)
Activer et désactiver la capture de données modifiées (SQL Server) Enable and Disable Change Data Capture (SQL Server)
Utiliser les données modifiées (SQL Server) Work with Change Data (SQL Server)
Administrer et surveiller la capture de données modifiées (SQL Server) Administer and Monitor Change Data Capture (SQL Server)