sys.sp_cdc_enable_table (Transact-SQL)

Active la capture de données modifiées pour la table source spécifiée dans la base de données actuelle. Lorsqu'une table est activée pour la capture de données modifiées, un enregistrement de chaque opération DML (Data Manipulation Language) appliquée à la table est écrit dans le journal des transactions. Le processus de capture de données modifiées extrait ces informations du journal et les écrit dans les tables de modifications accédées à l'aide d'un ensemble de fonctions.

La capture des données modifiées n'est disponible que dans SQL Server 2008, éditions Enterprise, Developer et Evaluation.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

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

Arguments

  • [ @source_schema = ] 'source_schema'
    Nom du schéma auquel la table source appartient. source_schema est de type sysname, sans valeur par défaut et ne peut pas avoir la valeur NULL.

  • [ @source_name = ] 'source_name'
    Nom de la table source sur laquelle la capture de données modifiées doit être activée. source_name est de type sysname, sans valeur par défaut et ne peut pas avoir la valeur NULL.

    source_name doit exister dans la base de données actuelle. Les tables dans le schéma cdc ne peuvent pas être activées pour la capture des données modifiées.

  • [ @role_name = ] 'role_name'
    Nom du rôle de base de données utilisé pour réguler l'accès aux données modifiées. role_name est de type sysname et doit être spécifié. En cas de définition explicitement sur NULL, aucun rôle de régulation n'est utilisé pour limiter l'accès aux données de modifications.

    Si le rôle existe actuellement, il est utilisé. Si le rôle n'existe pas, une tentative est faite pour créer un rôle de base de données avec le nom spécifié. L'espace blanc est retiré à la droite de la chaîne dans le nom de rôle avant d'essayer de créer le rôle. Si l'appelant n'est pas autorisé à créer un rôle dans la base de données, la procédure stockée échoue.

  • [ @capture_instance = ] 'capture_instance'
    Nom de l'instance de capture utilisée pour nommer les objets de capture de données modifiées spécifiques à l'instance. capture_instance est de type sysname et ne peut pas avoir la valeur NULL.

    S'il n'est pas spécifié, le nom est dérivé du nom de schéma d'origine associé au nom de table source au format schemaname_sourcename. capture_instance ne peut pas dépasser 100 caractères et doit être unique dans la base de données. Que le nom soit spécifié ou dérivé, tout espace blanc est retiré à la droite de la chaîne de capture_instance.

    Une table source peut avoir un maximum de deux instances de capture. Pour plus d'informations, consultez sys.sp_cdc_help_change_data_capture (Transact-SQL).

  • [ @supports_net_changes = ] supports_net_changes
    Indique si la prise en charge de l'interrogation des modifications nettes doit être activé pour cette instance de capture. supports_net_changes est de type bit avec 1 comme valeur par défaut si la table a une clé primaire ou si la table a un index unique identifié à l'aide du paramètre @index\_name. Sinon, le paramètre a comme valeur par défaut 0.

    S'il a la valeur 0, seules les fonctions de prise en charge d'interrogation de toutes les modifications sont générées.

    S'il a la valeur 1, les fonctions nécessaires pour interroger les modifications nettes sont générées également.

    Si supports_net_changes a la valeur 1, index_name doit être spécifié ou la table source doit avoir une clé primaire définie.

  • [ @index_name = ] **'**index_name'
    Nom d'un index unique utilisé pour identifier de manière unique les lignes dans la table source. index_name est de type sysname et peut être NULL. Si spécifié, index_name doit être un index unique valide sur la table source. Si index_name est spécifié, les colonnes d'index identifiées sont prioritaires par rapport à toute colonne de clé primaire définie comme identificateur de ligne unique pour la table.

  • [ @captured_column_list = ] 'captured_column_list'
    Identifie les colonnes de la table source qui doivent être incluses dans la table de modifications. captured_column_list est de type nvarchar(max) et peut avoir la valeur NULL. Si la valeur est NULL, toutes les colonnes sont incluses dans la table de modifications.

    Les noms de colonnes doivent être des colonnes valides dans la table source. Les colonnes définies dans un index de clé primaire ou celles définies dans un index référencé par index_name doivent être incluses.

    captured_column_list est une liste de noms de colonnes séparés par des virgules. Des noms de colonnes individuels dans la liste peuvent être cités en utilisant des guillemets doubles ("") ou des crochets ([]). Si un nom de colonne contient une virgule incorporée, il doit être entouré de guillemets.

    captured_column_list ne peut pas contenir les noms de colonnes réservés suivants : __$start_lsn, __$end_lsn, __$seqval, __$operation et __$update_mask.

  • [ @filegroup_name = ] 'filegroup_name'
    Groupe de fichiers à utiliser pour la table de modifications créée pour l'instance de capture. filegroup_name est de type sysname et peut avoir la valeur NULL. Si spécifié, filegroup_name doit être défini pour la base de données actuelle. Si la valeur est NULL, le groupe de fichiers par défaut est utilisé.

    Nous recommandons de créer un groupe de fichiers séparé pour les tables de modifications de capture des données modifiées. Pour plus d'informations, consultez Configuration de la capture des données modifiées.

  • [ @allow_partition_switch= ] 'allow_partition_switch'
    Indique si la commande SWITCH PARTITION d'ALTER TABLE peut être exécutée sur une table activée pour la capture de données modifiées. allow_partition_switch est de type bit, avec 1 comme valeur par défaut.

    Pour les tables non partitionnées, le paramètre de commutation est toujours 1 et le paramètre réel est ignoré. Si la commutation est définie explicitement sur 0 pour une table non partitionnée, un avertissement 22857 est émis pour indiquer que le paramètre de commutation a été ignoré. Si la commutation est définie explicitement sur 0 pour une table partitionnée, un avertissement 22356 est émis pour indiquer que les opérations de commutation de partition sur la table source seront rejetées. Pour finir, si le paramètre de commutation est défini explicitement sur 1 ou autorisé à avoir comme valeur par défaut 1 et que la table active est partitionnée, un avertissement 22855 est émis pour indiquer que les commutations de partition ne seront pas bloquées. Si une commutation de partition se produit, la capture de données modifiées n'effectue pas le suivi des modifications qui résultent de la commutation. Cela provoquera des incohérences de données lors de la consommation des données de modifications.

    Important

    SWITCH PARTITION est une opération de métadonnées, mais elle entraîne des modifications de données. Les modifications de données associées à cette opération ne sont pas capturées dans les tables de modifications de capture de données modifiées. Pensez à une table qui comprend trois partitions et à laquelle des modifications sont apportées. Le processus de capture effectuera le suivi des insertions, mises à jour et suppressions exécutées par l'utilisateur sur cette table. Toutefois, si une partition est extraite dans une autre table (par exemple, pour effectuer une suppression en bloc), les lignes déplacées dans le cadre de cette opération ne seront pas capturées en tant que lignes supprimées dans la table de modifications. De la même façon, si une nouvelle partition qui comprend des lignes préremplies est ajoutée à la table, ces lignes ne se seront pas répercutées dans la table de modifications. Cette situation peut aboutir à des données incohérentes lorsque les modifications sont utilisées par une application et appliquées à une destination.

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Jeux de résultats

