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

标签 sql sql-server stored-procedures transactions

我有一个 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 启用此功能。

关于sql - 在没有分布式事务的链接服务器上调用过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19365849/

相关文章:

c# - 我可以缓存的最大值是多少?

sql - SQL 中的累积日期

sql-server - SSRS多值参数-实现过滤器的适当层

c# - 如何使用 SqlDataReader 读取没有列名的数据

java - 使用注释从 Spring-Hibernate 执行存储过程

MySQL SELECT WHERE LIKE 转义数据

sql - PostgreSQL array_agg 非常慢

SQL 2005 : Select top N, 按 ID 与联接进行分组

mysql - mysql中的存储过程

python - heroku postgresql 不会 syncdb