实现触发器相互同步数据的问题

evil_steve 2011-10-18 01:37:39
目前我能时间触发器单项同步,下面介绍下我的方法。 俩台服务器利用触发器进行数据同步,现在一台服务器已经做完触发器同步了,经过测试没有任何问题。但现在我想在另一台服务器上也做上触发器同步 当表A有数据更新的时候触发Insert添加到表B里面。 当表B里面有新的更新的时候在触发表B里面的触发器进行添加到表A的相应表里。 现在触发器写完了当更新数据的时候会报错误 其他事务正在使用事务的上下文 有知道这个该怎么设置才能不报错的嘛? 在线等待ing。。。。高手们都来呀。。。
...全文
819 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongwu525 2013-01-09
  • 打赏
  • 举报
回复
今天遇到同样问题,请问楼主如何解决?
潇洒王子 2011-10-20
  • 打赏
  • 举报
回复
继续关注楼下
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 nbdba 的回复:]
引用 6 楼 evil_steve 的回复:
引用 4 楼 nbdba 的回复:
那可能代码问题,贴出来诊断



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


下面是创建触发器的代码
CREATE Trigger TextCF
On Texts
For Insert
As

insert Fserver.CeShi.dbo.Texts(id,Title)
……
[/Quote]



就是因为时效性要求非常高,不能用定时作业来执行。
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 nbdba 的回复:]
引用 3 楼 evil_steve 的回复:
引用 2 楼 nbdba 的回复:
这种情况,需要把nested triggers 设置为 0,AFTER 触发器不能级联



设置为0了还是报同样的错误,死循环应该是不会出现的吧。

重启下sql服务后查下设置值,可能没有应用。
[/Quote]

重启完SQL服务还是不行。。值查询了是0了。
NBDBA 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 evil_steve 的回复:]
引用 4 楼 nbdba 的回复:
那可能代码问题,贴出来诊断



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


下面是创建触发器的代码
CREATE Trigger TextCF
On Texts
For Insert
As

insert Fserver.CeShi.dbo.Texts(id,Title)
select id,Title……
[/Quote]

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

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

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


NBDBA 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 evil_steve 的回复:]
引用 2 楼 nbdba 的回复:
这种情况,需要把nested triggers 设置为 0,AFTER 触发器不能级联



设置为0了还是报同样的错误,死循环应该是不会出现的吧。
[/Quote]
重启下sql服务后查下设置值,可能没有应用。
唐诗三百首 2011-10-18
  • 打赏
  • 举报
回复
sorry,打错字.

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

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

推荐一个异步传送的新工具: service broker
唐诗三百首 2011-10-18
  • 打赏
  • 举报
回复
原理上看,用触发器消耗的CPU也不小喔?

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

推荐一个异步传送的新工具: service broker
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 roy_88 的回复:]
引用楼主 evil_steve 的回复:
目前我能时间触发器单项同步,下面介绍下我的方法。 俩台服务器利用触发器进行数据同步,现在一台服务器已经做完触发器同步了,经过测试没有任何问题。但现在我想在另一台服务器上也做上触发器同步 当表A有数据更新的时候触发Insert添加到表B里面。 当表B里面有新的更新的时候在触发表B里面的触发器进行添加到表A的相应表里。 现在触发器写完了当更新数据的时候会报错……
[/Quote]

合并式我用过,但数据量比较大占用CPU非常的高。完全不能用啊。CPU使用量太高会导致游戏无法正常运行。
中国风 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 evil_steve 的回复:]
目前我能时间触发器单项同步,下面介绍下我的方法。 俩台服务器利用触发器进行数据同步,现在一台服务器已经做完触发器同步了,经过测试没有任何问题。但现在我想在另一台服务器上也做上触发器同步 当表A有数据更新的时候触发Insert添加到表B里面。 当表B里面有新的更新的时候在触发表B里面的触发器进行添加到表A的相应表里。 现在触发器写完了当更新数据的时候会报错误 其他事务正在使用事务的上下文 有……
[/Quote]

最好用合並式事務同步,用觸發器實現太扯了,跨服務器穩定性都成問題
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fredrickhu 的回复:]
还需要做的是

启动两台服务器的MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动……
[/Quote]



这些我都设置完了。那俩句也加上了,还是报 其他会话正在使用事务的上下文。。。。。非常压抑的错误。只有在更新数据的时候报这个错。不允许更新数据。
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ap0405140 的回复:]
有些版本的windows的DTC组件是没装的喔,确认一下:
开始-->设置-->控制面板-->添加删除程序-->windows组件-->应用程序组件-->DTC组件有无勾选.
[/Quote]


确认完毕,全部都装上了。不是这个原因。
--小F-- 2011-10-18
  • 打赏
  • 举报
回复
还需要做的是

启动两台服务器的MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放
--小F-- 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 evil_steve 的回复:]
引用 9 楼 fredrickhu 的回复:
加上下面两句,否则会提示新事务不能登记到指定事务处理器
set xact_abort on
begin distributed tran



这俩句加在哪?上面吗?
[/Quote]
触发器
唐诗三百首 2011-10-18
  • 打赏
  • 举报
回复
有些版本的windows的DTC组件是没装的喔,确认一下:
开始-->设置-->控制面板-->添加删除程序-->windows组件-->应用程序组件-->DTC组件有无勾选.
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fredrickhu 的回复:]
加上下面两句,否则会提示新事务不能登记到指定事务处理器
set xact_abort on
begin distributed tran
[/Quote]


这俩句加在哪?上面吗?
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ap0405140 的回复:]
参考以下进行设置.
http://blog.csdn.net/wufeng4552/article/details/4796846
[/Quote]


这些我都设置啦,但是如果俩台服务器都做触发器的时候会报错误的 其他事务正在使用事务的上下文 不明白这个问题该怎么解决。。
--小F-- 2011-10-18
  • 打赏
  • 举报
回复
加上下面两句,否则会提示新事务不能登记到指定事务处理器
set xact_abort on
begin distributed tran
唐诗三百首 2011-10-18
  • 打赏
  • 举报
回复
evil_steve 2011-10-18
  • 打赏
  • 举报
回复
单项同步是没有问题的,只是在另一台机器也写上触发器的话。就会出现

其他事务正在使用事务的上下文 的错误
加载更多回复(6)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