链接服务器SQLNCLI问题。 “没有交易活跃”

时间:2010-05-28 19:37:15

标签: sql sql-server sql-server-2005 linked-server sqlncli

我试图执行一个存储过程,只是将其结果插入临时表中,我收到以下消息:

  

无法执行操作,因为OLE DB提供程序“SQLNCLI”   对于链接服务器“MyServerName”无法开始分发   交易。 OLE DB提供程序“SQLNCLI”用于链接服务器   “MyServerName”返回消息“No transaction is active。”。

我的查询如下:

INSERT INTO #TABLE
EXEC MyServerName.MyDatabase.dbo.MyStoredProcedure Param1, Param2, Param3

确切的列号,名称,问题不是结果。

MSDTC允许在两台计算机上启动并启动远程过程调用。

这些机器不在同一个域中,但我可以从我的机器执行远程查询并获得结果。我甚至可以执行存储过程并查看其结果,我只是无法将其插入另一个表中。

修改


哦,我忘了提,存储过程不会触发任何触发器。它只在临时表中插入记录,它为数据处理创建它自己。

4 个答案:

答案 0 :(得分:4)

好吧,在经过大量的教程和研究之后,我已经改变了我认为必要的所有配置才能工作,但它仍然没有。

今天我们不得不在我们的开发服务器上强制重启电源,因为没有中断错误,当我们启动服务器时,猜猜是什么?它有效!

所以只是为了记录,我已经更改了一些特定的MSDTC配置,将其添加为链接服务器并允许RPC IN和OUT,并更改了RPC配置为“NO AUTHENTICATION REQUIRED”或类似的东西。

我记得在某处读过更改此配置后,需要重新启动,即使Windows说它已经重新启动了该服务。

我已经重新启动了我的服务器,因为我改变了它,但它仍然没有用。但是就像今天一样,在完全关闭并打开后,它会起作用!

至于语法,我保持不变。

答案 1 :(得分:1)

您还必须检查IP网络配置中的DNS名称解析。

例如,您有一个名为server-a.mydomain.com的服务器和另一个名为server-b.otherdomain.com的服务器,登录服务器-a并执行“ping server-b”(不带域)

如果它响应“Ping请求找不到主机服务器-b。请检查名称并再试一次。”这就是问题。

转到控制面板>网络连接>右键单击网卡>属性>网络协议>属性>高级> DNS>按顺序附加此DNS后缀。 在这里添加本地域:mydomain.com然后添加远程域:otherdomain.com 单击“确定”直到退出

现在,如果您执行“ping server-b”,它应该响应如下:

  

使用32个字节的数据ping server-b.otherdomain.com [192.168.1.2]:   来自192.168.1.2的回复:bytes = 32 time = 12ms TTL = 64回复来自   192.168.1.2:bytes = 32 time = 9ms TTL = 64

现在再次尝试执行分布式事务。

答案 2 :(得分:0)

我可以安全地在链接服务器连接的两侧重新启动SQL Server服务。我不必重新启动计算机。

答案 3 :(得分:-2)

您是否尝试过使用openquery?

insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystoredproc param1, param2, param3')