Aucun

Notes

Pour pouvoir activer une table pour la capture de données modifiées, la base de données doit être activée. Pour déterminer si la base de données est activée pour la capture de données modifiées, interrogez la colonne is_cdc_enabled dans l'affichage catalogue sys.databases. Pour activer la base de données, utilisez la procédure stockée sys.sp_cdc_enable_db.

Lorsque la capture de données modifiées est activée pour une table, une table de modifications et une ou deux fonctions de requêtes sont générées. La table de modifications sert de base de données de référentiel pour les modifications de table source extraites du journal des transactions par le processus de capture. Les fonctions de requête sont utilisées pour extraire des données de la table de modifications. Les noms de ces fonctions sont dérivés du paramètre capture_instance des manières suivantes :

  • Fonctions portant sur toutes les modifications : cdc.fn_cdc_get_all_changes_<instance_capture>

  • Fonctions portant sur les modifications nettes : cdc.fn_cdc_get_net_changes_<instance_capture>

sys.sp_cdc_enable_table crée également les travaux de capture et de nettoyage pour la base de données si la table source est la première table de la base de données à être activée pour la capture de données modifiées et qu'aucune publication transactionnelle n'existe pour la base de données. Il affecte à la colonne is_tracked_by_cdc de l'affichage catalogue sys.tables la valeur 1.

[!REMARQUE]

Il n'est pas nécessaire que l'agent SQL Server soit en cours d'exécution lorsque la capture de données modifiées est activée pour une table. Toutefois, le processus de capture ne traitera pas le journal des transactions et n'écrira pas d'entrées dans la table de modifications si l'Agent SQL Server ne s'exécute pas.

Autorisations

Nécessite l'appartenance au rôle de base de données fixe db_owner.

Exemples

A. Activation de la capture des données modifiées en spécifiant uniquement les paramètres requis

L'exemple suivant active la capture des données modifiées pour la table HumanResources.Employee. Seuls les paramètres requis sont spécifiés.

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

B. Activation de la capture de données modifiées en spécifiant des paramètres facultatifs supplémentaires

L'exemple suivant active la capture des données modifiées pour la table HumanResources.Department. Tous les paramètres sauf @allow\_partition\_switch sont spécifiés.

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