【问题标题】:Calling procedure on linked server without distributed transaction在没有分布式事务的链接服务器上调用过程
【发布时间】:2013-10-14 17:34:03
【问题描述】:

我有一个 SQL Server 2005 过程,需要对其进行修改以调用链接服务器上的过程。我的本地程序被其他几个程序调用,总是在一个事务中。

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

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

但我怀疑我没有那个选项,没有办法关闭事务到链接服务器的扩展。这是正确的吗?

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

谢谢大家。

【问题讨论】:

标签: sql sql-server stored-procedures transactions


【解决方案1】:

事实证明,如果您使用的是 SQL Server 2008 或更高版本,那么您有一个服务器选项可以控制这一点:

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

(见sp_serveroption (Transact-SQL))。

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

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 2015-01-10
    • 2012-11-02
    • 2013-10-05
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多