Redémarrer des packages à l'aide de points de contrôleRestart Packages by Using Checkpoints

Integration ServicesIntegration Services peut redémarrer les packages ayant échoué à partir du point d'échec, au lieu de reprendre l'exécution du package tout entier. can restart failed packages from the point of failure, instead of rerunning the whole package. Si un package est configuré pour utiliser des points de contrôle, des informations sur l'exécution du package sont écrites dans un fichier de point de contrôle.If a package is configured to use checkpoints, information about package execution is written to a checkpoint file. Lorsque le package ayant échoué est relancé, le fichier de point de contrôle est utilisé pour redémarrer le package à partir du point d'échec.When the failed package is rerun, the checkpoint file is used to restart the package from the point of failure. Si le package est exécuté avec succès, le fichier de point de contrôle est supprimé, puis recréé à l’exécution suivante du package.If the package runs successfully, the checkpoint file is deleted, and then re-created the next time the package is run.

L'utilisation des points de contrôle dans un package offre les avantages suivants :Using checkpoints in a package can provide the following benefits.

  • Éviter de répéter le téléchargement ascendant et descendant de gros fichiers.Avoid repeating the downloading and uploading of large files. Par exemple, un package qui télécharge plusieurs gros fichiers à l'aide d'une tâche FTP pour chaque téléchargement peut être redémarré après l'échec du téléchargement d'un seul fichier, puis ne reprendre le téléchargement que pour ce fichier.For example, a package that downloads multiple large files by using an FTP task for each download can be restarted after the downloading of a single file fails and then download only that file.

  • Éviter de répéter le téléchargement de grands volumes de données.Avoid repeating the loading of large amounts of data. Par exemple, un package qui effectue des insertions en bloc dans des tables de dimension d'un entrepôt de données à l'aide d'une tâche d'insertion en bloc différente pour chaque dimension, peut être redémarré si l'insertion échoue pour une table de dimension, et ne recharger que cette dimension.For example, a package that performs bulk inserts into dimension tables in a data warehouse using a different Bulk Insert task for each dimension can be restarted if the insertion fails for one dimension table, and only that dimension will be reloaded.

  • Éviter de répéter l'agrégation de valeurs.Avoid repeating the aggregation of values. Par exemple, un package qui calcule de nombreux agrégats, tels que des moyennes et des sommes, à l'aide d'une tâche de flux de données distincte pour la réalisation de chaque agrégation, peut être redémarré en cas d'échec du calcul d'une agrégation pour ne recalculer que cette agrégation.For example, a package that computes many aggregates, such as averages and sums, using a separate Data Flow task to perform each aggregation, can be restarted after computing an aggregation fails and only that aggregation will be recomputed.

    Si un package est configuré pour utiliser les points de contrôle, Integration ServicesIntegration Services capture le point de redémarrage dans le fichier de point de contrôle.If a package is configured to use checkpoints, Integration ServicesIntegration Services captures the restart point in the checkpoint file. Le type de conteneur qui échoue et l'implémentation de fonctionnalités telles que les transactions affectent le point de redémarrage enregistré dans le fichier de point de contrôle.The type of container that fails and the implementation of features such as transactions affect the restart point that is recorded in the checkpoint file. Les valeurs actuelles des variables sont également capturées dans le fichier de point de contrôle.The current values of variables are also captured in the checkpoint file. Toutefois, les valeurs des variables de type de données Object ne sont pas enregistrées dans les fichiers de point de contrôle.However, the values of variables that have the Object data type are not saved in checkpoint files.

Définition des points de redémarrageDefining Restart Points

Le conteneur d'hôte de tâche, qui encapsule une seule tâche, est la plus petite unité atomique à pouvoir être redémarrée.The task host container, which encapsulates a single task, is the smallest atomic unit of work that can be restarted. Le conteneur de boucles Foreach et un conteneur transactionnel sont également traités comme des unités atomiques de travail.The Foreach Loop container and a transacted container are also treated as atomic units of work.

Si un package est arrêté alors qu'un conteneur transactionnel est en cours d'exécution, la transaction est arrêtée et tout travail effectué par le conteneur est annulé.If a package is stopped while a transacted container is running, the transaction ends and any work performed by the container is rolled back. Lorsque le package est redémarré, le conteneur qui a échoué est exécuté à nouveau.When the package is restarted, the container that failed is rerun. La réalisation de conteneurs enfants du conteneur transactionnel n'est pas enregistrée dans le fichier de point de contrôle.The completion of any child containers of transacted container is not recorded in the checkpoint file. Par conséquent, lorsque le package est redémarré, le conteneur transactionnel et ses conteneurs enfants sont exécutés à nouveau.Therefore, when the package is restarted, the transacted container and its child containers run again.

Note

L'utilisation de points de contrôle et de transactions dans le même package peut entraîner des résultats inattendus.Using checkpoints and transactions in the same package could cause unexpected results. Par exemple, lorsqu'un package échoue et redémarre à partir d'un point de contrôle, il peut répéter une transaction qui a déjà été correctement validée.For example, when a package fails and restarts from a checkpoint, the package might repeat a transaction that has already been successfully committed.

