我有三个服务器:
A服务器IP:192.168.0.4
B服务器IP:192.168.0.200
C服务器IP:192.168.120.200
1、现将A服务器作为主服务器,并创建好B与C两个服务器的链接服务器(A、B服务器在同一网段,A、C服务器不在同一网段)
2、需要在A服务器\DB数据库\TB表\写上触发:
1)、A服务器新增时,对应B、C服务器同时新增记录;
2)、A服务器更新时,对应B、C服务器同时删除原数据,再新增记录(由于表字段太多,写更新较麻烦,所以直接删除后插入新记录);
3)、A服务器删除时,对应B、C服务器同时删除记录;
3、假设A、B、C三个服务器的数据库与表名相同;
4、现在写触发遇到的问题:
1)、TB表有一个ID自增字段不好处理——我将B、C服务器的这两个表的ID字段取消自增;
2)、系统不支持 text、ntext 或 image 列——我将FOR INSERT 改成 INSTEAD OF INSERT; FOR UPDATE改成 INSTEAD OF UPDATE; FOR DELETE改成 INSTEAD OF DELETE;
3)、现测试INSTEAD OF INSERT时遇到问题,后面两个触发还没有写,代码如下:
CREATE TRIGGER [dbo].[myINSERT]
ON [dbo].[TB]
INSTEAD OF INSERT
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
SET NOCOUNT ON;
--插入新增的数据
INSERT INTO B.DB.TB SELECT * FROM INSERTED
INSERT INTO C.DB.TB SELECT * FROM INSERTED
COMMIT TRANSACTION
a、A服务器新增记录时,触发后B服务器数据存在了,但
A服务器的数据却丢失了;
b、A服务器新增记录时,无法触发B服务器,提示:
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
消息 7391,级别 16,状态 1,过程 myINSERT,第 39 行
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB'
无法启动分布式事务。
关于分布式事务,B、C服务器都是一样的操作,如开启MSDTC服务,135端口,MSDTC设置等,但主要是跨网段的,确实不知道怎么开了,请高手帮我解决一下,谢谢你们了!