分布式事务的SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER

时间:2017-08-09 15:03:47

标签: .net sql-server ssis distributed-transactions msdtc

我正在尝试将序列容器中的数据流任务从SourceDb(存在于我的本地计算机上)设置为TargetDb(存在于azure&可以从SSMS访问)。 每当我运行包含事务的包时,我都会收到以下错误。

错误:SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“TargetDb”的AcquireConnection方法调用失败,错误代码为0xC0202009。在此之前可能会发布错误消息,其中包含有关AcquireConnection方法调用失败原因的更多信息。

如果我删除该容器的事务,它会起作用。我已正确设置所有分布式事务设置。我经历了很多关于堆栈溢出的链接,但没有任何对我有用。请建议解决方案。

我还尝试通过在本地计算机上恢复两个db来尝试此过程。它成功地处理了事务。包装没有任何问题。

2 个答案:

答案 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