CDC.<capture_instance>_CT (Transact-SQL)cdc.<capture_instance>_CT (Transact-SQL)

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Table de modifications créée lorsque la capture de données modifiées est activée sur une table source.Is the change table created when change data capture is enabled on a source table. La table retourne une ligne pour chaque opération d'insertion et de suppression effectuée sur la table source, et deux lignes pour chaque opération de mise à jour effectuée sur la table source.The table returns one row for each insert and delete operation performed against the source table, and two rows for each update operation performed against the source table. Lorsque le nom de la table de modifications n'est pas spécifié au moment de l'activation de la table source, le nom est dérivé.When the name of the change table is not specified at the time the source table is enabled, the name is derived. Le format du nom est CDC. capture_instance_CT, où capture_instance est le nom de schéma de la table source et le nom de la table source au format schema_table.The format of the name is cdc.capture_instance_CT where capture_instance is the schema name of the source table and the source table name in the format schema_table. Par exemple, si la table Person. Address dans l’exemple de base de données AdventureWorks est activée pour la capture de données modifiées, le nom de la table de modifications dérivée serait CDC. Person_Address_CT.For example, if the table Person.Address in the AdventureWorks sample database is enabled for change data capture, the derived change table name would be cdc.Person_Address_CT.

Nous vous recommandons de ne pas interroger directement les tables système.We recommend that you do not query the system tables directly. Au lieu de cela, exécutez les fonctions CDC. fn_cdc_get_all_changes_ < capture_instance > et cdc. fn_cdc_get_net_changes_ < capture_instance > .Instead, execute the cdc.fn_cdc_get_all_changes_<capture_instance> and cdc.fn_cdc_get_net_changes_<capture_instance> functions.

Nom de colonneColumn name Data typeData type DescriptionDescription
__$start_lsn__$start_lsn binary(10)binary(10) Numéro séquentiel dans le journal associé à la transaction de validation pour la modification.Log sequence number (LSN) associated with the commit transaction for the change.

Toutes les modifications validées dans la même transaction partagent le même numéro séquentiel dans le journal de validation.All changes committed in the same transaction share the same commit LSN. Par exemple, si une opération de suppression sur la table source supprime deux lignes, la table de modifications contiendra deux lignes, chacune avec la même valeur _ _ $ start_lsn .For example, if a delete operation on the source table removes two rows, the change table will contain two rows, each with the same __$start_lsn value.
_ _ $ end_lsn__$end_lsn binary(10)binary(10) Identifié à titre d'information uniquement.Identified for informational purposes only. Non pris en charge.Not supported. La compatibilité future n'est pas garantie.Future compatibility is not guaranteed.

Dans SQL Server 2012 (11.x)SQL Server 2012 (11.x), cette colonne a toujours pour valeur NULL.In SQL Server 2012 (11.x)SQL Server 2012 (11.x), this column is always NULL.
__$seqval__$seqval binary(10)binary(10) Valeur de séquence utilisée pour classer les modifications de ligne dans une transaction.Sequence value used to order the row changes within a transaction.
__$operation__$operation Intint Identifie l'opération de langage de manipulation de données associée à la modification.Identifies the data manipulation language (DML) operation associated with the change. Les valeurs possibles sont les suivantes :Can be one of the following:

1 = suppression1 = delete

2 = insertion2 = insert

3 = mise à jour (anciennes valeurs)3 = update (old values)

Les données de colonne ont des valeurs de ligne avant d'exécuter l'instruction UPDATE.Column data has row values before executing the update statement.

4 = mise à jour (nouvelles valeurs)4 = update (new values)

Les données de colonne ont des valeurs de ligne après l'exécution de l'instruction UPDATE.Column data has row values after executing the update statement.
__$update_mask__$update_mask varbinary(128)varbinary(128) Masque de bits basé sur les ordinaux de colonne de la table de modifications identifiant les colonnes qui ont été modifiées.A bit mask based upon the column ordinals of the change table identifying those columns that changed.
<<colonnes_de_table_source_capturées><captured source table columns> variablevaries Les colonnes restantes de la table de modifications sont les colonnes de la table source qui ont été identifiées comme colonnes capturées lorsque l'instance de capture a été créée.The remaining columns in the change table are the columns from the source table that were identified as captured columns when the capture instance was created. Si aucune colonne n'a été spécifiée dans la liste des colonnes capturées, toutes les colonnes de la table source sont incluses dans cette table.If no columns were specified in the captured column list, all columns in the source table are included in this table.
_ _ $ command_id__$command_id Intint Effectue le suivi de l’ordre des opérations dans une transaction.Tracks the order of operations within a transaction.