Les données de point de contrôle ne sont pas enregistrées pour les conteneurs de boucles For et Foreach.Checkpoint data is not saved for For Loop and Foreach Loop containers. Lorsqu'un package est redémarré, les conteneurs de boucles For et Foreach et les conteneurs enfants sont exécutés à nouveau.When a package is restarted, the For Loop and Foreach Loop containers and the child containers are run again. Si un conteneur enfant de la boucle est exécuté correctement, il n'est pas enregistré dans le fichier de point de contrôle et il est exécuté à nouveau.If a child container in the loop runs successfully, it is not recorded in the checkpoint file, instead it is rerun. Pour plus d'informations et pour obtenir une solution de contournement, consultez Les points de contrôle SSIS ne sont pas respectés pour les éléments de conteneur de boucles For ou Foreach.For more information and a workaround, see SSIS Checkpoints are not honored for For Loop or Foreach Loop container items.

Si le package est redémarré, les configurations du package ne sont pas rechargées, mais le package utilise les informations de configuration écrites dans le fichier de point de contrôle.If the package is restarted the package configurations are not reloaded, instead the package uses the configuration information written to the checkpoint file. Cette procédure assure que le package utilise les mêmes configurations lorsqu'il est exécuté à nouveau qu'au moment où il a échoué.This ensures that the package uses the same configurations when it is rerun as the time it failed.

Un package ne peut être redémarré qu'au niveau du flux de contrôle.A package can be restarted only at the control flow level. Vous ne pouvez pas redémarrer un package au milieu d'un flux de données.You cannot restart a package in the middle of a data flow. Pour éviter de réexécuter tout le flux de données, le package peut être conçu de manière à inclure plusieurs flux de données, utilisant chacun une tâche de flux de données différente.To avoid rerunning the whole data flow, the package might be designed to include multiple data flows, each one using a different Data Flow task. De cette manière, le package peut être redémarré en ne réexécutant qu'une seule tâche de flux de données.This way the package can be restarted, rerunning only one Data Flow task.

Configuration d'un package pour le redémarrageConfiguring a Package to Restart

Le fichier de point de contrôle comprend les résultats d'exécution de tous les conteneurs achevés, les valeurs actuelles des variables système et définies par l'utilisateur, ainsi que les informations de configuration du package.The checkpoint file includes the execution results of all completed containers, the current values of system and user-defined variables, and package configuration information. Le fichier peut également inclure un identificateur unique du package.The file also includes the unique identifier of the package. Pour redémarrer correctement le package, l'identificateur du package dans le fichier de point de contrôle doit correspondre au package. Dans le cas contraire, le redémarrage échoue.To successfully restart a package, the package identifier in the checkpoint file and the package must match; otherwise the restart fails. Cela empêche un package d'utiliser un fichier de point de contrôle écrit par une version de package différente.This prevents a package from using a checkpoint file written by a different package version. Si un package redémarre après avoir été exécuté correctement, le fichier de point de contrôle est supprimé.If the package runs successfully, after it is restarted the checkpoint file is deleted.

Le tableau suivant présente les propriétés de package que vous définissez pour implémenter les points de contrôle.The following table lists the package properties that you set to implement checkpoints.

PropriétéProperty DescriptionDescription
CheckpointFileNameCheckpointFileName Indique le nom du fichier de point de contrôle.Specifies the name of the checkpoint file.
CheckpointUsageCheckpointUsage Indique si les points de contrôle sont utilisés.Specifies whether checkpoints are used.
SaveCheckpointsSaveCheckpoints Indique si le package enregistre les points de contrôle.Indicates whether the package saves checkpoints. Cette propriété doit avoir pour valeur True pour redémarrer le package à partir d'un point d'échec.This property must be set to True to restart a package from a point of failure.

Vous pouvez également affecter la valeur true à la propriété FailPackageOnFailure pour tous les conteneurs du package que vous voulez identifier comme points de redémarrage.Additionally, you must set the FailPackageOnFailure property to true for all the containers in the package that you want to identify as restart points.

Vous pouvez utiliser la propriété ForceExecutionResult pour tester l’utilisation des points de contrôle dans un package.You can use the ForceExecutionResult property to test the use of checkpoints in a package. En affectant la valeur la valeur Failure à la propriété ForceExecutionResult d’une tâche ou d’un conteneur, vous pouvez imiter un échec en temps réel.By setting ForceExecutionResult of a task or container to Failure, you can imitate real-time failure. Lorsque vous redémarrez le package, la tâche et les conteneurs ayant échoué sont réexécutés.When you rerun the package, the failed task and containers will be rerun.

Utilisation des points de contrôleCheckpoint Usage

La propriété CheckpointUsage peut avoir les valeurs suivantes :The CheckpointUsage property can be set to the following values:

