情况如下:
在同个域中有两台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
endCOMMIT 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.感觉很奇怪,既然代码在分布式事务里面就应该有权限对远程表进行修改权限。希望高手指点
在同个域中有两台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
endCOMMIT 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.感觉很奇怪,既然代码在分布式事务里面就应该有权限对远程表进行修改权限。希望高手指点
添加一个 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 项。