双向复制的问题,请高手解决

[复制链接]
查看11 | 回复2 | 2008-12-31 11:37:00 | 显示全部楼层 |阅读模式
一、环境如下:
1、
一个复制服务:rs
集中库:sjdb
分库1:dsdb1
分库2:dsdb2
分库3:dsdb3
。。。
2、集中库和分库中都有
tb1(id varchar(10) not null,a varchar(10) null,b varchar(10) null)
tb2(id varchar(10) not null,b varchar(10) null,c varchar(20) null)
两张表。都是双向复制。
3、集中库的tb1上建触发器,当tb1的b字段更新时,将b的值写入tb2的b,使tb2.b=tb1.b。分库中不建触发器。
二、复制配置情况
1、分库往集中库复制。所有数据都复制。
2、集中库往分库复制。集中库往分库复制时,根据表中字段 b 来区分复制到哪个分库。若b=1,则复制到,分库1,若b=2则复制到分库2,依此类推。当b=0或空时,不复制到分库。
三、更新数据库过程及问题如下:
步骤一、在集中库中tb1和tb2中插入一条记录,b=0,此时数据不会复制到分库
步骤二、更新tb1的b=1,触发器生效,使tb2.b=tb1.b,此时tb1和tb2的数据被复制到分库1。
步骤三、更新分库1中tb1.b=0。此时分库往集中库的复制生效,集中库中的tb1.b被更新为0
步骤四、再次更新集中库中的tb1.b=1,触发器生效,使tb2.b=tb1.b=1。此时,集中库往分库1的复制出现问题。日志提示出现主键冲突,无法插入。即复制到分库1时,不是对记录进行更新,而是重新插入该条记录。导致dsi down。当然删除分库1中的记录再resume就可以了,但是因为这四步是必须会有的步骤,不可能不停的删除分库中的记录。请教高手如何解决,或者有无替代方法。
[ 本帖最后由 xygulu 于 2008-12-31 16:51 编辑 ]
回复

使用道具 举报

千问 | 2008-12-31 11:37:00 | 显示全部楼层
难道没有办法解决吗?
回复

使用道具 举报

千问 | 2008-12-31 11:37:00 | 显示全部楼层
经高手指点,问题已经解决了
在分库所挂接的rs server上
set autocorrection on for xxxx_def(复制定义) with replicate at 分库的server.分库
go
然后就不会再duplicate key错了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行