日期:2014-05-17  浏览次数:20541 次

实现触发器相互同步数据的问题
目前我能时间触发器单项同步,下面介绍下我的方法。 俩台服务器利用触发器进行数据同步,现在一台服务器已经做完触发器同步了,经过测试没有任何问题。但现在我想在另一台服务器上也做上触发器同步  当表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)扫描端口以判断端口是否开放
------解决方案--------------------
引用:
目前我能时间触发器单项同步,下面介绍下我的方法。 俩台服务器利用触发器进行数据同步,现在一台服务器已经做完触发器同步了,经过测试没有任何问题。但现在我想在另一台服务器上也做上触发器同步  当表A有数据更新的时候触发Insert添加到表B里面。 当表B里面有新的更新的时候在触发表B里面的触发器进行添加到表A的相应表里。   现在触发器写完了当更新数据的时候会报错误 其他事务正在使用事务的上下文  有……


最好用合並式事務同步,用觸發器實現太扯了,跨服務器穩定性都成問題
------解决方案--------------------
sorry,打错字.

原理上看,用触发器消耗的CPU也不小喔?  

复制有很多参数可以配置的,请详细看看.

推荐一个异步传送的新工具: service broker
------解决方案--------------------
引用:
引用:
那可能代码问题,贴出来诊断



Fserver是建立的远程服务器连接 测试没问题


下面是创建触发器的代码
CREATE Trigger TextCF
On Texts 
For Insert
As
  
  insert Fserver.CeShi.dbo.Texts(id,Title)  
  select id,Title……


这触发器效率太低了,操作范围太大

如果时效性要求不是太高,建议改用定时作业,每一定时间执行一次

insert Texts(id,Title)   
  select id,Title from Fserver.CeShi.dbo.Texts where id not in(select id from Texts )