NotesRemarks

La colonne __$command_id a été introduite dans une mise à jour cumulative des versions 2012 à 2016.The __$command_id column was column was introduced in a cumulative update in versions 2012 through 2016. Pour obtenir des informations sur la version et le téléchargement, consultez l’article 3030352 de la base de connaissances à l’adresse suivante : la table de modifications n’est pas correctement ordonnée pour les lignes mises à jour après activation de la capture de données modifiées pour une base de données Microsoft SQL Server.For version and download information, see KB article 3030352 at FIX: The change table is ordered incorrectly for updated rows after you enable change data capture for a Microsoft SQL Server database. Pour plus d’informations, consultez les fonctionnalités de capture de données modifiées peuvent s’arrêter après la mise à niveau vers la dernière mise à jour cumulative pour SQL Server 2012, 2014 et 2016.For more information, see CDC functionality may break after upgrading to the latest CU for SQL Server 2012, 2014 and 2016.

Types de données de la colonne capturée.Captured Column Data Types

Les colonnes capturées incluses dans cette table ont les mêmes type de données et valeur que leurs colonnes sources correspondantes avec les exceptions suivantes :Captured columns included in this table have the same data type and value as their corresponding source columns with the following exceptions:

  • Les colonnes timestamp sont définies comme binaires (8) .Timestamp columns are defined as binary(8).

  • Les colonnes d' identité sont définies en tant que int ou bigint.Identity columns are defined as either int or bigint.

Toutefois, les valeurs dans ces colonnes sont les mêmes que celles des colonnes sources.However, the values in these columns are the same as the source column values.

Types de données des objets importantsLarge Object Data Types

Les colonnes de type de données image, Textet ntext reçoivent toujours une valeur null lorsque _ _ $ Operation = 1 ou __$Operation = 3.Columns of data type image, text, and ntext are always assigned a NULL value when __$operation = 1 or __$operation = 3. Une valeur null est assignée aux colonnes de type de données varbinary (max) , varchar (max) ou nvarchar (max) lorsque __$Operation = 3, sauf si la colonne a été modifiée au cours de la mise à jour.Columns of data type varbinary(max), varchar(max), or nvarchar(max) are assigned a NULL value when __$operation = 3 unless the column changed during the update. Lorsque __$operation = 1, la valeur de ces colonnes est affectée au moment de la suppression.When __$operation = 1, these columns are assigned their value at the time of the delete. Les colonnes calculées incluses dans une instance de capture ont toujours une valeur null.Computed columns that are included in a capture instance always have a value of NULL.

Par défaut, la taille maximale qui peut être ajoutée à une colonne capturée dans une seule instruction INSERT, UPDATE, WRITETEXT ou UPDATETEXT est de 65 536 octets ou 64 Ko.By default, the maximum size that can be added to a captured column in a single INSERT, UPDATE, WRITETEXT, or UPDATETEXT statement is 65,536 bytes or 64 KB. Pour augmenter cette taille afin de prendre en charge des données LOB plus volumineuses, utilisez l' option de configuration de serveur configurer l’option max text repl size pour spécifier une taille maximale supérieure.To increase this size to support larger LOB data, use the Configure the max text repl size Server Configuration Option to specify a larger maximum size. Pour plus d’informations, consultez Configurer l’option de configuration du serveur max text repl size.For more information, see Configure the max text repl size Server Configuration Option.

Modifications du langage de définition de données (DDL)Data Definition Language Modifications

Les modifications DDL de la table source, telles que l’ajout ou la suppression de colonnes, sont enregistrées dans la table _history CDC. DDL .DDL modifications to the source table, such as adding or dropping columns, are recorded in the cdc.ddl_history table. Ces modifications ne sont pas appliquées à la table de modifications.These changes are not applied to the change table. Autrement dit, la définition de la table de modifications reste constante.That is, the definition of the change table remains constant. Lors de l'insertion de lignes dans la table de modifications, le processus de capture ignore les colonnes qui n'apparaissent pas dans la liste des colonnes capturées associées à la table source.When inserting rows into the change table, the capture process ignores those columns that do not appear in the captured column list associated with the source table. Si une colonne apparaît dans la liste des colonnes capturées qui n'est plus dans la table source, une valeur Null est assignée à la colonne.If a column appears in the captured column list that is no longer in the source table, the column is assigned a null value.

