在两台服务器上使用触发器双向同步数据碰到的怪问题
我需要同步两台服务器上的数据库中的某个表的数据,因为是实时同步,所以不想采用数据库复制订阅发布,而是采用了触发器的方式。
两台服务器上的这个表名称结构均相同,要求A服务器上中该表数据发生任何变化需要同步到B服务器上,反之,B服务器上中该表数据发生任何变化也需要同步到A服务器上。
现在的问题是,如果我只在A服务器上建立该表的触发器,则能够实现A服务器上中该表数据发生任何变化都同步到B服务器上。
同理,如果只在B服务器上建立该表的触发器,则能够实现B服务器上中该表数据发生任何变化都同步到A服务器上。
但是,如果我在两个服务器上都建立了触发器就会报错,信息如下:
服务器: 消息 7391,级别 16,状态 1,过程 TiTDefVip,行 11
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
而我已经设置了数据库的属性为不允许触发嵌套式触发器,也就是说并不存在A触发B,B又触发A这样类似死循环的问题。(另外,如果我在一个数据库中建立两个同结构的表,将以上触发器在两个表中均建立好,可以成功实现双向同步。)
这个问题有办法解决么?各位大侠救救俺啊,已经研究了N天了。。。