SSIS 序列容器事务选项
Posted
技术标签:
【中文标题】SSIS 序列容器事务选项【英文标题】:SSIS Sequence container Transaction Option 【发布时间】:2013-01-22 16:37:34 【问题描述】:我有一个非常简单的 SSIS 包,只是一个数据导入和一个执行 SQL 任务。如果包的任何部分失败,我想回滚所有内容,因此我将这些任务放在序列容器中,并将序列容器 TransactionOption 属性设置为“必需”,并将 FailPackageonFailure 属性设置为“真”。当我以本地数据库为目标时,这工作得很好。但是,当我尝试将 OLE DB 连接更改为远程服务器时,上述属性设置会导致包挂起并最终失败并显示“无法获取连接”消息。我在网上看到过关于这个问题的类似描述,但建议总是检查连接。但是我知道连接很好,因为当我将 TransactionOption 属性更改回其默认值“支持”时,程序包运行良好。
有谁知道为什么会发生这种情况?我假设它与我尝试连接的服务器上的不同设置有关。如果包的任何部分失败,是否有人知道确保完全回滚的不同方法。
感谢阅读
【问题讨论】:
除非我做错了什么,否则您甚至不需要修改 FailPackageonFailure 属性。您能否发布完整的 OnError、OnTaskFailed、OnInformation 和 OnWarning 消息集?查看报告的所有消息可能会有所帮助。 感谢您的回复。没错,这里的真正罪魁祸首似乎是交易选项。以下是出现 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER 的两条错误消息。 “无法参与交易。”。现在我认为这与服务器上的 MSDTC 安全配置有关(在检查了本地相同的设置之后) MSDTC,很好用; OMFGKILLMENOW 当它没有时 你的问题解决了吗? ^^^有没有解决方案?有同样的问题。 【参考方案1】:您需要使用分布式事务协调器。
The Distributed Transaction Coordinator (DTC) service coordinates transactions that update two or more transaction-protected resources, such as databases, message queues, files systems, and so on. These transaction-protected resources may be on a single computer or distributed across many networked computers.
因为您试图在服务器之间建立事务,所以它需要一个服务来协调 SQL Server 服务。 Here 是一篇关于如何做的文章。
确保启动和配置服务,并在 windows 防火墙中为服务器之间的服务创建例外。
有关更多信息,请参阅这篇关于事务的文章:http://www.mssqltips.com/tip.asp?tip=1585
此外,您可能需要更多地了解 MSDTC 如何与 SSIS 相关,才能解决您的问题。
【讨论】:
【参考方案2】:另一种选择:
利用 OLE DB 连接的 RetainSameConnection 属性,您可以在 SSIS 中针对多个任务运行常规 SQL Server 事务,而无需使用分布式事务协调器 (DTC)。 In this articleJamie Thomson 向我们展示了如何。
意思是你可以在一个Execute SQL Task中BEGIN TRANSACTION,然后在另一个Execute SQL Task中选择COMMIT或ROLLBACK。
【讨论】:
以上是关于SSIS 序列容器事务选项的主要内容,如果未能解决你的问题,请参考以下文章