Riavvio dei pacchetti tramite checkpointRestart Packages by Using Checkpoints

Integration ServicesIntegration Services può riavviare i pacchetti non eseguiti correttamente a partire dal punto in cui si è verificato l'errore, invece di eseguire di nuovo l'intero pacchetto. can restart failed packages from the point of failure, instead of rerunning the whole package. Se un pacchetto è configurato per l'utilizzo di checkpoint, le informazioni sull'esecuzione del pacchetto vengono scritte in un file del checkpoint.If a package is configured to use checkpoints, information about package execution is written to a checkpoint file. Questo file viene quindi utilizzato per il riavvio di un pacchetto dal punto in cui si è verificato l'errore.When the failed package is rerun, the checkpoint file is used to restart the package from the point of failure. Se il pacchetto viene eseguito correttamente, il file del checkpoint viene eliminato e quindi creato nuovamente alla successiva esecuzione del pacchetto.If the package runs successfully, the checkpoint file is deleted, and then re-created the next time the package is run.

L'utilizzo di checkpoint in un pacchetto offre i vantaggi seguenti.Using checkpoints in a package can provide the following benefits.

  • Non è necessario caricare e scaricare nuovamente file di grandi dimensioni.Avoid repeating the downloading and uploading of large files. Un pacchetto che scarica più file di grandi dimensioni utilizzando un'attività FTP distinta per ogni download può ad esempio essere riavviato se il download di un singolo file ha esito negativo. È quindi sufficiente scaricare nuovamente solo questo file.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.

  • Non è necessario caricare nuovamente grandi quantità di dati.Avoid repeating the loading of large amounts of data. Un pacchetto che esegue inserimenti bulk in tabelle delle dimensioni di un data warehouse utilizzando un'attività Inserimento bulk distinta per ogni dimensione può ad esempio essere riavviato se l'inserimento ha esito negativo per una tabella della dimensioni. Verrà quindi caricata nuovamente solo tale dimensione.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.

  • Non è necessario ripetere l'aggregazione di valori.Avoid repeating the aggregation of values. Un pacchetto che calcola numerose aggregazioni, quali medie e somme, utilizzando un'attività Flusso di dati distinta per ogni aggregazione può ad esempio essere riavviato se il calcolo di un'aggregazione ha esito negativo. Verrà quindi ricalcolata solo tale aggregazione.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.

    Se un pacchetto è stato configurato per l'utilizzo di checkpoint, in Integration ServicesIntegration Services il punto di riavvio viene acquisito nel file del checkpoint.If a package is configured to use checkpoints, Integration ServicesIntegration Services captures the restart point in the checkpoint file. Il tipo di contenitore che ha esito negativo e l'implementazione di caratteristiche quali le transazioni influiscono sul punto di riavvio registrato nel file del checkpoint.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. Nel file del checkpoint vengono acquisiti anche i valori correnti delle variabili.The current values of variables are also captured in the checkpoint file. I valori delle variabili con tipo di dati Object , tuttavia, non vengono salvati nei file del checkpoint.However, the values of variables that have the Object data type are not saved in checkpoint files.

Definizione dei punti di riavvioDefining Restart Points

Il contenitore host delle attività, che incapsula una sola attività, corrisponde all'unità di lavoro atomica più piccola che può essere riavviata.The task host container, which encapsulates a single task, is the smallest atomic unit of work that can be restarted. Anche il contenitore Ciclo Foreach e un contenitore transazionale vengono considerati unità di lavoro atomiche.The Foreach Loop container and a transacted container are also treated as atomic units of work.

Se un pacchetto viene arrestato durante l'esecuzione di un contenitore transazionale, la transazione viene interrotta e viene eseguito il rollback del lavoro eseguito dal contenitore.If a package is stopped while a transacted container is running, the transaction ends and any work performed by the container is rolled back. Al riavvio del pacchetto il contenitore che ha avuto esito negativo viene riavviato.When the package is restarted, the container that failed is rerun. Il completamento di eventuali contenitori figlio del contenitore transazionale non viene registrato nel file del checkpoint.The completion of any child containers of transacted container is not recorded in the checkpoint file. Di conseguenza, al riavvio del pacchetto, il contenitore transazionale e i contenitori figlio vengono eseguiti di nuovo.Therefore, when the package is restarted, the transacted container and its child containers run again.

Nota

L'utilizzo di checkpoint e transazioni nello stesso pacchetto può provocare risultati imprevisti.Using checkpoints and transactions in the same package could cause unexpected results. È possibile, ad esempio, che un pacchetto che restituisce un errore e viene riavviato da un checkpoint ripeta una transazione di cui è già stato eseguito correttamente il commit.For example, when a package fails and restarts from a checkpoint, the package might repeat a transaction that has already been successfully committed.

