我有 2 台位于不同区域的 Windows 服务器 EC2。它们都有公共 IP,因此可以相互通信。
为了允许远程查询,我创建了一个链接服务器。基本上,它们位于不同的区域,所以我使用它们的公共 IP 作为数据源。第一个服务器 IP:13.xxx.xxx.xxx 第二个服务器 IP:52.xxx.xxx.xxx
我测试了连接,成功了。远程查询也运行正常。例如,update table set number = 0 from [remote-server-IP].txtoc.dbo.xhead where code ='1234'
但是如果我使用 BEGIN TRANSACTION 和 COMMIT TRANSACTION 像这样 BEGIN TRANSACTION update table set number = 0 from [remote-server-IP].txtoc.dbo.xhead where code ='1234' COMMIT TRANSACTION
我收到错误。链接服务器“linkedservername”的 OLE DB 提供程序“SQLNCLI11”返回消息“没有活动事务。”。消息 7391,级别 16,状态 2,第 2 行 无法执行操作,因为链接服务器“linkedservername”的 OLE DB 提供程序“SQLNCLI11”无法启动分布式事务。
我尝试了很多方法 - 从组件服务在两台服务器上启用分发事务 - 允许它们通过 Windows 防火墙工作 - 允许它们之间的所有流量(在安全组和 Windows 防火墙中设置)
但这些都不起作用。
有人可以解释一下这个问题吗?
答案1
这个问题很老了,我偶然发现了它,只是发表评论,而不是一个可接受的答案:
1) SQL 的公共 IP 很危险,您应该牢记这一点。在区域之间,您至少可以使用 VPN 进行路由。2) 确保远程服务器上的 DTC 允许远程连接 - 开始 - dcomcnfg - 展开组件服务 - 计算机 - 我的电脑 - 分布式事务协调器 - 本地 DTC(此处的属性) - 安全 - 启用网络 DTC、允许远程客户端、允许入站、允许出站。3) 如果这不能解决问题,请尝试使用 Microsoft 的 dtcping 进一步排除故障。