错误“该伙伴事务管理器已经禁止了它对远程/网络事务的支持”解决方案

来源:互联网 发布:unix网络编程百度云 编辑:程序博客网 时间:2024/05/17 09:14

背景:为某医院做一个药房接口,需要两台服务器数据库之间互通数据,暂时定位为HIS服务器和药房服务器。其中HIS服务器为2008操作系统,药房服务器为WIN7系统。两台服务器安装的数据库都为SQL SERVER 2008 R2

数据互通原理:通过HIS服务器的存储过程往药房服务器数据库中写入数据,并且调用药房服务器的某个存储过程,取得药房服务器存储过程执行后的返回值,并插入到HIS服务器相应的表中。

出现的错误:入下图所示

解决此问题的过程:

百度此问题后,出现了好多的解决方法,原因是存储过程互通用到了分布式事务,但无非是如下几点:MSDTC服务没有启动,设置MSDTC服务的安全访问。经过多种尝试,一直没有得到问题解决,后经过多次失败尝试,终于执行成功,下面将需要配置的地方写出来,供以后参考。

在双方创建链接服务器,语句如下,也可手工创建

execsp_addlinkedserver 'srv_lnk','','SQLOLEDB','160.100.1.133'其中IP地址根据自己需要来设置。Srv_lin就是链接服务器创建后的名称

execsp_addlinkedsrvlogin'srv_lnk','false',null,'myhis','iron123!'—myhis为链接服务器的登录用户名,Iron123!为登录的密码

execsp_serveroption'srv_lnk','rpcout','true' --这个允许调用链接服务器上的存储过程

因为药房的服务器为WIN7系统,可能比较特殊,对于其他的系统请自行摸索或者百度。首先在双方的服务器上都需要开启如下的服务。

然后需要:打开'控制面板'->'管理工具'->'组件服务',点开'组件服务'->'计算机'->'我的电脑',然后展开“我的电脑”,找到继续展开,在

本地DTC上右键,属性。作为数据库的服务器的配置如下:

在存储过程中,还需要添加下面一句代码。

SET XACT_ABORT ON  

我在百度找到他的用法解释。

SET XACT_ABORT ON分为两种:

1、总体作为一个事务,整体提交或整体回滚,格式为:

SET XACT_ABORT ON
BEGIN TRAN
    --
要执行的语句

COMMIT TRAN
GO

2、每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚,格式为:

SET XACT_ABORT ON
BEGIN
    --
要执行的语句

END
GO

 

 

 

0 0
原创粉丝点击