I dati di checkpoint non vengono salvati per i contenitori Ciclo For e Foreach.Checkpoint data is not saved for For Loop and Foreach Loop containers. Al riavvio di un pacchetto, i contenitori Ciclo For e Foreach e i contenitori figlio vengono rieseguiti.When a package is restarted, the For Loop and Foreach Loop containers and the child containers are run again. Un contenitore figlio del ciclo eseguito correttamente non viene registrato nel file del checkpoint, ma rieseguito.If a child container in the loop runs successfully, it is not recorded in the checkpoint file, instead it is rerun. Per altre informazioni e per ottenere una soluzione, vedere SSIS Checkpoints are not honored for For Loop or Foreach Loop container items(Mancata applicazione dei checkpoint SSIS per gli elementi contenitori Ciclo For e Foreach).For more information and a workaround, see SSIS Checkpoints are not honored for For Loop or Foreach Loop container items.

Se il pacchetto viene riavviato, le configurazioni di pacchetto non vengono caricate nuovamente. Il pacchetto infatti utilizza le informazioni di configurazione scritte nel file del checkpoint.If the package is restarted the package configurations are not reloaded, instead the package uses the configuration information written to the checkpoint file. Ciò garantisce che per la riesecuzione di un pacchetto vengano utilizzate le configurazioni in uso quando il pacchetto ha avuto esito negativo.This ensures that the package uses the same configurations when it is rerun as the time it failed.

Un pacchetto può essere riavviato solo a livello del flusso di controllo,A package can be restarted only at the control flow level. Non è possibile riavviare un pacchetto all'interno di un flusso di dati.You cannot restart a package in the middle of a data flow. Per evitare la riesecuzione dell'intero flusso di dati, è possibile configurare il pacchetto in modo che includa più flussi di dati che utilizzano ognuno un'attività Flusso di dati distinta.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. Il tal modo il pacchetto può essere riavviato rieseguendo una sola attività Flusso di dati.This way the package can be restarted, rerunning only one Data Flow task.

Configurazione di un pacchetto per il riavvioConfiguring a Package to Restart

Il file del checkpoint include i risultati dell'esecuzione di tutti i contenitori completati, i valori correnti delle variabili definite dall'utente e di sistema e le informazioni sulla configurazione di pacchetto.The checkpoint file includes the execution results of all completed containers, the current values of system and user-defined variables, and package configuration information. Il file include inoltre l'identificatore univoco del pacchetto.The file also includes the unique identifier of the package. Un pacchetto viene riavviato correttamente se l'identificatore contenuto nel file del checkpoint corrisponde effettivamente al pacchetto.To successfully restart a package, the package identifier in the checkpoint file and the package must match; otherwise the restart fails. In questo modo, un pacchetto non è in grado di utilizzare un file del checkpoint scritto da una versione diversa del pacchetto.This prevents a package from using a checkpoint file written by a different package version. Se il pacchetto viene eseguito correttamente, dopo il suo riavvio il file del checkpoint viene eliminato.If the package runs successfully, after it is restarted the checkpoint file is deleted.

Nella tabella seguente sono elencate le proprietà del pacchetto che è possibile impostare per implementare i checkpoint.The following table lists the package properties that you set to implement checkpoints.

ProprietàProperty DescriptionDescription
CheckpointFileNameCheckpointFileName Specifica il nome del file del checkpoint.Specifies the name of the checkpoint file.
CheckpointUsageCheckpointUsage Specifica se i checkpoint vengono utilizzati.Specifies whether checkpoints are used.
SaveCheckpointsSaveCheckpoints Indica se il pacchetto salva i checkpoint.Indicates whether the package saves checkpoints. Questa proprietà deve essere impostata su True per consentire il riavvio di un pacchetto da un punto di errore.This property must be set to True to restart a package from a point of failure.

È anche necessario impostare la proprietà FailPackageOnFailure su true per tutti i contenitori del pacchetto da identificare come punti di riavvio.Additionally, you must set the FailPackageOnFailure property to true for all the containers in the package that you want to identify as restart points.

La proprietà ForceExecutionResult consente di testare l'uso dei checkpoint in un pacchetto.You can use the ForceExecutionResult property to test the use of checkpoints in a package. Se si imposta la proprietà ForceExecutionResult di un'attività o di un contenitore su Failure, è possibile riprodurre l'errore in tempo reale.By setting ForceExecutionResult of a task or container to Failure, you can imitate real-time failure. Quando si esegue di nuovo il pacchetto, l'attività e i contenitori che hanno avuto esito negativo vengono eseguiti nuovamente.When you rerun the package, the failed task and containers will be rerun.

Utilizzo dei checkpointCheckpoint Usage

