SQL Server 无法向 Microsoft 分布式事务处理协调器(MS DTC)注册为此事务的资源管理器
最近做分布式事务处理遇到的问题
程序样例:
set xact_abort ON
BEGIN DISTRIBUTED TRANSACTION
insert into [AA].[Test].DbUser.tBMType(Uid,Name,Description,BasePrize,Status)
select Uid,Name,Description,BasePrize,0 as Status
from
(select Uid,Name,Description,BasePrize from [BB].[Test].DbUser.tBMType where Status=1
union
select A.Uid,A.Name,A.Description,A.BasePrize from DbUser.tBMType A left outer join [AA].[Test].DbUser.tBMType B on A.Uid=B.Uid where A.Status=2 and B.Uid is null) A
if @@error=0
COMMIT TRANSACTION
else
ROLLBACK TRANSACTION
set xact_abort OFF
如果正常执行的话,一切OK,但一旦出现异常,以后执行就总抛出这个异常:
0x8004d00e(XACT_E_NOTRANSACTION)。SQL Server 无法向 Microsoft 分布式事务处理协调器(MS DTC)注册为此事务的资源管理器。客户端或资源管理器可能已停止该事务。
详细一点来说就是如果两端数据都正常的话,操作是正常的
接着,我故意制造一个错误
程序抛出意料中异常
"不能在具有唯一索引 'Index_ClientUid' 的对象 'DbUser.tClientType' 中插入重复键的行。"
然后,我再执行一次就永远都是这个错误了:
"登记操作失败: 0x8004d00e(XACT_E_NOTRANSACTION)。SQL Server 无法向 Microsoft 分布式事务处理协调器(MS DTC)注册为此事务的资源管理器。客户端或资源管理器可能已停止该事务。"
运行环境:windows 2003 Server、windows xp sp2
MS Sqlserver 2005
两端的链接服务器、MSDTC配置均已配置正常,用dtcping工具测试通过
系统host文件也已加入IP机器映射