实现触发器相互同步数据的问题
目前我能时间触发器单项同步,下面介绍下我的方法。 俩台服务器利用触发器进行数据同步,现在一台服务器已经做完触发器同步了,经过测试没有任何问题。但现在我想在另一台服务器上也做上触发器同步 当表A有数据更新的时候触发Insert添加到表B里面。 当表B里面有新的更新的时候在触发表B里面的触发器进行添加到表A的相应表里。 现在触发器写完了当更新数据的时候会报错误
其他事务正在使用事务的上下文 有知道这个该怎么设置才能不报错的嘛? 在线等待ing。。。。高手们都来呀。。。
------解决方案--------------------我担心会不会死循环了喔?
要实现双向数据同步,可以用合并式复制(merge replication)即可.
------解决方案--------------------这种情况,需要把nested triggers 设置为 0,AFTER 触发器不能级联
------解决方案--------------------参考以下进行设置.
http://blog.csdn.net/wufeng4552/article/details/4796846
------解决方案--------------------加上下面两句,否则会提示新事务不能登记到指定事务处理器
set xact_abort on
begin distributed tran
------解决方案--------------------还需要做的是
启动两台服务器的MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。
打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放
------解决方案--------------------
最好用合並式事務同步,用觸發器實現太扯了,跨服務器穩定性都成問題
------解决方案--------------------sorry,打错字.
原理上看,用触发器消耗的CPU也不小喔?
复制有很多参数可以配置的,请详细看看.
推荐一个异步传送的新工具: service broker
------解决方案--------------------
这触发器效率太低了,操作范围太大
如果时效性要求不是太高,建议改用定时作业,每一定时间执行一次
insert Texts(id,Title)
select id,Title from Fserver.CeShi.dbo.Texts where id not in(select id from Texts )