【问题标题】:OLe DB provider "SQLNCLI" for linked server was unable to begin a distributed transaction链接服务器的 OLe DB 提供程序“SQLNCLI”无法开始分布式事务
【发布时间】:2013-09-10 13:17:05
【问题描述】:

我正在尝试在 SQL Server 2008 中调用存储过程并将获取的数据存储到本地临时表中。

当我尝试运行它时,我收到以下错误:

操作无法完成,因为 OLe DB 提供程序“SQLNCLI” 链接服务器无法开始分布式事务

我的代码如下:

create table #temp(
    col1 as int,
    col2 as varchar(50)
)

insert into #temp
exec [192.168.0.9].[db1].[dbo].[tablename] @usr_id=3

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    链接服务器无法开始分布式事务错误是因为 MSDTC(MS 分布式事务协调器)中的问题。问题可能源于许多问题。包括 MSDTC 未运行、被防火墙阻止等。

    如果您需要事务,您必须自己调试问题,因为它是环境问题。如果您可以重写以避免需要事务,您的生活会更简单。只是为了确保这是一个 MSDTC 问题,编写一个不依赖于 MSDTC 的简单查询。例如

    create table #temp( col1 as int, col2 as varchar(50) )
    
    insert into #temp 
    select col1, col2 from [192.168.0.9].[db1].[dbo].[tablename] where usr_id=3
    

    如果这可行,它肯定是 MSDTC(也许是一个可以避免的问题)

    --添加了这个。花了一点时间寻找MSDTC调试。 http://www.sqlwebpedia.com/content/msdtc-troubleshootinghttp://www.mssqltips.com/sqlservertip/2083/troubleshooting-sql-server-distributed-transactions-part-1-of-2/ 一样好,它们几乎涵盖了我记得必须调试 MSDTC 问题(以及其他一些问题)的所有内容。

    【讨论】:

      【解决方案2】:

      您可以通过将服务器选项“remote proc transaction Promotion”设置为“false”来防止对链接服务器使用分布式事务:

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

      Here's the same issue

      【讨论】:

      • 这对我有用!感谢您链接到其他答案。很好奇设置属性的缺点是什么。我认为只要我不更改本地服务器和链接服务器上的数据,然后需要回滚所有这些事务,那么我应该会很好。
      猜你喜欢
      • 2017-09-19
      • 2014-07-23
      • 2011-09-18
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      相关资源
      最近更新 更多