我正在尝试将序列容器中的数据流任务从SourceDb(存在于我的本地计算机上)设置为TargetDb(存在于azure&可以从SSMS访问)。 每当我运行包含事务的包时,我都会收到以下错误。
错误:SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“TargetDb”的AcquireConnection方法调用失败,错误代码为0xC0202009。在此之前可能会发布错误消息,其中包含有关AcquireConnection方法调用失败原因的更多信息。
如果我删除该容器的事务,它会起作用。我已正确设置所有分布式事务设置。我经历了很多关于堆栈溢出的链接,但没有任何对我有用。请建议解决方案。
我还尝试通过在本地计算机上恢复两个db来尝试此过程。它成功地处理了事务。包装没有任何问题。
答案 0 :(得分:2)
要在ssis中使用事务,您需要打开分布式事务协调器。另一种方法是在执行sql任务中使用begin Transaction,并在控制流中连接属性set retainsameconnection = True,并且在此之后需要在事务中的所有dft任务将跟随,最后一个任务将是另一个执行sql任务的提交交易。 按照以下链接在分布式交易中使用无交换的交易 - https://www.mssqltips.com/sqlservertip/3072/sql-server-integration-services-ssis-transactions-without-msdtc/
答案 1 :(得分:1)
Azure无法参与本地SQL Server AFAIK的事务。
<强>限制强> 以下限制当前适用于SQL DB中的弹性数据库事务:
- 仅支持SQL DB中跨数据库的事务。其他X / Open SQL DB之外的XA资源提供程序和数据库不能 参与弹性数据库交易。这意味着有弹性 数据库事务无法跨越SQL Server和 Azure SQL数据库。对于场所的分布式交易, 继续使用MSDTC。
- 仅支持来自.NET应用程序的客户端协调事务。服务器端支持T-SQL,例如BEGIN DISTRIBUTED TRANSACTION已计划,但尚未提供。
- 不支持跨WCF服务的事务。例如,您有一个执行事务的WCF服务方法。内附 事务范围内的调用将失败 System.ServiceModel.ProtocolException。
有关分布式事务和Azure的完整讨论,请参阅this documentation at Microsoft。