【问题标题】:How to Rollback Transaction SSIS without MSDTC?如何在没有 MSDTC 的情况下回滚事务 SSIS?
【发布时间】:2018-11-01 18:43:43
【问题描述】:

第一个。)

我有一个序列容器。 它有 4 个不同的执行 sql 任务和 4 个不同的 DFT,其中数据插入到不同的表中。 我想在包失败时使用或不使用 MSDTC 服务来实现事务,即每个数据都应该在任何 DFT 失败或执行 SQL 任务时回滚。 如何实施?当我尝试使用 MSDTC 服务实现时,我收到“OLEDB 连接”错误,并且没有 MSDTC 数据被插入,只有最后一个执行 Sql 任务被回滚。如何在 ssis 2017 上实现这一点?

第二)

当我尝试不使用 MSDTC 时,将 ServerConnection RetainSameConnection 的属性设置为 TRUE,并为开始事务和提交执行了另外两个执行 sql 任务。我遇到了事件处理程序的问题,即我无法将错误记录到不同的表中。尝试操作时,回滚正在工作或事件处理程序。 一旦发生错误,控件就会转到事件处理程序,然后回滚所有事情,包括事件处理程序中的任务

第三)

序列容器用于并行执行任务。因此,这 4 个任务中的特定任务失败了,只有特定任务回滚休息 SQL 任务是将数据插入表中。

提前致谢!! ;-)

【问题讨论】:

  • 当我尝试使用 MSDTC 服务实现时...告诉我们你做了什么。
  • 您是否从同一数据库/SQL Server 中的表中选择/插入?如果是这样,请在脚本/存储过程中完成所有操作。
  • @Jaideb:当序列容器执行时,任何内部对象都失败了!!那么序列容器本身给出“成功”标记?还是右上角的“错误”?

标签: sql-server visual-studio-2017 sql-server-data-tools ssms-2017 ssis-2017


【解决方案1】:

我使用的一个选项(没有 MSDTC)是将您的 OLEDB 连接配置为 RetainSameConnection=True (通过属性窗口)

然后在您的序列容器之前开始一个事务并在之后提交(都共享同一个 OLEDB 连接。

效果很好,而且很容易实现。

【讨论】:

    【解决方案2】:

    根据我的场景: 我使用了一个序列容器(其中包含不同的 DFT 和任务),并且又执行了 3 个执行 sql 任务:

    1st Begin Transaction T1(在序列容器之前)

    第二次提交事务T1(在序列容器之后)

    第三个回滚事务T1(在序列容器之后)优先为失败,即只有当序列容器失败时,包含回滚操作的Execute Sql任务才会执行。

    注意:我尝试以这种方式回滚,但只插入了当前执行的 sql 任务,即最接近它的正在回滚的其余数据被插入。那么解决方案是什么?在同一个执行 sql 任务中,我截断了插入行的表。因此,当序列容器失败时,执行 sql 任务将截断相应表中的所有数据。 (回滚事务T1 go truncate table Table_name1 go truncate table table_name2 go truncate table table_name3)

    *重要提示:***要使上述操作正常工作,请确保在连接管理器属性中将 **RetainSameConnection 设置为 True,默认为 false。

    现在,为了将错误记录到用户定义的表中,我们使用事件处理程序。所以场景是,当序列容器失败时,所有内容都会回滚,包括事件处理程序中执行 sql 任务中使用的表。那么解决办法是什么?

    当您不使用 SSIS 事务属性时,默认情况下每个任务都将属性设置为支持。事件处理程序中的 Execute sql 任务也具有与 支持 相同的属性,因此它遵循相同的事务。要使事件处理程序正常工作,请更改 Execute Sql 任务的连接,即采用不同的连接并将其 TransactionProperty 设置为 NotSupported。因此,它不会遵循相同的事务,并且当发生任何错误时,它会将错误记录到表中。

    注意:我们使用序列容器来并行执行任务。如果呢?错误发生在任何任务的序列容器内,并且任务不允许序列容器失败。在这种情况下,串行连接所有任务。是的,这对序列容器没有意义。我找到了我的解决方案那样。

    希望对大家有所帮助! ;-)

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多