La modification du type de données d’une colonne dans la table source est également enregistrée dans la table _history CDC. DDL .Changing the data type of a column in the source table is also recorded in the cdc.ddl_history table. Toutefois, cette modification altère la définition de la table de modifications.However, this change does alter the definition of the change table. Le type de données de la colonne capturée dans la table de modifications est modifié lorsque le processus de capture rencontre l'enregistrement du journal pour la modification DDL apportée à la table source.The data type of the captured column in the change table is modified when the capture process encounters the log record for the DDL change made to the source table.

Si vous devez modifier le type de données d'une colonne capturée dans la table source d'une façon qui réduit la taille du type de données, utilisez la procédure suivante pour vous assurer que la colonne équivalente dans la table de modifications peut être correctement modifiée.If you need to modify the data type of a captured column in the source table in a way that decreases the size of the data type, use the following procedure to ensure that the equivalent column in the change table can be successfully modified.

  1. Dans la table source, mettez à jour les valeurs dans la colonne à modifier pour qu'elles s'ajustent à la taille de type de données planifiée.In the source table, update the values in the column to be modified to fit into the planned data type size. Par exemple, si vous remplacez le type de données int par smallint, mettez à jour les valeurs en spécifiant une taille adaptée à la plage smallint ,-32 768 à 32 767.For example, if you change the data type from int to smallint, update the values to a size that fits in the smallint range, -32,768 to 32,767.

  2. Dans la table de modifications, effectuez la même opération de mise à jour sur la colonne équivalente.In the change table, perform the same update operation to the equivalent column.

  3. Modifiez la table source en spécifiant le nouveau type de données.Alter the source table by specifying the new data type. La modification du type de données est propagée avec succès à la table de modifications.The data type change is propagated successfully to the change table.

Modifications du langage de manipulation de donnéesData Manipulation Language Modifications

Lorsque des opérations d'insertion, de mise à jour et de suppression sont effectuées sur une table source où la capture de données modifiées est activée, un enregistrement de ces opérations DML apparaît dans le journal des transactions de la base de données.When insert, update, and delete operations are performed on a change data capture enabled source table, a record of those DML operations appears in the database transaction log. Le processus de capture de données modifiées récupère des informations sur ces modifications dans le journal des transactions et ajoute une ou deux lignes dans la table de modifications pour enregistrer la modification.The change data capture process retrieves information about those changes from the transaction log, and adds either one or two rows to the change table to record the change. Les entrées sont ajoutées à la table de modifications selon l'ordre dans lequel elles ont été validées dans la table source, même si la validation d'entrées de table de modifications doit en général être effectuée sur un groupe de modifications plutôt que sur une entrée unique.Entries are added to the change table in the same order that they were committed to the source table, although the commit of change table entries must typically be performed on a group of changes instead of for a single entry.

Dans l’entrée de table de modifications, la colonne _ _ $ start_lsn est utilisée pour enregistrer le LSN de validation associé à la modification apportée à la table source, et la colonne _ _ $ seqval est utilisée pour trier la modification dans sa transaction.Within the change table entry, the __$start_lsn column is used to record the commit LSN that is associated with the change to the source table, and the __$seqval column is used to order the change within its transaction. Ensemble, ces colonnes de métadonnées peuvent être utilisées pour faire en sorte que l'ordre de validation des modifications de source soit conservé.Together, these metadata columns can be used to make sure that the commit order of the source changes is preserved. Dans la mesure où le processus de capture obtient ses informations de modification du journal des transactions, il est important de noter que les entrées de table de modifications n'apparaissent pas de façon synchrone avec leurs modifications correspondantes de la table source.Because the capture process obtains its change information from the transaction log, it is important to note that change table entries do not appear synchronously with their corresponding source table changes. Les modifications apparaissent en effet de façon asynchrone, une fois que le processus de capture a traité les entrées de modification pertinentes du journal des transactions.Instead, corresponding changes appear asynchronously, after the capture process has processed the relevant change entries from the transaction log.

Pour les opérations d'insertion et de suppression, tous les bits du masque de mise à jour sont définis.For insert and delete operations, all the bits in the update mask are set. Pour les opérations de mise à jour, le masque de mise à jour sera modifié dans les lignes de mise à jour nouvelles et anciennes pour refléter les colonnes qui ont changé pendant la mise à jour.For update operations, the update mask in both the update old and update new rows will be modified to reflect the columns that changed during update.

Voir aussiSee Also

sys. sp_cdc_enable_table (Transact-SQL) sys.sp_cdc_enable_table (Transact-SQL)
sys. sp_cdc_get_ddl_history (Transact-SQL)sys.sp_cdc_get_ddl_history (Transact-SQL)