Tâche de contrôle de capture de données modifiéesCDC Control Task

S’APPLIQUE À : ouiSQL Server, notamment sur Linux ouiAzure SQL Database ouiAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server, including on Linux yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

La tâche de contrôle de capture de données modifiées permet de contrôler le cycle de vie des packages de capture de données modifiées.The CDC Control task is used to control the life cycle of change data capture (CDC) packages. Elle gère la synchronisation des package de capture de données modifiées avec le package de charge initiale et la gestion des plages de numéros séquentiels dans le journal (NSE) qui sont traités lors de l'exécution d'un package de capture de données modifiées.It handles CDC package synchronization with the initial load package, the management of Log Sequence Number (LSN) ranges that are processed in a run of a CDC package. En outre, la tâche de contrôle de capture de données modifiées traite les scénarios d'erreur et la récupération.In addition, the CDC Control task deals with error scenarios and recovery.

La tâche de contrôle de capture de données modifiées gère l'état du package de capture de données modifiées dans une variable de package SSIS et peut également le conserver de manière permanente dans une table de base de données afin qu'il soit conservé d'une activation de package à l'autre et entre plusieurs packages qui exécutent ensemble un processus de capture de données modifiées commun (par exemple, une tâche peut être responsable du chargement initial et l'autre des mises à jour du flux progressif).The CDC Control task maintains the state of the CDC package in an SSIS package variable and it can also persist it in a database table so that the state is maintained across package activations and between multiple packages that together perform a common CDC process (for example, one task may be responsible for the initial loading and the other for the trickle-feed updates).

La tâche de contrôle de capture de données modifiées prend en charge deux groupes d'opérations.The CDC Control task supports two groups of operations. Un groupe gère la synchronisation de la charge initiale et le traitement des modifications, tandis que l'autre gère la plage de traitement des modifications des NSE pour une exécution d'un package de source de données modifiées et garde une trace des actions correctement traitées.One group handles the synchronization of initial load and change processing, and the other manages the change-processing range of LSNs for a run of a CDC package and keeps track of what was processed successfully.

Les opérations suivantes gèrent la synchronisation de la charge initiale et le traitement des modifications :The following operations handle the synchronization of initial load and change processing:

OpérationOperation DescriptionDescription
ResetCdcStateResetCdcState Cette opération est utilisée pour réinitialiser l'état permanent de capture de données modifiées associé au contexte de capture de données modifiées actuel.This operation is used to reset the persistent CDC state associated with the current CDC context. Une fois cette opération effectuée, le numéro LSN maximal actuel de la table d’horodatage des LSN sys.fn_cdc_get_max_lsn devient le début de la plage de traitement suivante.After this operation is run, the current maximum LSN from the LSN-timestamp sys.fn_cdc_get_max_lsn table becomes the start of the range for the next processing range. Cette opération requiert une connexion à la base de données source.This operation requires a connection to the source database.
MarkInitialLoadStartMarkInitialLoadStart Cette opération est utilisée au début d'un package de charge initiale pour enregistrer le NSE actuel dans la base de données source avant que le package de charge initiale commence à lire les tables sources.This operation is used at the beginning of an initial-load package to record the current LSN in the source database before the initial-load package starts reading the source tables. Cette opération requiert une connexion à la base de données source pour appeler sys.fn_cdc_get_max_lsn.This requires a connection to the source database to call sys.fn_cdc_get_max_lsn.

Si vous sélectionnez MarkInitialLoadStart quand vous travaillez sur la capture de données modifiées SQL ServerSQL Server (autrement dit, hors d’Oracle), l’utilisateur spécifié dans le gestionnaire de connexions doit être db_owner ou sysadmin.If you select MarkInitialLoadStart when working on SQL ServerSQL Server CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.
MarkInitialLoadEndMarkInitialLoadEnd Cette opération est utilisée à la fin d'un package de charge initiale pour enregistrer le NSE actuel dans la base de données source une fois que le package de charge initiale a fini de lire les tables sources.This operation is used at the end of an initial-load package to record the current LSN in the source database after the initial-load package finished reading the source tables. Ce NSE est déterminé en enregistrant l'heure à laquelle cette opération s'est produite, puis en interrogeant la table de mappage cdc.lsn_time_dans la base de données de capture de données modifiées afin de rechercher une modification survenue après cette heure.This LSN is determined by recording the current time when this operation occurred and then querying the cdc.lsn_time_mapping table in the CDC database looking for a change that occurred after that time.

Si vous sélectionnez MarkInitialLoadEnd quand vous travaillez sur la capture de données modifiées SQL ServerSQL Server (autrement dit, hors d’Oracle), l’utilisateur spécifié dans le gestionnaire de connexions doit être db_owner ou sysadmin.If you select MarkInitialLoadEnd when working on SQL ServerSQL Server CDC (that is , not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.
MarkCdcStartMarkCdcStart Cette opération est utilisée lorsque la charge initiale est effectuée à partir d'une base de données par instantané.This operation is used when then the initial load is made from a snapshot database. Dans ce cas, le traitement des modifications doit démarrer immédiatement après le NSE de l'instantané.In this case, the change processing should start immediately after the snapshot LSN. Vous pouvez spécifier le nom de la base de données par instantané à utiliser et la tâche de contrôle de capture de données modifiées qui interroge SQL ServerSQL Server pour connaître le NSE de l'instantané.You can specify the name of the snapshot database to use and the CDC Control task queries SQL ServerSQL Server for the snapshot LSN. Vous avez également la possibilité de spécifier directement le NSE de l'instantané.You also have the option to directly specify the snapshot LSN.

Si vous sélectionnez MarkCdcStart quand vous travaillez sur la capture de données modifiées SQL ServerSQL Server (autrement dit, hors d’Oracle), l’utilisateur spécifié dans le gestionnaire de connexions doit être db_owner ou sysadmin.If you select MarkCdcStart when working on SQL ServerSQL Server CDC (that is , not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

Les opérations suivantes sont utilisées pour gérer la plage de traitement :The following operations are used to manage the processing range:

OpérationOperation DescriptionDescription
GetProcessingRangeGetProcessingRange Cette opération est utilisée avant d'appeler le flux de données qui utilise le flux de données de la source CDC.This operation is used before invoking the data flow that uses the CDC Source data flow. Elle établit une plage de numéros LSN que le flux de données de la source CDC lit lorsqu'il est appelé.It establishes a range of LSNs that the CDC Source data flow reads when invoked. La plage est stockée dans une variable de package SSIS qui est utilisée par la source CDC pendant le traitement du flux de données.The range is stored in an SSIS package variable that is used by the CDC Source during data-flow processing.

Pour plus d’informations sur les états stockés, consultez Définir une variable d’état.For more information about the states that are stored, see Define a State Variable.
MarkProcessedRangeMarkProcessedRange : Cette opération est exécutée après que chaque exécution de la capture de données modifiées (une fois le flux de données de capture de données modifiées terminé avec succès) pour consigner le dernier NSE qui a été entièrement traité dans le cadre de l'exécution de la capture de données modifiées.: This operation is executed after each CDC run (after the CDC data flow is completed successfully) to record the last LSN that was fully processed in the CDC run. Lors de la prochaine exécution de GetProcessingRange, cette position constitue le début de la plage de traitement.The next time GetProcessingRange is executed, this position is the start of the processing range.

Gestion de la permanence de l'état de capture de données modifiéesHandling CDC State Persistency

La tâche de contrôle de capture de données modifiées conserve un état permanent entre les activations.The CDC Control task maintains a persistent state between activations. Les informations stockées dans l'état de capture de données modifiées sont utilisées pour déterminer et gérer la plage de traitement pour le package de capture de données modifiées et pour détecter les conditions d'erreur.The information stored in the CDC state is used to determine and maintain the processing range for the CDC package and for detecting error conditions. L'état permanent est stocké sous forme de chaîne.The persistent state is stored as a string. Pour plus d’informations, consultez Définir une variable d’état.For more information, see Define a State Variable.

La tâche de contrôle de capture de données modifiées prend en charge deux types de permanence d'état :The CDC Control task supports two types of state persistency

  • Permanence d'état manuelle : Dans ce cas, la tâche de contrôle de capture de données modifiées gère l'état stocké dans une variable de package, mais le développeur de package doit lire la variable dans un stockage permanent avant d'appeler le contrôle de capture de données modifiées, puis la réécrire dans ce stockage permanent après le dernier appel du contrôle de capture de données modifiées et une fois l'exécution de la capture de données modifiées terminée.Manual State Persistency: In this case, the CDC Control task manages the state stored in a package variable but the package developer must read the variable from a persistent store before calling the CDC Control and then write it back to that persistent store after the CDC Control is last called and the CDC run completes.

  • Permanence d'état automatique : L'état de capture de données modifiées est stocké dans une table dans une base de données.Automatic State Persistency: The CDC state is stored in a table in a database. L’état est stocké sous un nom fourni par la propriété StateName dans une table nommée de la propriété Table à utiliser pour le stockage de l’état , qui se trouve dans un gestionnaire de connexions sélectionné pour le stockage de l’état.The state is stored under a name provided in the StateName property in a table named in the Table to Use for Storing State property, which is located in a selected connection manager for storing the state. La valeur par défaut est le gestionnaire de connexions source, mais la pratique courante consiste à utiliser le gestionnaire de connexions cible.The default is the source connection manager but the common practice is for it to be the target connection manager. La tâche de contrôle de capture de données modifiées met à jour la valeur d'état dans la table d'état et celle-ci est validée dans le cadre de la transaction en cours.The CDC Control task updates the state value in the state table and this is committed as part of the ambient transaction.

Gestion des erreursError Handling

La tâche de contrôle de capture de données modifiées peut signaler une erreur dans les conditions suivantes :The CDC Control task may report an error when:

  • Elle ne parvient pas à lire l'état de capture de données modifiées permanent ou la mise à jour de l'état permanent échoue.It fails to read the persistent CDC state or when updating the persistent state fails.

  • Elle ne parvient pas à lire les informations du NSE actuel dans la base de données source.It fails to read the current LSN information from the source database.

  • La lecture de l'état de capture de données modifiées n'est pas cohérente.The CDC state read is not consistent.

Dans toutes ces situations, la tâche de contrôle de capture de données modifiées signale une erreur qui peut être gérée de la manière dont SSIS gère habituellement les erreurs de flux de contrôle.In all of these cases, the CDC Control task reports an error that can be handled in the standard way SSIS handles control-flow errors.

La tâche de contrôle de capture de données modifiées peut également signaler un avertissement lorsque l'opération Obtenir la plage de traitement est appelée directement après une autre opération Obtenir la plage de traitement sans que Marquer la plage traitée soit appelé.The CDC Control task may also report a warning when the Get Processing Range operation is invoked directly after another Get Processing Range operation without Mark Processed Range being called. Ceci indique que l'exécution précédente a échoué ou qu'un autre package de capture de données modifiées s'exécute peut-être avec le même nom d'état de capture de données modifiées.This is an indication that the previous run failed or that another CDC package may be running using the same CDC state name.

Configuration de la tâche de contrôle de capture de données modifiéesConfiguring the CDC Control Task

Vous pouvez définir les propriétés par le biais du concepteur SSIS ou par programmation.You can set properties through SSIS Designer or programmatically.

Dans cette sectionIn This Section

Définir une variable d’étatDefine a State Variable

Éditeur de tâche de contrôle CDCCDC Control Task Editor

Utilisez la boîte de dialogue Éditeur de tâche de contrôle CDC pour configurer la tâche de contrôle CDC.Use the CDC Control Task Editor dialog box to configure the CDC Control task. La configuration de la tâche de contrôle CDC inclut la définition d'une connexion à la base de données CDC, l'opération de la tâche CDC et des informations de gestion d'état.The CDC Control task configuration includes defining a connection to the CDC database, the CDC task operation and the state management information.

Pour en savoir plus sur la tâche de contrôle CDC, consultez CDC Control Task.To learn more about the CDC Control task, see CDC Control Task.

Pour ouvrir l'Éditeur de tâche de contrôle CDCTo open the CDC Control Task Editor

  1. Dans SQL Server Data ToolsSQL Server Data Tools, ouvrez le package SQL Server 2017 Integration Services (SSIS)SQL Server 2017 Integration Services (SSIS) doté de la tâche de contrôle CDC.In SQL Server Data ToolsSQL Server Data Tools, open the SQL Server 2017 Integration Services (SSIS)SQL Server 2017 Integration Services (SSIS) package that has the CDC Control task.

  2. Sous l’onglet Flux de contrôle , double-cliquez sur la tâche de contrôle CDC.On the Control Flow tab, double-click the CDC Control task.

OptionsOptions

Gestionnaire de connexions ADO.NET de base de données CDC SQL ServerSQL Server CDC database ADO.NET connection manager
Sélectionnez un gestionnaire de connexions existant dans la liste ou cliquez sur Nouveau pour créer une connexion.Select an existing connection manager from the list, or click New to create a new connection. La connexion doit être établie avec une base de données SQL ServerSQL Server activée pour la capture de données modifiées et dans laquelle la table de modifications sélectionnée est localisée.The connection must be to a SQL ServerSQL Server database that is enabled for CDC and where the selected change table is located.

Opération de contrôle de capture de données modifiéesCDC Control Operation
Sélectionnez l'opération à exécuter pour cette tâche.Select the operation to run for this task. Toutes les opérations utilisent la variable d'état qui est stockée dans une variable de package SSIS qui stocke l'état et le passe entre les différents composants du package.All operations use the state variable that is stored in an SSIS package variable that stores the state and passes it between the different components in the package.

  • Marquer le début de la charge initiale : Cette opération est utilisée en exécutant une charge initiale d'une base de données active sans instantané.Mark initial load start: This operation is used when executing an initial load from an active database without a snapshot. Elle est invoquée au début d'un package de chargement initial pour enregistrer le numéro LSN actuel dans la base de données source avant que le package de chargement initial commence à lire les tables sources.It is invoked at the beginning of an initial-load package to record the current LSN in the source database before the initial-load package starts reading the source tables. Cela requiert une connexion à la base de données source.This requires a connection to the source database.

    Si vous sélectionnez Marquer le début de la charge initiale quand vous travaillez sur la capture de données modifiées SQL ServerSQL Server (autrement dit, hors d’Oracle) l’utilisateur spécifié dans le gestionnaire de connexions doit être db_owner ou sysadmin.If you select Mark Initial Load Start when working on SQL ServerSQL Server CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

  • Marquer la fin de la charge initiale : Cette opération est utilisée en exécutant une charge initiale d'une base de données active sans instantané.Mark initial load end: This operation is used when executing an initial load from an active database without a snapshot. Elle est invoquée à la fin d'un package de chargement initial pour enregistrer le numéro LSN actuel dans la base de données source une fois que le package de chargement initial a fini de lire les tables sources.It is invoked at the end of an initial-load package to record the current LSN in the source database after the initial-load package finished reading the source tables. Ce numéro LSN est déterminé en enregistrant l'heure à laquelle cette opération s'est produite, puis en interrogeant la table de mappage cdc.lsn_time_dans la base de données CDC afin de rechercher une modification survenue après cette heure.This LSN is determined by recording nthe current time when this operation occurred and then querying the cdc.lsn_time_mapping table in the CDC database looking for a change that occurred after that time

    Si vous sélectionnez Marquer la fin de la charge initiale quand vous travaillez sur la capture de données modifiées SQL ServerSQL Server (autrement dit, hors d’Oracle) l’utilisateur spécifié dans le gestionnaire de connexions doit être db_owner ou sysadmin.If you select Mark Initial Load End when working on SQL ServerSQL Server CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

  • Marquer le début CDC : Cette opération est utilisée lorsque la charge initiale est effectuée à partir d'un fichier de base de données d'instantanés ou d'une base de données inactive.Mark CDC start: This operation is used when then the initial load is made from a snapshot database or from a quiescence database. Elle est appelée à n'importe quel stade du package de charge initiale.It is invoked at any point within the initial load package. L'opération accepte un paramètre qui peut être un numéro LSN d'instantané, un nom de base de données d'instantanés (de laquelle le numéro LSN d'instantané dérive automatiquement) ou qui peut être laissé vide, auquel cas le numéro LSN de la base de données actuelle est utilisé comme dernier numéro LSN pour le package de traitement des modifications.The operation accepts a parameter that can be a snapshot LSN, a name of a snapshot database (from which the snapshot LSN will be derived automatically) or it can be left empty, in which case the current database LSN is used as the start LSN for the change processing package.

    Cette opération est utilisée à la place des opérations Marquer le début/la fin de la charge initiale.This operation is used instead of the Mark Initial Load Start/End operations.

    Si vous sélectionnez Marquer le début CDC quand vous travaillez sur la capture de données modifiées SQL ServerSQL Server (autrement dit, hors d’Oracle) l’utilisateur spécifié dans le gestionnaire de connexions doit être db_owner ou sysadmin.If you select Mark CDC Start when working on SQL ServerSQL Server CDC (that is, not Oracle) the user specified in the connection manager must be either db_owner or sysadmin.

  • Obtenir la plage de traitement : Cette opération est utilisée dans un package de traitement des modifications avant d'appeler le flux de données qui utilise le flux de données source CDC.Get processing range: This operation is used in a change processing package before invoking the data flow that uses the CDC Source data flow. Elle établit une plage de numéros LSN que le flux de données de la source CDC lit lorsqu'il est appelé.It establishes a range of LSNs that the CDC Source data flow reads when invoked. La plage est stockée dans une variable de package SSIS qui est utilisée par la source CDC pendant le traitement du flux de données.The range is stored in an SSIS package variable that is used by the CDC Source during data-flow processing.

    Pour plus d’informations sur les états CDC stockés, consultez Définir une variable d’état.For more information about the possible CDC states that are stored, see Define a State Variable.

  • Marquer la plage traitée : Cette opération est utilisée dans un package de traitement des modifications à la fin d’une exécution CDC (après que le flux de données CDC s’est terminé correctement) pour inscrire le dernier numéro LSN qui était complètement traité dans l’exécution CDC.Mark processed range: This operation is used in a change processing package at the end of a CDC run (after the CDC data flow is completed successfully) to record the last LSN that was fully processed in the CDC run. Lors de la prochaine exécution de GetProcessingRange , cette position détermine le début de la prochaine plage de traitement.The next time GetProcessingRange is executed, this position determines the start of the next processing range.

  • Réinitialiser l’état CDC : Cette opération est utilisée pour réinitialiser l'état permanent de capture de données modifiées associé au contexte de capture de données modifiées actuel.Reset CDC state: This operation is used to reset the persistent CDC state associated with the current CDC context. Une fois cette opération effectuée, le numéro LSN maximal actuel de la table d’horodatage des LSN sys.fn_cdc_get_max_lsn devient le début de la plage de traitement suivante.After this operation is run, the current maximum LSN from the LSN-timestamp sys.fn_cdc_get_max_lsn table becomes the start of the range for the next processing range. Cette opération requiert une connexion à la base de données source.This operation requires a connection to the source database.

    Cette opération est notamment utilisée lorsque vous souhaitez traiter uniquement les enregistrements de modifications récents et ignorer tous les anciens enregistrements de modifications.An example of when this operation is used is when you want to process only the newly created change records and ignore all old change records.

Variable contenant l'état CDCVariable containing the CDC state
Sélectionnez la variable de package SSIS qui stocke les informations d'état de l'opération de tâche.Select the SSIS package variable that stores the state information for the task operation. Vous devez définir une variable avant de commencer.You should define a variable before you begin. Si vous sélectionnez Persistance d'état automatique, la variable d'état est chargée et enregistrée automatiquement.If you select Automatic state persistence, the state variable is loaded and saved automatically.

Pour plus d’informations sur la définition de la variable d’état, consultez Définir une variable d’état.For more information about defining the state variable, see Define a State Variable.

Numéro séquentiel dans le journal (LSN) SQL Server pour démarrer le nom CDC/instantané :SQL Server LSN to start the CDC/Snapshot name:
Entrez le numéro LSN de la base de données source ou de la base de données d'instantanés à partir de laquelle la charge initiale est effectuée pour déterminer le début de la capture de données modifiées.Type the current source database LSN or the name of the snapshot database from which the initial load is performed to determine where the CDC starts. Le numéro est disponible uniquement si Opération de contrôle CDC est défini sur Marquer le début CDC.This is available only if the CDC Control Operation is set to Mark CDC Start.

Pour plus d'informations sur ces opérations, consultez CDC Control Task.For more information about these operations, see CDC Control Task

Stockage automatique de l'état dans une table de base de donnéesAutomatically store state in a database table
Activez cette case à cocher pour que la tâche de contrôle CDC gère automatiquement le chargement et le stockage de l'état CDC dans une table d'états contenue dans la base de données spécifiée.Select this check box for the CDC Control task to automatically handle loading and storing the CDC state in a state table contained in the specified database. Si cette case n'est pas sélectionnée, le développeur doit charger l'état CDC au démarrage du package et l'enregistrer dès qu'il change.When not selected, the developer must load the CDC State when the package starts and save it whenever the CDC State changes.

Gestionnaire de connexions de la base de données où l'état est stockéConnection manager for the database where the state is stored
Sélectionnez un gestionnaire de connexions ADO.NET existant dans la liste ou cliquez sur Nouveau pour créer une nouvelle connexion.Select an existing ADO.NET connection manager from the list, or click New to create a new connection. La connexion concerne une base de données SQL ServerSQL Server qui contient la table State.This connection is to a SQL ServerSQL Server database that contains the State table. La table State contient les informations d'état.The State table contains the State information.

Ces informations sont disponibles uniquement si vous avez sélectionné Persistance d'état automatique et il s'agit d'un paramètre obligatoire.This is available only if Automatic state persistence is selected and it is a required parameter.

Table à utiliser pour stocker l'étatTable to use for storing state
Tapez le nom de la table d'état à utiliser pour stocker l'état CDC.Type the name of the state table to be used for storing the CDC state. La table spécifiée doit être composée de deux colonnes appelées name et state avec le type de données varchar (256) .The table specified must have two columns called name and state and both columns must be of the data type varchar (256).

Vous pouvez éventuellement sélectionner Nouveau pour obtenir un script SQL qui génère une nouvelle table d'état avec les colonnes requises.You can optionally select New to get an SQL script that builds a new State table with the required columns. Lorsque Persistance d'état automatique est sélectionné, le développeur doit créer une table d'état en fonction des spécifications ci-dessus.When Automatic state persistence is selected, the developer must create a state table according to the requirements listed above.

Ces informations sont disponibles uniquement si vous avez sélectionné Persistance d'état automatique et il s'agit d'un paramètre obligatoire.This is available only if Automatic state persistence is selected and it is a required parameter.

Nom d'étatState name
Entrez le nom à associer à l'état CDC persistant.Type a name to associate with the persistent CDC state. La charge complète et les packages CDC qui fonctionnent avec le même contexte CDC auront un nom d'état commun.The full load and CDC packages that work with the same CDC context will specify a common state name. Ce nom est utilisé pour surveiller la ligne d'état dans la table d'état.This name is used for looking up the state row in the state table