我们计划不在 SSIS 中使用 MSDTC 进行事务管理,而是希望通过 Begin transaction 和 commit transaction 使用本地 trsnactions。从设计角度来看,除了一个问题之外似乎还可以。当 SSIS 包在任何任务中失败时,我们有一个错误事件处理程序,它将记录插入到错误表中。所以现在发生的事情是,当 SSIS 回滚事务时,它也在回滚错误处理例程。但我不确定如何精细控制这一点,因为嵌套事务不会工作,因为我在包执行开始时启动事务。
有什么想法吗?
我们计划不在 SSIS 中使用 MSDTC 进行事务管理,而是希望通过 Begin transaction 和 commit transaction 使用本地 trsnactions。从设计角度来看,除了一个问题之外似乎还可以。当 SSIS 包在任何任务中失败时,我们有一个错误事件处理程序,它将记录插入到错误表中。所以现在发生的事情是,当 SSIS 回滚事务时,它也在回滚错误处理例程。但我不确定如何精细控制这一点,因为嵌套事务不会工作,因为我在包执行开始时启动事务。
有什么想法吗?
这是MSDN 上的一篇文章,解释了如何将 TRY-CATCH 块与支持错误处理的 TRANSACTION COMMITT 一起使用。
关于您对嵌套事务的评论,它们实际上并不存在于 SQL Server 中。请参阅Paul Randal 的这篇博文。
我切换到 MSDTC 来处理 SSIS 中的这些事务和错误处理。这种新方法非常干净,只需将 SSIS 中的相关流标记为需要或不需要 txn 即可。我将错误处理例程标记为“不支持 txn”,因为我不希望它在出现错误时回滚。现在一切看起来都很好,除了我们案例中的基础设施开销,因为我们将解决方案捆绑到各个客户端工作站。
非常感谢