由于链接服务器的OLE DB提供程序“ SQLNCLI11”无法开始分布式事务,因此无法执行该操作

卡梅隆·卡斯蒂略(Cameron Castillo)

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

我正在尝试运行:

begin distributed transaction
select * from [172.01.01.01].master.dbo.sysprocesses
Commit Transaction

我得到:

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属性设置为以下(在两台服务器上) 在此处输入图片说明

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

  3. 卸载和安装的DTC(在两台服务器上)。

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

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

  6. 启用了sp_configure'Ad Hoc Distributed Queries',1(在两台服务器上)。

  7. 我运行了DTCPing,并成功ping通。

  8. 链接服务器的属性更改为以下内容: 在此处输入图片说明

还有什么可以尝试的?

更新:从另一台服务器到172.01.01.01运行事务。因此,问题不在目标服务器上,而是在源机器上。

伦贝里

If after configuring your MS Distributed Transaction Coordinator (MSDTC) on the two SQL server's according to the OP's original post, you still get "no transaction active", you should check that each host is reachable via the IP (assuming that's what you've used) registered in the linked server.

For example; on a recent setup, two SQL servers were reachable through a network in the 192.168.200.x range (same subnet), but each server was also indirectly connected through an IP in the 10.x.x.x range. On one SQL Server, the DNS server it used kept resolving the target SQL server to it's 10.x.x.x IP (which was firewalled) even though the linked server entry used the IP in the 192.168.200.x of the target server.

It appears that MSDTC uses the hostname of the server, while SQL server connects over any linked connection using the IP or hostname defined in the linked server entry, leading to this confusing behaviour of apparent connectivity when checking the target linked server within SQL Management Studio, but inability to execute remote procedures on the target.

The solution was to add entries in the host file's (%windir%\system32\drivers\etc\hosts) to explicitly force each SQL server to resolve the other to the IP address on the 192.168.200.x network.

On host 1 (IP 192.168.200.15):

# TARGET SERVER
192.168.200.20    targetserverhostname.and.any.domain.suffix  targetserverhostname

On host 2 (IP 192.168.200.20)

# SOURCE SERVER
192.168.200.15    sourceserverhostname.and.any.domain.suffix sourceserverhostname

Don't forget to ensure MSDTC has been configured according to the OP's screenshot above allowing network access and (if required) No Authentication.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

链接服务器链接服务器的OLE DB提供程序“ SQLNCLI11”

错误:链接服务器“bquick”的 OLE DB 提供程序“MSDASQL”无法开始分布式事务

使用链接服务器返回错误-“无法获取OLE DB提供程序的架构行集”

无法为链接服务器创建OLE DB提供程序Microsoft.Jet.OLEDB.4.0的实例

链接服务器“(null)”的OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0”

链接服务器返回的OLE DB提供程序'与预期的数据长度不匹配的数据

MSSQL链接服务器错误:链接服务器的OLE DB提供程序“ OraOLEDB.Oracle”为列提供了不一致的元数据

无法为链接服务器初始化OLE DB访问接口Microsoft.ACE.OLEDB.12.0的数据源对象(空)

Microsoft搜索服务:是否有OLE DB提供程序?(替代:Win2012上的索引服务器?)

检查是否已安装用于索引服务器的Microsoft OLE DB提供程序(aka Provider = MSIDXS)?

SSIS:请求的OLE DB提供程序SQLNCLI10.1未注册

SunGard Investran OLE DB提供程序用法

由于存在待处理的请求,因此无法执行事务操作

由于“Id”列,链接服务器无法 INSERT INTO 表。用户无权写入列

SQL链接服务器-无法执行过程

由于TypeError无法启动服务器

链接服务器上的SQL Server和mysql之间的分布式事务

由于虚拟机管理程序未运行,因此无法启动虚拟机,这是虚拟机在vcenter服务器中运行

由于未找到符号,因此无法执行此操作

无法使用ASP.NET会话状态提供程序连接到Redis服务器

嵌入式服务器上的Orient DB分布式副本

OLE DB提供程序Microsoft.ACE.OLEDB.15.0消息

SSIS中未列出Oracle OLE DB提供程序

如何检查 ole-db 的 oracle 提供程序的版本。OraOLEDB.Oracle 提供程序

符号链接级别过多,因此无法执行控制台程序

无法连接到链接的服务器

Firebird .NET提供程序和嵌入式服务器3

JMS独立MQ提供程序和分布式事务

C服务器程序无法分叉