使用SSIS在包失败时删除和恢复数据库

使用SSIS在包失败时删除和恢复数据库,ssis,Ssis,例如,假设我有一个SSIS包,其中包含20多个步骤,用于执行各种任务,当包失败时,我希望执行以下操作: 1.)删除数据库 2.)恢复开始时进行的备份 3.)发送包含日志文件的电子邮件 目前,我已将这些步骤添加到包级别的OnError事件中,这与包每次失败时通常会执行两次操作不同。我知道在整个包终止之前,OnError可能会出现多次,但我不知道如何以其他方式完成我想要的任务 我基本上希望在包终止时运行上述步骤,即根据导致包失败的错误数量,它将运行一次而不是几次。我不介意收到两封电子邮件,唯一的区别

例如,假设我有一个SSIS包,其中包含20多个步骤,用于执行各种任务,当包失败时,我希望执行以下操作:

1.)删除数据库

2.)恢复开始时进行的备份

3.)发送包含日志文件的电子邮件

目前,我已将这些步骤添加到包级别的
OnError
事件中,这与包每次失败时通常会执行两次操作不同。我知道在整个包终止之前,
OnError
可能会出现多次,但我不知道如何以其他方式完成我想要的任务


我基本上希望在包终止时运行上述步骤,即根据导致包失败的错误数量,它将运行一次而不是几次。我不介意收到两封电子邮件,唯一的区别是一封邮件中有一个额外的错误,但我认为毫无理由地删除/恢复数据库两次是不对的。我看不到适合此情况的事件?

一种解决方案是将包的所有步骤放在一个容器中,将OneError处理程序更改为递增ErrorCount变量,并在主容器完成时放置另一个容器,该容器检查ErrorCount并在当前OnError处理程序中执行操作(如果计数>0)。

您如何运行包?如果在SQL代理中,最简单的解决方案是创建一个T-SQL作业步骤,该步骤在包出现故障时运行。是的,它是由从文件系统提取DTSX的SQL代理调用的作业。由于我无法访问生产服务器,因此无法在包内部处理此问题,因此我尝试在包内部尽可能多地进行封装。