Reiniciar pacotes usando pontos de verificação

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

Os Serviços de Integração podem reiniciar pacotes falhados a partir do ponto de falha, em vez de reexecutar o pacote completo. Se um pacote estiver configurado para usar checkpoints, a informação sobre a execução do pacote é escrita num ficheiro checkpoint. Quando o pacote falhado é reexecutado, o ficheiro checkpoint é usado para reiniciar o pacote a partir do ponto de falha. Se o pacote for executado com sucesso, o ficheiro checkpoint é eliminado e depois recriado na próxima execução do pacote.

Utilizar pontos de controlo num pacote pode proporcionar os seguintes benefícios.

  • Evite repetir o download e o carregamento de ficheiros grandes. Por exemplo, um pacote que descarrega vários ficheiros grandes usando uma tarefa FTP para cada download pode ser reiniciado após falhar o download de um único ficheiro e depois descarregar apenas esse ficheiro.

  • Evite repetir o carregamento de grandes quantidades de dados. Por exemplo, um pacote que realiza inserções em massa em tabelas de dimensões num data warehouse usando uma tarefa Bulk Insert diferente para cada dimensão pode ser reiniciado se a inserção falhar para uma tabela de dimensão, e apenas essa dimensão será recarregada.

  • Evite repetir a agregação de valores. Por exemplo, um pacote que calcula muitos agregados, como médias e somas, usando uma tarefa separada de Fluxo de Dados para realizar cada agregação, pode ser reiniciado após falhar o cálculo de uma agregação e só essa agregação será recalculada.

Se um pacote estiver configurado para utilizar pontos de verificação, o Integration Services regista o ponto de reinício no ficheiro de ponto de verificação. O tipo de contentor que falha e a implementação de características como transações afetam o ponto de reinício registado no ficheiro de ponto de controlo. Os valores atuais das variáveis também ficam guardados no ficheiro de ponto de controlo. No entanto, os valores das variáveis que têm o tipo de dados Objeto não são guardados em ficheiros de checkpoint.

Definição dos Pontos de Reinício

O contentor anfitrião da tarefa, que encapsula uma única tarefa, é a menor unidade atómica de trabalho que pode ser reiniciada. O contentor Foreach Loop e um contentor transacionado são igualmente tratados como unidades atómicas de trabalho.

Se um pacote for parado enquanto um contentor transacionado está a funcionar, a transação termina e qualquer trabalho realizado pelo contentor é revertido. Quando o pacote é reiniciado, o contentor que falhou é reexecutado. A conclusão de quaisquer contentores filho do contentor transacionado não é registada no ficheiro de ponto de controlo. Portanto, quando o pacote é reiniciado, o contentor transacionado e os seus contentores filhos voltam a ser executados.

Note

Usar checkpoints e transações no mesmo pacote pode causar resultados inesperados. Por exemplo, quando um pacote falha e reinicia a partir de um checkpoint, o pacote pode repetir uma transação que já foi confirmada com sucesso.

Os dados do checkpoint não são guardados para os contentores For Loop e Foreach Loop. Quando um pacote é reiniciado, os contentores For Loop e Foreach Loop e os contentores filhos são executados novamente. Se um contentor filho no ciclo for executado com êxito, não é registado no ficheiro de ponto de verificação, sendo, em vez disso, executado novamente. Para mais informações e uma solução alternativa, consulte Os pontos de verificação do SSIS não são aplicados a itens do contentor For Loop ou Foreach Loop.

Se o pacote for reiniciado, as configurações do pacote não são recarregadas; em vez disso, o pacote utiliza a informação de configuração escrita no ficheiro do checkpoint. Isto garante que o pacote usa as mesmas configurações quando é reexecutado que no momento em que falhou.

Um pacote só pode ser reiniciado ao nível do fluxo de controlo. Não se pode reiniciar um pacote no meio de um fluxo de dados. Para evitar a repetição de todo o data flow, o pacote pode ser desenhado para incluir múltiplos fluxos de dados, cada um usando uma tarefa diferente de Fluxo de Dados. Desta forma, o pacote pode ser reiniciado, reexecutando apenas uma tarefa do Fluxo de Dados.

Configurar um Pacote para Reiniciar

