跨服务器触发器运行时无法启动分布式事务如何解决?
各位高手:
小弟在做一个跨服务器的触发器,下面是触发器的内容(本地插入数据,同步插入到192.168.0.101中)
exec sp_addlinkedserver 'ERP','','SQLOLEDB','192.168.0.101'
exec sp_addlinkedsrvlogin 'ERP','false',null,'sa',''
go
CREATE TRIGGER TG_AtdRecord ON [dbo].[AtdRecord]
FOR INSERT, UPDATE, DELETE
AS
set xact_abort on
declare @CLOCK_TIME datetime
declare @YG_NO varchar(20)
declare @CLOCK_ID varchar(5)
declare @CARD_ID varchar(30)
declare @CARDNO varchar(10)
select @CLOCK_TIME=cast(RECDATE as varchar(50))+' '+cast(RECtime as varchar(50)),@YG_NO=CARDNO,@CLOCK_ID='01',@CARD_ID=CARDNO,@CARDNO=CARDNO FROM inserted
insert into ERP.DB_DEMO.dbo.MF_CLOCK(CLOCK_TIME,YG_NO,CLOCK_ID,CARD_ID) VALUES(@CLOCK_TIME,@YG_NO,@CLOCK_ID,@CARD_ID)
update M set M.YG_NO=T.YG_NO from ERP.DB_DEMO.dbo.MF_CLOCK M,ERP.DB_DEMO.dbo.TF_CARD T where M.CARD_ID=T.CARD_ID
GO
在本地插入数据到AtdRecord时,提示:
服务器: 消息 7391,级别 16,状态 1,过程 TG_AtdRecord,行 12
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
但是我目前的MSDTC、RPC服务都是开启的,MSDTC已经重装过,也按照网上说的再组件服务中设置MSDTC的安全配置文件,且telnet IP 135端口都没有问题,防火墙也关的,单独查询时SELECT * FROM ERP.DB_NIBO.dbo.MF_CLOCK时可以的,用Dtcping ping时错误如下:
Problem:fail to invoke remote RPC method
Error(status=5): at dtcping.cpp (Line:265)
RPC pinging failure
Description:5-拒绝访问。
Invalid partner CID while constructing binding handle
补充一下,两台电脑都是系统都是XP SP3,数据库为SqlServer2000,网关一致
跪求各位高手帮帮忙分析下,搞了快一天了,一致找不到什么原因。
万分感谢!