SSIS包中的事务传播

时间:2012-07-30 16:12:32

标签: transactions ssis

以下是SSIS包中控制流程执行的任务列表

  1. 使用“执行SQL任务”
  2. 从表中删除数据
  3. 使用“数据流任务”
  4. 从txt文件中读取数据并将数据加载到表中
  5. 使用“执行SQL任务”
  6. 从表中删除一些行(基于业务逻辑)
  7. 使用“执行SQL任务”
  8. 更新表中的某些行(基于业务逻辑)

    我的疑问是,如果步骤4中出现错误,SSIS会自动回滚到步骤1之前的状态吗?

    任何人都可以帮助我朝正确的方向发展吗?任何帮助表示赞赏。

    谢谢!

1 个答案:

答案 0 :(得分:3)

一般来说,每项任务都是原子的。任务4将会或不会完成,不会发生半场措施。如果您需要整个软件包成功/失败,那么您需要对其进行配置。

最简单的选择是对包使用内置事务选项。这使用Microsoft分布式事务处理协调器(MSDTC)来处理各种服务器之间的事务。在您的包中,右键单击您的控制流的背景,并将TransactionOption从Supported更改为Required更多详细信息,了解所有相关信息的工作原理。 How do I run multiple data flow tasks in parallel within the same transaction?

如果MSDTC由于某种原因无法为您工作,那么您需要将连接管理器设置为RetainSameConnection并在您的包中添加begin tran / commit / rollback逻辑请参阅SSIS: Default Logging OnError don't work with RetainSameConnection以获取示例但如果所有任务都在同一个数据库中执行,那么才能工作。

如果MSDTC不起作用并且您将修改多个数据库中的数据,那么您将需要编写自己的“回滚”脚本并在OnError / OnTaskFailed事件或您的错误分支中触发它们。控制流。当您发布更新和删除时,需要在您能够撤消这些操作之前实施更改数据捕获机制。