O ficheiro de checkpoint inclui os resultados de execução de todos os contentores concluídos, os valores atuais das variáveis definidas pelo sistema e pelo utilizador, e informações de configuração de pacotes. O ficheiro inclui também o identificador único do pacote. Para reiniciar com sucesso um pacote, o identificador do pacote no ficheiro checkpoint e o pacote devem coincidir; caso contrário, o reinício falha. Isto impede que um pacote utilize um ficheiro checkpoint escrito por uma versão diferente do pacote. Se o pacote for executado com êxito, o ficheiro de ponto de verificação é eliminado após ser reiniciado.

A tabela seguinte lista as propriedades do pacote que configura para implementar pontos de verificação.

Property Description
CheckpointFileName Especifica o nome do ficheiro do ponto de controlo.
Utilização de pontos de controlo Especifica se são usados pontos de controlo.
Guardar pontos de verificação Indica se o pacote guarda pontos de controlo. Esta propriedade deve ser definida como True para reiniciar um pacote a partir do ponto em que ocorreu a falha.

Além disso, deve definir a propriedade FailPackageOnFailure para true para todos os contentores do pacote que pretende identificar como pontos de reinício.

Podes usar a propriedade ForceExecutionResult para testar o uso de checkpoints num pacote. Ao definir o ForceExecutionResult de uma tarefa ou contentor como Failure, pode simular uma falha em tempo real. Quando reexecutas o pacote, a tarefa e os contentores falhados serão reexecutados.

Utilização dos Pontos de Controlo

A propriedade CheckpointUsage pode ser definida para os seguintes valores:

Valor Description
Nunca Especifica que o ficheiro checkpoint não é usado e que o pacote corre desde o início do fluxo de trabalho do pacote.
Sempre Especifica que o ficheiro checkpoint é sempre usado e que o pacote reinicia a partir do ponto da falha de execução anterior. Se o ficheiro do checkpoint não for encontrado, o pacote falha.
IfExists Especifica que o ficheiro de ponto de verificação é usado se existir. Se o ficheiro checkpoint existir, o pacote reinicia a partir do ponto da falha de execução anterior; caso contrário, corre desde o início do fluxo de trabalho do pacote.

Note

A opção /CheckPointing on do dtexec equivale a definir a propriedade SaveCheckpoints do pacote como True e a propriedade CheckpointUsage como Always. Para obter mais informações, consulte dtexec Utility.

Proteger os ficheiros de checkpoint

A proteção ao nível do pacote não inclui a proteção dos ficheiros de ponto de verificação e deve proteger estes ficheiros separadamente. Os dados dos pontos de verificação só podem ser armazenados no sistema de ficheiros e deve utilizar uma lista de controlo de acesso (ACL) do sistema operativo para proteger o local ou a pasta onde armazena o ficheiro. É importante proteger os ficheiros de checkpoint porque contêm informação sobre o estado do pacote, incluindo os valores atuais das variáveis. Por exemplo, uma variável pode conter um conjunto de registos com muitas linhas de dados privados, como números de telefone. Para obter mais informações, consulte Acesso a arquivos usados por pacotes.

Configurar pontos de verificação para reiniciar um pacote com falha

Configura os pacotes de Serviços de Integração para reiniciarem a partir de um ponto de falha, em vez de reexecutar o pacote todo, definindo as propriedades que se aplicam aos pontos de controlo.

Para configurar um pacote para reiniciar

  1. No SSDT (SQL Server Data Tools), abra o projeto Integration Services que contém o pacote que você deseja configurar.

  2. No Explorador de Soluções, clique duas vezes no pacote para o abrir.

  3. Clique na guia Fluxo de controle .

  4. Clique com o botão direito do mouse em qualquer lugar no plano de fundo da superfície de design do fluxo de controle e clique em Propriedades.

  5. Defina a propriedade SaveCheckpoints para True.

  6. Introduza o nome do ficheiro de ponto de verificação na propriedade CheckpointFileName.

  7. Defina a propriedade CheckpointUsage para um de dois valores:

    • Selecione Sempre para reiniciar sempre o pacote a partir do ponto de controlo.

      Importante

      Ocorre um erro se o ficheiro de checkpoint não estiver disponível.

    • Selecione IfExists para reiniciar o pacote apenas se o ficheiro checkpoint estiver disponível.

  8. Configure as tarefas e os contentores a partir dos quais o pacote pode reiniciar.

    • Clique com o botão direito numa tarefa ou contentor e clique em Propriedades.

    • Defina a propriedade FailPackageOnFailure para True para cada tarefa e contentor selecionados.