【问题标题】:Two Problems With DTCDTC 的两个问题
【发布时间】:2020-06-07 19:30:02
【问题描述】:

我正在尝试在两个 SQL Server 之间建立分布式事务。我的任务是从服务器 A 获取一些数据,对其进行转换,保存在服务器 B 上,然后作为更新服务器 A 的最后一步。

当我执行这条 T-SQL 语句时

BEGIN DISTRIBUTED TRANSACTION TestTran
SELECT
*
FROM dbo.test

我得到了错误:

链接服务器“xx.xx.xx.xx”的 OLE DB 提供程序“MSOLEDBSQL”返回消息“没有活动的事务。”。 消息 7391,第 16 级,状态 2,第 2 行

第一台服务器(服务器 A)是 SQL Server 2008 R2。 Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64)

第二台服务器是 Microsoft SQL Server 2019 (RTM-GDR) (KB4517790) - 15.0.2070.41 (X64) Oct 28 2019 19:56:59 版权所有 (C) 2019 Microsoft Corporation Developer Edition (64-bit) o​​n Windows 10 Enterprise 10.0 (构建 17763:)

如下图所示,在两台服务器上都配置了 MS DTC

DTC configuration

两个防火墙都配置为允许 DTC,如下图所示 Firewall Configuration

我不知道如何使用 DTCPing,因为 DTCPing 只允许 NETBIOS 名称。我将服务器 IP 地址放在 hosts 文件中,但 DTCPing 返回错误,如下图所示。 DTCPing error

而这只是我困难的开始。

我的第二个任务是在服务器 A(如上所示)和另一个我权限非常有限的服务器之间建立分布式事务。 让我们将该服务器命名为服务器 C。

当我尝试建立分布式事务时,出现以下错误。

链接服务器“XXXX”的 OLE DB 提供程序“SQLNCLI10”返回消息 “合作伙伴事务管理器已禁用对远程/网络事务的支持。”。

在我看来,服务器 C 配置不正确,我需要联系本地管理员。

当我致电本地管理员时,我必须更加具体。

所以,总结一下。我对分布式事务有两个困难。

  1. 没有事务处于活动状态是一条错误消息。

  2. 第二个错误消息是合作伙伴事务管理器已禁用其对分布式事务的支持。

似乎有什么问题? 提前致谢!

【问题讨论】:

    标签: sql-server transactions msdtc


    【解决方案1】:

    看起来,DTC 讨厌将 IP 地址用于链接服务器。您上面的 DTCPing 注释,关于它需要 NetBIOS 名称以及它如何不接受 IP 地址,给了我需要解决我自己的挑战的提示。

    考虑有 2 台服务器,

    • 在服务器 1 中(称为 10.0.0.1 - srvServerA)
    • 在服务器 2 中(称为 192.168.10.1 - srvServerB)

    两者都在不同的网络上,通过 VPN 连接,两者之间没有 DNS。

    要解决这个问题:

    • 在服务器 1 上,添加指向服务器 2 名称的 hosts entry
    • 在服务器 2 上,添加指向服务器 1 名称的主机条目。
    • 在两台服务器上重新添加您的链接服务器,使用名称而不是 IP,然后 DTC 会突然停止抱怨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多