0

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

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

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

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

谢谢!

4

1 回答 1

3

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

最简单的选择是使用包的内置事务选项。这使用 Microsoft 分布式事务协调器 (MSDTC) 来处理跨各种服务器的事务。在您的程序包中,右键单击控制流的背景并将 TransactionOption 从更改SupportedRequiredMore details about how all that works over on How do I run multiple data flow tasks in parallel in the same transaction?

如果 MSDTC 出于某种原因对您不起作用,那么您需要将连接管理器设置为 RetainSameConnection 并将开始 tran/commit/rollback 逻辑添加到您的包中请参阅SSIS:默认日志记录 OnError 不适用于RetainSameConnection一个示例,但当所有任务都在同一个数据库中执行时才有效。

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

于 2012-07-30T17:00:04.193 回答