SSIS - Manipulando Eventos com "OnError" ou "OnTaskFailed"
Introdução
Existem muitos "eventos" que podemos utilizar de durante a execução do um Pacote do SQL Server Integration Servives (SSIS). Entre todos os eventos disponíveis, podemos destacar dois que são muito importantes para registrar os erros personalizados. Através da execução destes eventos, podemos verificar com precisão à ocorrência de falhas ou erros em uma ou mais das tarefas de nosso Pacote.
Podemos obrigar o registro de tais erros, uma vez que o fracasso do Pacote (em parte ou completo) possa causar perda de dados ou falha de um processo importante da manutenção de nosso(s) banco(s) de dados.
Dependendo da criticidade do processamento do Pacote SSIS é necessário habilitar um evento para identificação da Falha ou do Erro, com detalhes sobre como ocorreu e, preferencialmente, identificando à tarefa e acrescentando algumas variáveis que possam ajudar o desenvolvedor à reproduzir o problema para encontrar à solução adequada com rapidez. Em alguns casos, como no processamento de arquivos (importação ou exportação de dados) pode ser também necessário à execução de alguma tarefa adicional para evitar que uma das tarefas impossibilite o processamento de outros arquivos.
Diferença entre os Eventos
Aparentemente um evento de Falha pode ser semelhante ao evento de Erro, mas há uma diferença importante entre os dois que é o contexto onde o evento é disparado.
Nós temos a opção de fazer isso para cada uma das tarefas que falharam ou então apenas disparar o erro para todo Pacote. Então, dependendo dos seus requisitos e também da necessidade de obter informações sobre uma ou mais Variáveis de Sistema ou do Pacote(user-defined variable) podemos optar pelo evento OnTaskFailed ou pelo evento OnError.
Para executar estes dois eventos sem gerar falhas ou erros durante à validação das tarefas criadas no Pacote, ou seja antes do Pacote ser executado, então à propriedade do Pacote ou das tarefas que necessitam ser executadas devem ser marcadas com a propriedade "DelayValidation" com o valor igual a "True".
See this Properties window in the image below
![]() |
---|
Validar um Pacote ou suas Tarefas antes de executar é uma boa maneira de localizar erros, porém ele aumenta o processamento do Pacote podendo dobrar seu tempo de execução. É recomendado que a propriedade DelayValidation seja modificada apenas quando necessário e em Tarefas específicas. |
Vamos ver estes dois tipos de manipuladores de eventos do SSIS.
OnError
Este evento é gerado quando um executável recebe um ou mais erros devido à um problema dentro do Pacote ou por um motivo qualquer dentro dos objetos relacionados para manipulação dos dados.
Apesar da abrangência da ação deste evento ser maior, onde o desenvolvedor SSIS poderá aplicar um tratamento de erro comum para todo Pacote, às Variáveis de Sistema podem exibir dados genéricos, não permitindo a exatidão da causa do problema.
Desta forma, podemos afirmar que possíveis problemas que não são esperados para tratamento de erros podem exigir um maior trabalho do desenvolvedor SSIS para identificar o erro e aplicar o tratamento de erro adequado para futuras utilizações do Pacote.
Para habilitar este evento de "erro", basta selecionar qualquer uma das Tarefas incluídas no Pacote e clicar na guia "Event Handler" do seu Pacote SSIS.
See this Event Handler in the image below
Os erros apresentados neste evento também podem ser relacionados para mais do que um Pacote ou componente utilizado, assim o evento "OnError" poderá ser executado várias vezes, uma para cada erro ocorrido dentro do Pacote. Com isto, o desenvolvedor SSIS precisa ter consciência que às Tarefas adicionadas neste evento precisam ser bem específicas para evitar que o Pacote execute novos erros, encerrando seu processamento antecipadamente.
OnTaskFailed
Este evento é gerado apenas uma vez quando uma tarefa "falha", independentemente se a falha ocorre no contexto do Pacote ou apenas na Tarefa em execução.
See this Event Handler in the image below
Este evento será executado por cada tarefa envolvida nesse Pacote. Podemos verificar isso habilitando em uma determinada Tarefa o manipulador de eventos "OnTaskFailed".
Com este evento habilitado, podemos exibir e retornar para outras tarefas de Tratamento de Dados ou de Log do seu Pacote SSIS, por exemplo, à origem da falha usando a variável de sistema chamada "SourceName" (Veja à imagem abaixo).
Para isso, precisamos acessar às propriedades da Tarefa e selecionar à guia "Parameter Mapping".
Após acessar esta guia, então é possivel adicionar uma variável global (que fica disponível para todo Pacote) como "Parameter" para assim poder receber o nome da Tarefa com o problema.
Existem outras diversas Variáveis de Sistema disponíveis para obter dados importantes de seu ambiente e também relacionadas às configurações do Pacote SSIS. Verifique às informações necessárias para detalhar às condições de execução do seu Pacote no momento da Falha para que seja possível reproduzir com exatidão o problema. Com todas às informações desejadas sendo retornadas para uma outra Tarefa, como um envio de e-mail ou uma inclusão em uma tabela de Log, então é possível verificar com eficiência o problema e implementar o tratamento adequado para seus dados(por exemplo: conversão de tipo de dados) ou para à fonte de dados utilizada (por exemplo: mover um arquivo com problema para outro diretório).
See this Task window in the image below (click to enlarge)
Conclusão
É importante conhecer às diferenças de comportamento entre estes eventos de Erro e Falha para que o desenvolvedor SSIS possa aproveitar ao máximo os recursos disponíveis no seu Pacote e também no ambiente que pretende manipular dados, seja ele um banco de dados SQL Server ou uma fonte de dados externa, como um arquivo Excel (.xls ou .xlsx), Texto Tabulado ou com Separador (.txt ou .csv) ou até mesmo em um banco de dados de outro Relational Database Management System (RDBMS).
Definir as possíveis Falhas ou Problemas que podem ocorrer em um Pacote SSIS permite tornar todo processo de integração de dados mais rápido e auto-suficiente.
A maioria dos problemas podem ser resolvidos se o desenvolvedor SSIS compreender os conceitos de cada um destes eventos e aplicar o tratamento de seus dados de forma adequada para cada situação identificada nestes eventos que podem ser armazenados em um Log ou enviados por e-mail para um ou mais responsáveis pela integração de dados.
Referências
- Manipuladores de eventos do Integration Services
- Add an Event Handler to a Package
- DtsContainer.DelayValidation Property
- Blog MSDN - SSIS - How do I log to multiple locations?
Veja Também
- Automatic Restart of SSIS packages after Failover or Failure
- Send email from Event Handler in SSIS
- SQL Server Integration Services Portal