ValeurValue DescriptionDescription
NeverNever Spécifie que le fichier de point de contrôle n'est pas utilisé et que le package est exécuté à partir du début du flux de travail du package.Specifies that the checkpoint file is not used and that the package runs from the start of the package workflow.
AlwaysAlways Spécifie que le fichier de point de contrôle est toujours utilisé et que le package redémarre à partir du point de l'échec de la précédente exécution.Specifies that the checkpoint file is always used and that the package restarts from the point of the previous execution failure. Si le fichier de point de contrôle est introuvable, le package échoue.If the checkpoint file is not found, the package fails.
IfExistsIfExists Spécifie que le fichier de point de contrôle est utilisé s'il existe.Specifies that the checkpoint file is used if it exists. Si le fichier de point de contrôle existe, le package redémarre à partir du point de l'échec de la précédente exécution. Sinon il est exécuté à partir du début du flux de travail du package.If the checkpoint file exists, the package restarts from the point of the previous execution failure; otherwise, it runs from the start of the package workflow.

Note

L’option /CheckPointing on de dtexec revient à affecter la valeur True à la propriété SaveCheckpointsdu package et la valeur Always à la propriété CheckpointUsage .The /CheckPointing on option of dtexec is equivalent to setting the SaveCheckpoints property of the package to True, and the CheckpointUsage property to Always. Pour plus d’informations, voir dtexec Utility.For more information, see dtexec Utility.

Sécurisation des fichiers de point de contrôleSecuring Checkpoint Files

La protection au niveau du package n'inclut pas la protection des fichiers de point de contrôle ; vous devez donc sécuriser ces fichiers séparément.Package level protection does not include protection of checkpoint files and you must secure these files separately. Les données de point de contrôle peuvent être stockées uniquement dans le système de fichiers et vous devez utiliser une liste de contrôle d'accès au système d'exploitation pour sécuriser l'emplacement ou le dossier de stockage du fichier.Checkpoint data can be stored only in the file system and you should use an operating system access control list (ACL) to secure the location or folder where you store the file. Il est important de sécuriser les fichiers de point de contrôle car ceux-ci contiennent des informations sur l'état du package, notamment les valeurs actuelles des variables.It is important to secure checkpoint files because they contain information about the package state, including the current values of variables. Une variable peut ainsi contenir un ensemble d'enregistrements doté de plusieurs lignes de données privées, telles que des numéros de téléphone.For example, a variable may contain a recordset with many rows of private data such as telephone numbers. Pour plus d’informations, consultez Accéder aux fichiers utilisés par des packages.For more information, see Access to Files Used by Packages.

Configurer des points de contrôle pour redémarrer un package ayant échouéConfigure Checkpoints for Restarting a Failed Package

Vous pouvez configurer les packages Integration ServicesIntegration Services de sorte qu'ils redémarrent à partir d'un point d'arrêt au lieu de réexécuter l'ensemble du package. Pour ce faire, vous devez définir les propriétés des points de contrôle.You configure Integration ServicesIntegration Services packages to restart from a point of failure, instead of rerunning the entire package, by setting the properties that apply to checkpoints.

Pour configurer le redémarrage d'un packageTo configure a package to restart

  1. Dans Outils de données SQL Server (SSDT)SQL Server Data Tools (SSDT), ouvrez le projet Integration ServicesIntegration Services contenant le package à configurer.In Outils de données SQL Server (SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services project that contains the package you want to configure.

  2. Dans l’Explorateur de solutions, double-cliquez sur le package pour l’ouvrir.In Solution Explorer, double-click the package to open it.

  3. Cliquez sur l'onglet Flux de contrôle .Click the Control Flow tab.

  4. Cliquez avec le bouton droit n’importe où dans l’arrière-plan de la surface de dessin du flux de contrôle, puis cliquez sur Propriétés.Right-click anywhere in the background of the control flow design surface, and then click Properties.

  5. Définissez la propriété SaveCheckpoints sur True.Set the SaveCheckpoints property to True.

  6. Tapez le nom du fichier point de contrôle dans la propriété CheckpointFileName.Type the name of the checkpoint file in the CheckpointFileName property.

  7. Définissez la propriété CheckpointUsage sur l’une des deux valeurs suivantes :Set the CheckpointUsage property to one of two values:

    • Sélectionnez Always pour toujours redémarrer le package à partir du point d'arrêt.Select Always to always restart the package from the checkpoint.

      Important

      Une erreur se produit si le fichier de point d'arrêt n'est pas disponible.An error occurs if the checkpoint file is not available.

    • Sélectionnez IfExists pour redémarrer le package uniquement si le fichier de point d'arrêt est disponible.Select IfExists to restart the package only if the checkpoint file is available.

  8. Configurez les tâches et les conteneurs à partir desquels le package peut redémarrer.Configure the tasks and containers from which the package can restart.

    • Cliquez avec le bouton droit sur une tâche ou un conteneur, puis cliquez sur Propriétés.Right-click a task or container and click Properties.

    • Affectez à la propriété FailPackageOnFailure la valeur True pour chaque tâche et conteneur sélectionnés.Set the FailPackageOnFailure property to True for each selected task and container.

Ressources externesExternal Resources