首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSIS中的显式事务声明会导致“双”回滚异常

SSIS中的显式事务声明会导致“双”回滚异常
EN

Stack Overflow用户
提问于 2016-06-23 12:32:53
回答 1查看 172关注 0票数 0

使用SSIS,这是我的控制流

但是这里有一个陷阱:当序列容器中发生异常,流转到失败路由时,我在回滚事务上得到一个错误,告诉我事务已经回滚了。

以下是关键信息:

  • 我在我的两个连接管理器上使用RetainSameConnection=True (由不同的数据流使用)。这不是一个分布式事务,其中一个连接纯粹是为了读取目的。
  • 我有一个事件处理程序,它在序列容器上传播到false集。
  • 所有事务选项都设置为“支持”。
  • 我的事务被显式声明(开始、提交和回滚)。

似乎我的事务被注册到一个分布式事务(DTC)中,并由序列容器回滚,所以当我试图自己回滚它时,它会生成第二个异常,整个包失败了。

我无法在本地机器上重现这个问题,只有在prod环境下。有谁知道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-27 12:18:04

对这一问题的部分回答/解决办法是:

  • 事务在SQL异常(例如:重复键等)上自动回滚。它被宣布为艰难的事件。因此,只有在发生其他异常时才使用流的回滚部分。

我们如何管理这种行为?

  • 在回滚事务之前,我们必须使用一些特定于数据库的命令(在我的例子中是SQLServer)来验证我们是否还在事务中,否则我们将得到一个异常,试图回滚一个不存在的事务。

下面是我的例子中的代码:

代码语言:javascript
复制
    IF @@TRANCOUNT > 0               
         Rollback Transaction TX_NAME;

希望有一天它能帮到某人;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37991729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档