首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法执行此操作,因为用于链接服务器的OLE DB提供程序"SQLNCLI11“无法开始分布式事务。

无法执行此操作,因为用于链接服务器的OLE DB提供程序"SQLNCLI11“无法开始分布式事务。
EN

Stack Overflow用户
提问于 2014-06-03 12:03:47
回答 7查看 92.4K关注 0票数 15

我正在尝试从我的机器( Server 2012)到客户端服务器( server 2008)运行一个分布式事务。

我试着跑:

代码语言:javascript
复制
begin distributed transaction
select * from [172.01.01.01].master.dbo.sysprocesses
Commit Transaction

我得到了:

代码语言:javascript
复制
OLE DB provider "SQLNCLI11" for linked server "172.01.01.01" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 2
The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "172.01.01.01" was unable to begin a distributed transaction.

我可以在返回数据的情况下对该服务器运行一个SELECT,所以至少我知道服务器可以看到对方,并且链接服务器存在并正在运行

现在,有多个帖子在网上为这个,但我不能让它工作。这就是我迄今尝试过的:

  1. 将DTC属性设置为以下内容(在两台服务器上)

  1. 从控制面板->服务(在两个服务器上)重新启动分布式事务协调器(MSDTC)。

  1. 卸载和安装DTC (在两个服务器上)。

  1. 重新启动远程服务器。

  1. 关闭两台服务器上的防火墙。

  1. 启用sp_configure 'Ad分布式查询‘,1(在两个服务器上)。

  1. 我运行了DTCPing,它成功了。

  1. 链接服务器属性更改为:

还有什么值得尝试的吗?

UPDATE:将事务从另一个服务器运行到172.01.01.01可以工作。因此,问题不是在目标服务器上,而是在作为源的我的计算机上。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-02-26 15:25:48

如果根据OP的原始帖子在两个SQL服务器上配置了MS分布式事务协调器(MSDTC),您仍然可以得到“没有事务活动”,那么您应该检查每个主机是否可以通过注册在链接服务器中的IP (假设这就是您所使用的)到达。

例如,在最近的设置中,两个SQL服务器可以通过192.168.200.x范围内的网络访问(相同的子网),但每个服务器也通过10.x.x.x范围内的IP间接连接。在一个Server上,它使用的DNS服务器一直将目标SQL服务器解析为10.x.x.xIP(这是防火墙),尽管链接服务器条目在目标服务器的192.168.200.x中使用了IP。

看来,MSDTC使用服务器的主机名,而SQL server则使用链接服务器条目中定义的IP或主机名通过任何链接连接连接,导致在SQL Management Studio中检查目标链接服务器时出现这种明显连接的混乱行为,但无法在目标上执行远程过程。

解决方案是在主机文件(%windir%\system32 32\驱动器\etc\ host )中添加条目,显式地强制每个SQL服务器将另一个解析到192.168.200.x网络上的IP地址。

关于主机1 (IP 192.168.200.15):)

代码语言:javascript
复制
# TARGET SERVER
192.168.200.20    targetserverhostname.and.any.domain.suffix  targetserverhostname

关于主机2 (IP 192.168.200.20) )

代码语言:javascript
复制
# SOURCE SERVER
192.168.200.15    sourceserverhostname.and.any.domain.suffix sourceserverhostname

不要忘记确保MSDTC已经根据上面OP的屏幕截图进行了配置,允许网络访问和(如果需要)无身份验证。

票数 6
EN

Stack Overflow用户

发布于 2018-06-17 08:04:02

将“启用分布式事务的升级”标志设置为false (在链接服务器属性窗口中)解决了类似的问题。

票数 29
EN

Stack Overflow用户

发布于 2017-09-19 06:45:17

我面临着一个类似的问题,我解决了如下问题。在SQL Server中对象资源管理器的树结构中存在一个节点。在这里您会发现Serverobjects→下面有一个分布式服务器的IP地址列表。

右键单击它,选择属性,一个窗口将弹出。在左窗格中选择服务器选项;您将获得属性列表。将标志值false设置为“启用分布式事务的提升”属性。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24014718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档