当前位置: 代码迷 >> Sql Server >> 请:在同个域中的两台SqlServer服务器之间执行分布式事务时出错
  详细解决方案

请:在同个域中的两台SqlServer服务器之间执行分布式事务时出错

热度:100   发布时间:2016-04-27 21:17:30.0
请高手指点:在同个域中的两台SqlServer服务器之间执行分布式事务时出错
情况如下:
在同个域中有两台SqlServer2000   服务器   操作系统分别是win   advaced   server和xp
在xp的分析查询器里面添加远程sqlserver
EXEC   sp_addlinkedserver
@server   =   'srv_lnk ',   --链接服务器名
@srvproduct   =   ' ',
@provider= 'MSDASQL ',
@datasrc= 'bqcws '   --连接DSN名
exec   sp_addlinkedsrvlogin   'srv_lnk ', 'false ',null, 'sa ', 'sa '

然后开始事务
set     XACT_ABORT   on
set   ANSI_NULL_DFLT_ON   on
set   ANSI_WARNINGS   on  

BEGIN   DISTRIBUTED   TRANSACTION
--逻辑部分
delete     from   srv_lnk.Shop.dbo.Shop_ReturnOrderID
select   *   from   srv_lnk.Shop.dbo.Shop_ReturnOrderID
........
............
if   @@error   !=0  
    begin  
        ROLLBACK   TRANSACTION  
        return
    end

COMMIT   TRANSACTION

出现如下情况,如果仅仅对读srv_lnk远程数据库的表和读写本地数据是没有问题的
,当要对远程数据库的表进行修改删除时就会提示错误

Server:   Msg   8524,   Level   16,   State   1,   Line   141
The   current   transaction   could   not   be   exported   to   the   remote   provider.   It   has   been   rolled   back.

感觉很奇怪,既然代码在分布式事务里面就应该有权限对远程表进行修改权限。希望高手指点


------解决方案--------------------
up
------解决方案--------------------
1、运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC。
添加一个 DWORD 值 TurnOffRpcSecurity,值数据为 1。
2、重启MS DTC服务。
3、打开“管理工具”的“组件服务”。
a. 浏览至 "启动管理工具 "。
b. 选择 "组件服务 "。
c. 展开 "组件服务 "树,然后展开 "我的电脑 "。
d. 右键单击 "我的电脑 ",然后选择 "属性 "。
在 MSDTC 选项卡中,确保选中了下列选项:
网络 DTC 访问
网络管理
网络事务
XA 事务
另外, "DTC 登录帐户 "一定要设置为 "NT Authority\NetworkService "。
4、重启MS DTC服务。
5、再次运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC,然后删除 TurnOffRpcSecurity 项。
  相关解决方案