I possibili valori della proprietà ForceExecutionResult sono i seguenti:The CheckpointUsage property can be set to the following values:

ValoreValue DescriptionDescription
NeverNever Specifica che il file del checkpoint non viene utilizzato e che il pacchetto viene eseguito dall'inizio del flusso di lavoro.Specifies that the checkpoint file is not used and that the package runs from the start of the package workflow.
AlwaysAlways Specifica che il file del checkpoint viene sempre utilizzato e che il pacchetto viene riavviato a partire dal punto in cui si è verificato l'errore.Specifies that the checkpoint file is always used and that the package restarts from the point of the previous execution failure. Se il file del checkpoint non viene individuato, il pacchetto ha esito negativo.If the checkpoint file is not found, the package fails.
IfExistsIfExists Specifica che il file del checkpoint viene utilizzato, se disponibile.Specifies that the checkpoint file is used if it exists. Se il file del checkpoint è disponibile, il pacchetto viene riavviato a partire dal punto in cui si è verificato l'errore. In caso contrario, viene eseguito dall'inizio del flusso di lavoro.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.

Nota

L'opzione /CheckPointing on di dtexec equivale a impostare la proprietà SaveCheckpoints del pacchetto su Truee la proprietà CheckpointUsage su Always.The /CheckPointing on option of dtexec is equivalent to setting the SaveCheckpoints property of the package to True, and the CheckpointUsage property to Always. Per altre informazioni, vedere dtexec Utility.For more information, see dtexec Utility.

Sicurezza dei file del checkpointSecuring Checkpoint Files

Poiché la protezione a livello di pacchetto non include la protezione dei file del checkpoint, è necessario proteggere tali file separatamente.Package level protection does not include protection of checkpoint files and you must secure these files separately. I dati di checkpoint possono essere archiviati esclusivamente nel file system ed è necessario utilizzare un elenco di controllo di accesso (ACL) del sistema operativo per proteggere il percorso o la cartella in cui è archiviato il file.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. È importante proteggere i file del checkpoint perché contengono informazioni sullo stato del pacchetto, inclusi i valori correnti delle variabili.It is important to secure checkpoint files because they contain information about the package state, including the current values of variables. Un variabile può ad esempio contenere un recordset con numerose righe di dati privati, quali numeri di telefono.For example, a variable may contain a recordset with many rows of private data such as telephone numbers. Per altre informazioni, vedere Accedere ai file usati dai pacchetti.For more information, see Access to Files Used by Packages.

Configurazione dei checkpoint per il riavvio di un pacchetto non riuscitoConfigure Checkpoints for Restarting a Failed Package

Impostando le proprietà relative ai checkpoint, è possibile configurare i pacchetti di Integration ServicesIntegration Services in modo che vengano riavviati dal momento dell'errore, anziché essere eseguiti nuovamente dall'inizio.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.

Per configurare un pacchetto per il riavvioTo configure a package to restart

  1. In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT)aprire il progetto di Integration ServicesIntegration Services contenente il pacchetto che si desidera configurare.In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services project that contains the package you want to configure.

  2. In Esplora soluzionifare doppio clic sul pacchetto per aprirlo.In Solution Explorer, double-click the package to open it.

  3. Fare clic sulla scheda Flusso di controllo .Click the Control Flow tab.

  4. Fare clic con il pulsante destro del mouse in un punto qualsiasi dello sfondo dell'area di progettazione del flusso di controllo, quindi scegliere Proprietà.Right-click anywhere in the background of the control flow design surface, and then click Properties.

  5. Impostare la proprietà SaveCheckpoints su True.Set the SaveCheckpoints property to True.

  6. Digitare il nome del file del checkpoint nella proprietà CheckpointFileName.Type the name of the checkpoint file in the CheckpointFileName property.

  7. Impostare la proprietà CheckpointUsage su uno dei due valori seguenti:Set the CheckpointUsage property to one of two values:

    • Selezionare Always per riavviare sempre il pacchetto dal checkpoint.Select Always to always restart the package from the checkpoint.

      Importante

      Se il file del checkpoint non è disponibile, viene generato un errore.An error occurs if the checkpoint file is not available.

    • Selezionare IfExists per riavviare il pacchetto solo se il file del checkpoint è disponibile.Select IfExists to restart the package only if the checkpoint file is available.

  8. Configurare le attività e i contenitori da cui è possibile riavviare il pacchetto.Configure the tasks and containers from which the package can restart.

    • Fare clic con il pulsante destro del mouse su un'attività o un contenitore, quindi scegliere Proprietà.Right-click a task or container and click Properties.

    • Impostare la proprietà FailPackageOnFailure su True per ogni attività e contenitore selezionati.Set the FailPackageOnFailure property to True for each selected task and container.

Risorse esterneExternal Resources