xygulu 发表于 2008-12-31 10:40

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

一、环境如下:
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 编辑 ]

xygulu 发表于 2009-01-04 17:45

回复 #1 xygulu 的帖子

自己顶,难道没有解决的办法吗?

Eisen 发表于 2009-01-07 13:51

简单,在分库所挂接的rs server上
set autocorrection on for xxxx_def(复制定义) with replicate at 分库的server.分库
go
然后就不会再duplicate key错了

xygulu 发表于 2009-01-08 12:22

根据Eisen 大侠的指导,问题已经解决了。看来还是自己对sybase的复制系统不熟啊。多谢:mrgreen:
页: [1]
查看完整版本: 双向复制的问题,请高手解决