我有一个非常简单的 SSIS 包,只是数据导入和执行 SQL 任务。如果包的任何部分失败,我想回滚所有内容,因此我将这些任务放入序列容器中,并将序列容器 TransactionOption 属性设置为“必需”,并将 FailPackageonFailure 属性设置为“True”。当我针对本地数据库时,这工作得很好。但是,当我尝试将 OLE DB 连接更改为远程服务器时,上述属性设置会导致包挂起并最终失败,并显示“无法获取连接”消息。我在网上看到过对此问题的类似描述,但建议始终检查连接。但是我知道连接很好,因为当我将 TransactionOption 属性更改回默认的“支持”时,包运行良好。
有谁知道为什么会发生这种情况?我假设它与我尝试连接的服务器上的不同设置有关。如果包的任何部分失败,是否有人知道确保完全回滚的不同方法。
感谢您的阅读
最佳答案
您需要使用分布式事务协调器。
分布式事务协调器 (DTC) 服务协调更新两个或多个事务保护资源(例如数据库、消息队列、文件系统等)的事务。这些受事务保护的资源可能位于一台计算机上,也可能分布在许多联网计算机上。
因为您尝试在服务器之间建立事务,所以需要一个服务来协调 SQL Server 服务。 Here是一篇关于如何做到这一点的文章。
确保启动并配置服务,并在 Windows 防火墙中为服务器之间的服务创建异常(exception)。
请参阅这篇有关交易的文章以了解更多信息:http://www.mssqltips.com/tip.asp?tip=1585
此外,您可能需要更多地了解 MSDTC 与 SSIS 的工作原理,才能解决您的问题。
关于sql - SSIS 序列容器事务选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14463497/