我们有一个连接到另一个 SQL 服务器“server2”的 SQL Server 2008“server1”的设置。在“server2”上,有一个存储过程,我可以从“server1”很好地查询:
EXEC [server2].[xx].[dbo].[sp] param
但是,一旦我开始从链接服务器 SP 插入数据,我们就会遇到问题。我们使用以下代码:
INSERT INTO server1.dbo.table (column1, column2, ...)
EXEC [server2].[xx].[dbo].[sp] param
当我们开始时,我们收到了“已知”错误,例如:
链接服务器“linkedserver”的 OLE DB 提供程序“SQLNCLI”返回消息“合作伙伴事务管理器已禁用其对远程/网络事务的支持。”。消息 7391,级别 16,状态 2,第 2 行 由于链接服务器“linkedserver”的 OLE DB 提供程序“SQLNCLI”无法开始分布式事务,因此无法执行操作。
如类似问题所述: 从链接的存储过程插入到本地表 从链接的服务器插入存储过程的结果
因此,我们在两台服务器上都配置了 MSDTC。现在查询运行 20 秒,然后中止并显示错误消息:
链接服务器“server2”的 OLE DB 提供程序“SQLNCLI10”返回消息“没有事务处于活动状态。”。消息 7391,级别 16,状态 2,第 14 行 由于链接服务器“server2”的 OLE DB 提供程序“SQLNCLI10”无法开始分布式事务,因此无法执行操作。
与之前的错误相反,Windows 事件日志中没有任何内容。
首先,由于 INSERT 到本地表中,我的查询是否被视为分布式事务?
其次,如果我尝试执行这样的分布式查询:
begin distributed tran
select * from [server2].master.sys.sysprocesses
commit tran
恰好 20 秒后,我收到完全相同的错误消息。
我不知道如何从这里进一步调查。会不会是防火墙问题?