Cdc.<>capture_instance_CT (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

La table de modifications créée lorsque la capture de données modifiées est activée sur une table source. 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. Lorsque le nom de la table de modifications n’est pas spécifié au moment où la table source est activée, le nom est dérivé. 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. Par exemple, si la table Person.Address de l’exemple de base de données AdventureWorks est activée pour la capture des données modifiées, le nom de la table de modification dérivée est cdc.Person_Address_CT.

Nous vous recommandons de ne pas interroger directement les tables système. Exécutez plutôt les fonctions cdc.fn_cdc_get_all_changes_<capture_instance> et cdc.fn_cdc_get_net_changes_<capture_instance> .

Nom de la colonne Type de données Description
__$start_lsn binary(10) Numéro séquentiel dans le journal associé à la transaction de validation pour la modification.

Toutes les modifications validées dans la même transaction partagent le même numéro séquentiel dans le journal de validation. Par exemple, si une opération de suppression sur la table source supprime deux lignes, la table de modification contient deux lignes, chacune avec la même valeur __$start_lsn .
__$end_lsn binary(10) Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

Dans SQL Server 2012 (11.x), cette colonne a toujours la valeur NULL.
__$seqval binary(10) Séquence de l’opération telle que représentée dans le journal des transactions. Ne doit pas être utilisé pour l’ordre. Utilisez plutôt la colonne __$command_id .
__$operation int Identifie l'opération de langage de manipulation de données associée à la modification. Il peut s'agir d'une des méthodes suivantes :

1 = suppression

2 = insertion

3 = mise à jour (anciennes valeurs)

Les données de colonne ont des valeurs de ligne avant d'exécuter l'instruction UPDATE.

4 = mise à jour (nouvelles valeurs)

Les données de colonne ont des valeurs de ligne après l'exécution de l'instruction UPDATE.
__$update_mask varbinary(128) Masque de bits basé sur les ordinaux de colonne de la table de modifications identifiant les colonnes qui ont changé.
<colonnes des tables sources capturées> varie 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. 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.
__$command_id int Suit l’ordre des opérations dans une transaction.

Notes

La __$command_id colonne a été introduite dans une mise à jour cumulative dans les versions 2012 à 2016. Pour plus d’informations sur la version et le téléchargement, consultez l’article de la Base de connaissances 3030352 sur CORRECTIF : La table de modification est correctement triée pour les lignes mises à jour après avoir activé la capture de données modifiées pour une base de données Microsoft SQL Server. Pour plus d’informations, consultez La fonctionnalité CDC peut s’interrompre après la mise à niveau vers la dernière cu pour SQL Server 2012, 2014 et 2016.

Types de données de la colonne capturée.

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 :

  • Les colonnes d’horodatage sont définies comme binaires(8).

  • Les colonnes d’identité sont définies comme int ou bigint.

Toutefois, les valeurs dans ces colonnes sont les mêmes que celles des colonnes sources.

Types de données des objets importants

Une valeur NULL est toujours attribuée aux colonnes de type image, texte et ntext lorsque __$operation = 1 ou __$operation = 3. Les colonnes de type de données varbinary(max), varchar(max)ou nvarchar(max) se voient attribuer une valeur NULL lorsque __$operation = 3, sauf si la colonne a changé pendant la mise à jour. Lorsque __$operation = 1, ces colonnes sont affectées de leur valeur au moment de la suppression. Les colonnes calculées incluses dans une capture instance ont toujours la valeur 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. Pour augmenter cette taille afin de prendre en charge des données métier plus volumineuses, utilisez l’option Configurer la taille maximale du texte repl taille du serveur afin de spécifier une taille maximale supérieure. Pour plus d’informations, consultez Configurer l’option de configuration du serveur max text repl size.

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

Les modifications DDL apportées à la table source, telles que l’ajout ou la suppression de colonnes, sont enregistrées dans la table cdc.ddl_history . Ces modifications ne sont pas appliquées à la table des modifications. Autrement dit, la définition de la table de modifications reste constante. Lors de l’insertion de lignes dans la table de modification, le processus de capture ignore les colonnes qui n’apparaissent pas dans la liste des colonnes capturées associée à la table source. 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.

La modification du type de données d’une colonne dans la table source est également enregistrée dans la table cdc.ddl_history . Toutefois, cette modification altère la définition de la table de modifications. 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.

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.

  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. Par exemple, si vous modifiez le type de données int à smallint, mettez à jour les valeurs vers une taille qui correspond à la plage smallint , -32 768 à 32 767.

  2. Dans la table de modifications, effectuez la même opération de mise à jour sur la colonne équivalente.

  3. Modifiez la table source en spécifiant le nouveau type de données. La modification du type de données est propagée avec succès à la table de modifications.

Modifications du langage de manipulation de données

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. Le processus de capture des données modifiées récupère des informations sur ces modifications à partir du journal des transactions et ajoute une ou deux lignes à la table des modifications pour enregistrer la modification. Les entrées sont ajoutées à la table des modifications dans le même ordre qu’elles ont été validées dans la table source. Cela dit, la validation des entrées de table de modifications doit généralement être effectuée sur un groupe de modifications plutôt qu’en fonction de chaque entrée.

Une opération d’insertion entraîne l’ajout d’une ligne à la table de modifications ; une opération de suppression entraîne l’ajout d’une ligne à la table de modifications ; si SQL Server implémente une mise à jour en tant que « mise à jour différée », ce qui signifie qu’il s’agit d’une paire d’opérations de suppression et d’insertion, l’opération de mise à jour entraîne l’ajout de deux lignes à la table de modification : la première ligne reflétant la suppression des données capturées et la deuxième ligne reflète l’insertion des données mises à jour et capturées ; si SQL Server n’implémente pas de mise à jour en tant que « mise à jour différée », l’opération de mise à jour entraîne l’ajout de deux lignes à la table de modifications : la première ligne reflétant les données capturées avant la mise à jour, et la deuxième ligne reflétant les données capturées après la mise à jour.

Dans l’entrée de la table de modification, la colonne __$start_lsn est utilisée pour enregistrer le LSN de validation associé à la modification de la table source, la colonne __$command_id est utilisée pour classer la modification dans sa transaction et la colonne __$operation est utilisée pour enregistrer l’opération effectuée. 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é. Étant donné que le processus de capture obtient ses informations de modification à partir du journal des transactions, il est important de noter que les entrées de table de modification n’apparaissent pas de manière synchrone avec les modifications de la table source correspondantes. 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.

Pour les opérations d'insertion et de suppression, tous les bits du masque de mise à jour sont définis. 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.

Voir aussi

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