【问题标题】:Transaction Propagation in SSIS PackagesSSIS 包中的事务传播
【发布时间】:2012-07-30 16:12:31
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: transactions ssis


    【解决方案1】:

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

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

    如果 MSDTC 出于某种原因无法为您工作,那么您需要将连接管理器设置为 RetainSameConnection 并将开始传输/提交/回滚逻辑添加到您的包中参见 SSIS: Default Logging OnError don't work with RetainSameConnection 以获取示例,但这将在所有任务都在同一个数据库中执行时才起作用。

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

    【讨论】:

      猜你喜欢
      • 2014-09-03
      • 1970-01-01
      • 2017-11-22
      • 2014-06-22
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多