请高手指点:在同个域中的两台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 项。