【SQL SERVER】链接数据库“无法启动分布式事务”的问题及解决

461 查看

问题描述

当在SQL SERVER数据库里配置了Linded Server(链接数据库)时,就有可能有通过链接数据库调用其他服务器上的数据库的存储过程的需求,可是在还没有进行配置之前就会报出这样的错误:“该伙伴事务管理器已经禁止了它对远程/网络事务的支持,无法启动分布式事务”、“未将服务器配置为RPC”。在网上搜索了下,结合自己的情况整理了一下。


Linked-Server-RPC-8

Linked-Server-RPC-9

解决方法

数据库服务器属性设置

在本地数据库与远程数据库都对数据库服务器属性进行设置,勾选【需要将分布式事务用户服务器到服务器的通信】。


Linked-Server-RPC-1

启动MSDTC服务

在本地数据库的服务器与远程数据库的服务器上开启如下服务:
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

打开135端口

在本地数据库的服务器与远程数据库的服务器上开启此端口。
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。(这里我在Win Server 2008 r2里开启进出站端口规则,没起作用,就直接关掉防火墙然后解决了)

MSDTC设置

在本地数据库的服务器与远程数据库的服务器上设置如下:
打开“控制面板——管理工具――组件服务”,以此打开“组件服务――计算机——我的电脑——本地DTC”,右键属性,切换到【安全】选项卡,设置下面这些东东。


Linked-Server-RPC-2

Linked-Server-RPC-3

配置RPC

如果报“未将服务器配置为RPC”的错误,需要右键配置的链接服务器,打开属性窗口,切换到【服务器选项】选项卡,将RPC,RPC Out更改为true.


Linked-Server-RPC-4

这里我在改的时候报出这样的错误:“不允许对系统目录进行即系更新”。于是乎在网上搜罗解决方法,但是看着都挺麻烦,我的方法挺简单。


Linked-Server-RPC-5

右键链接数据库,【编写链接服务器脚本为】,【CREATE到】,【新查询编辑器窗口】,在出现的脚本中找到这两句,把false改成true,然后运行这两句命令就可以了。


Linked-Server-RPC-6

Linked-Server-RPC-7

2018 - 知识虫 - 我的知识库 渝ICP备16002641号-2

渝公网安备 50010702501581号