SSIS包中的事务传播



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

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

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

有人能帮我朝正确的方向走吗?感谢您的帮助。

谢谢!

一般来说,每个任务都是原子任务。任务4将完成或不会完成,不会半途而废。如果您需要包作为一个整体成功/失败,那么您需要将其配置为这样。

最简单的选择是对包使用内置事务选项。这使用Microsoft分布式事务协调器(MSDTC)来处理各种服务器之间的事务。在您的包中,右键单击控制流的背景,并将TransactionOption从Supported更改为Required有关所有操作的详细信息如何在同一事务中并行运行多个数据流任务?

如果MSDTC由于任何原因不适合您,那么您需要将连接管理器设置为RetainSameConnection,并在包中添加开始传输/提交/回滚逻辑请参阅SSIS:Default Logging OnError don';例如,不使用RetainSameConnection,但如果所有任务都在同一数据库中执行,则有效。

如果MSDTC不起作用,并且您将修改多个数据库中的数据,那么您需要编写自己的"回滚"脚本,并在控制流中的OnError/OnTaskFailed事件或Error分支中激发它们。在发布更新和删除时,需要先实现更改数据捕获机制,然后才能撤消这些操作。

最新更新