【问题标题】:SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER for distributed transactions分布式事务的 SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
【发布时间】:2018-01-17 13:23:50
【问题描述】:

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

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

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

我也通过在我的本地机器上恢复两个数据库来尝试这个过程。它成功地与事务一起工作。包裹没有任何问题。

【问题讨论】:

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


    【解决方案1】:

    为了在 ssis 中使用事务,您需要打开分布式事务协调器。另一种方法是在执行 sql 任务和连接属性设置中使用 begin Transaction 在控制流中设置 retainsameconnection = True 并且所有需要在事务中的 dft 任务将在此之后执行,最后一个任务将是另一个执行 sql 任务并提交交易。 按照以下链接使用事务而不开启分布式事务 - https://www.mssqltips.com/sqlservertip/3072/sql-server-integration-services-ssis-transactions-without-msdtc/

    【讨论】:

    • 很遗憾,DTC(由 MSDTC 服务控制)不能在 Azure 上使用。
    【解决方案2】:

    Azure 无法参与与本地 SQL Server AFAIK 的事务。

    限制 以下限制目前适用于 SQL DB 中的弹性数据库事务:

    • 仅支持 SQL DB 中跨数据库的事务。其他 X/打开 SQL DB 之外的 XA 资源提供程序和数据库不能 参与弹性数据库事务。这意味着弹性 数据库事务不能跨越本地 SQL Server 和 Azure SQL 数据库。对于本地分布式事务, 继续使用 MSDTC。
    • 仅支持来自 .NET 应用程序的客户端协调事务。对 T-SQL 的服务器端支持,例如 BEGIN DISTRIBUTED TRANSACTION 已计划,但尚不可用。
    • 不支持跨 WCF 服务的事务。例如,您有一个执行事务的 WCF 服务方法。封闭 事务范围内的调用将失败 System.ServiceModel.ProtocolException。

    有关分布式事务和 Azure 的完整讨论,请参阅 this documentation at Microsoft

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 2019-11-08
      • 2011-05-11
      • 1970-01-01
      • 2012-12-23
      • 2012-05-25
      • 1970-01-01
      相关资源
      最近更新 更多