技术开发 频道

关于高级复制的一些数据同步

【IT168 技术文档】

    如果你原来两个数据库的表里数据不一致,你用dbms_repcat.add_master_database加表的时候用了:copy_rows=>false oracle不会帮你做同步,因为你指明了说不需要复制数据,我保证数据是一致。这样你永远别想靠replication把数据同步。
    
你要么设置copy_rows=>ture,这样oracle会把远程表清空,做数据同步。
    
要么在用dbms_repcat.add_master_database就手工把数据搞成一致,再用copy_rows=>false把表加入replication group. 一般数据比较多都应该这么做。
    
大致上你可以:
suspend replication group: BEGIN DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY (gname => 'xxx'); END; / begin DBMS_REPCAT.DROP_MASTER_REPOBJECT ( sname=>'SCOTT', oname=>'DEPT', type=>'TABLE'); end; / add the object again: BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT( gname => '"xxx"', type => 'TABLE', oname => '"DEPT"', sname => '"SCOTT"', copy_rows => TRUE, use_existing_object => TRUE); END; / gerenate support: BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'SCOTT', oname => 'SCOTT', type => 'TABLE', min_communication => TRUE, generate_80_compatible => FALSE); END; / BEGIN DBMS_REPCAT.RESUME_MASTER_ACTIVITY (gname => 'xxx'); END; /
   你的两个replication group应该没什么关联,保证你要用的那个是normal就可以了。看看dept被加到那个group了:
select gname from dba_repobject where oname='DEPT' and sname='SCOTT';


0
相关文章