【发布时间】:2013-02-14 14:57:48
【问题描述】:
我们有一个连接到另一个 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”无法开始分布式事务。
如类似问题所述: inserting to a local table from a linked stored procedure Inserting Results Of Stored Procedure From Linked Server
因此,我们在两台服务器上都配置了 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 秒后收到完全相同的错误消息。
我不知道如何从这里进一步调查。会不会是防火墙问题?
【问题讨论】:
标签: sql sql-server-2008 stored-procedures linked-server