在没有分布式事务的链接服务器上调用过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在没有分布式事务的链接服务器上调用过程相关的知识,希望对你有一定的参考价值。

我有一个SQL Server 2005过程需要修改,以调用链接服务器上的过程。我的本地过程由几个其他过程调用,始终在事务中。

如果我将调用添加到链接服务器,那么在运行时我收到一条消息,说明OLE DB提供程序无法开始分布式事务。

这对我来说没问题:据我所知,远程过程不会对数据库进行任何更改。我不需要它在事务内部,因此不需要分布式事务。

但我怀疑我没有那个选项,没有办法关闭交易扩展到链接服务器。它是否正确?

(我可以通过重构这些过程来解决这个问题,以便在所有事务之外对父进程进行对链接服务器的调用。但从逻辑上讲,它属于这个子进程,所以我想保留它。)

谢谢,所有。

答案

事实证明,如果您使用的是SQL Server 2008或更高版本,则可以使用服务器选项来控制它:

EXEC sp_serveroption 'servername', 'remote proc transaction promotion', 'false'

(见sp_serveroption (Transact-SQL))。

但我在SQL Server 2005上,没有那个选项。所以我进一步调查并发现MSDTC在我使用的机器上禁用了网络事务,这就是远程事务失败的原因。我能够通过DBA启用此功能。

以上是关于在没有分布式事务的链接服务器上调用过程的主要内容,如果未能解决你的问题,请参考以下文章

无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务

无法执行该操作,因为链接服务器 "XXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务。

sql server 和 mysql 之间的链接服务器上的分布式事务

没有交易就触发?

Android中的片段事务问题

调用dubbo服务时事务配置在哪