zoukankan      html  css  js  c++  java
  • OGG19版本源端新增字段,目标端复制进程不报错,使用MAPALLCOLUMNS进行测试

    一、需求,OGG19版本源端新增字段,目标端复制进程不报错,而是直接跳过这个字段进行同步数据了

    现在客户提了一个需求,能否让OGG在不同步DDL的情况下,源端新增字段后,目标端OGG复制进程abend提示表结构不一致!

    找了半天,找到一个可能相关的OGG参数,接下来使用这个参数进行测试!!!MAPALLCOLUMNS参数

    着急结果的朋友们直接看此处总结: 无论何种办法,源端新增字段,目标端没有同步这个字段的情况下,OGG会自动跳过!因此需要规范化操作!!!

    Oracle优先保障数据同步的实时性

    1. 正常OGG链路同步测试,正常
    2.使用MAPALLCOLUMNS参数表级别生效,模拟源端新增字段测试
    3.对新增字段重新add trandata测试,新增字段在目标端直接忽略跳过,OGG不报错
    4.对测试表级别使用NOMAPALLCOLUMNS参数,无效果,OGG不报错
    5.对复制进程层面使用MAPALLCOLUMNS参数,测试新增字段,OGG目标端不报错;
    6.对复制进程层面使用MAPALLCOLUMNS参数 + assumetargetdefs参数,测试新增字段,OGG目标端不报错

    备注说明:本次测试源端、目标端环境为同数据库类型,如果是Oracle->Mysql 有同事在参数使用MAPALLCOLUMNS,如果未手工同步DDL,即使OGG版本19一样abend!!!

    二、测试步骤

    2.1. 正常OGG链路同步测试,正常

    EXT_GBK
    SETENV (ORACLE_SID = "gbkt1")
    EXTTRAIL /u01/ogg/base/dirdat/ext_gbk/cc
    TABLE YZ.TEST00A1;
    TABLE YZ.TEST00A2;
    
    SQL> desc YZ.TEST00A2
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     OWNER                                              VARCHAR2(30)
     OBJECT_NAME                                        VARCHAR2(128)
     SUBOBJECT_NAME                                     VARCHAR2(30)
     OBJECT_ID                                          NUMBER
     DATA_OBJECT_ID                                     NUMBER
     OBJECT_TYPE                                        VARCHAR2(19)
     CREATED                                            DATE
     LAST_DDL_TIME                                      DATE
     TIMESTAMP                                          VARCHAR2(19)
     STATUS                                             VARCHAR2(7)
     TEMPORARY                                          VARCHAR2(1)
     GENERATED                                          VARCHAR2(1)
     SECONDARY                                          VARCHAR2(1)
     NAMESPACE                                          NUMBER
     EDITION_NAME                                       VARCHAR2(30)
    GGSCI (t1) 52> info d_gbk_a,detail
      Trail Name                                       Seqno        RBA     Max MB Trail Type
      /u01/ogg/base/dirdat/gbk/aa                          9   19439384        200 RMTTRAIL  
      Extract Source                          Begin             End             
      /u01/ogg/base/dirdat/ext_gbk/cc000000021  2021-07-01 11:04  2021-06-13 05:04
      
    GGSCI (t2) 10> info rep_gbk,detail
    Log Read Checkpoint  File /u01/ogg/base/dirdat/gbk/aa000000009
    map yz.TEST00A1 ,target bak_yz.TEST00A1;
    map yz.TEST00A2 ,target bak_yz.TEST00A2,MAPALLCOLUMNS;
    --测试环境性能太差,从集成抽取降级为经典模式抽取
    https://blog.csdn.net/zzt_2009/article/details/105581190
    EXTRACT     RUNNING     EXT_GBK     00:03:11      00:00:03    
    Log Read Checkpoint  Oracle Integrated Redo Logs
    
    GGSCI (t1 as ogg@gbkt1) 200> dblogin USERID ogg,PASSWORD OGG
    Successfully logged into database.
    
    GGSCI (t1 as ogg@gbkt1) 201> info EXTRACT EXT_GBK downgrade
    ERROR: Extract EXT_GBK is not ready to be downgraded because recovery SCN values are not set.
    SQL> select current_scn from v$database;
    CURRENT_SCN
    -----------
        4063221
    >stop ext_gbk
    >alter EXTRACT EXT_GBK,scn 4063221
    > info EXTRACT EXT_GBK downgrade
    Extract EXT_GBK is ready to be downgraded from integrated capture. Archive logs corresponding to SCN 4063221
    and higher must be accessible by the downgraded extract. >ALTER EXTRACT EXT_GBK DOWNGRADE INTEGRATED TRANLOG Extract EXT_GBK successfully downgraded from integrated capture. > start ext_gbk
    --测试数据一致
    select count(*) from yz.test00a1;
      COUNT(*)
    ----------
         86581
    select count(*) from yz.test00a2;
    select count(*) from bak_yz.test00a1;
    select count(*) from bak_yz.test00a2;
    
    create public database link gbk_db_link1 connect to SYSTEM identified by oracle using '10.0.0.31:1521/gbkt1';
    create table bak_yz.TEST00A1 as select * from yz.test00a1@gbk_db_link1;
    create table bak_yz.TEST00A2 as select * from yz.test00a1@gbk_db_link1;
    -OGG TEST
    delete yz.test00a1 where rownum=1;
    delete yz.test00a2 where rownum=1;
    commit;
    
    Target 数据正常同步!!!

    2.2.使用MAPALLCOLUMNS参数表级别生效,模拟源端新增字段测试

    测试
    Source 新增字段
    alter table yz.test00a1 add test001 varchar2(20);
    SQL> insert into yz.test00a1(OBJECT_ID,TEST001) values(6666666,'qwer');
    SQL> commit;
    select OBJECT_ID,TEST001 from yz.TEST00A1 where object_id=6666666;
     OBJECT_ID TEST001
    ---------- --------------------
       6666666 qwer
    
    target
    select OBJECT_ID from bak_yz.TEST00A1 where object_id=6666666;
     OBJECT_ID
    ----------
       6666666
    
    --另一个表!
    alter table yz.test00a2 add test001 varchar2(20);
    insert into yz.test00a2(OBJECT_ID,TEST001) values(6666666,'qwer');
     commit;
    select OBJECT_ID,TEST001 from yz.TEST00A2 where object_id=6666666;
     OBJECT_ID TEST001
    ---------- --------------------
       6666666 qwer
    Target
    SQL> select OBJECT_ID from bak_yz.TEST00A2 where object_id=6666666;
     OBJECT_ID
    ----------
       6666666
    --无报错!!!

    2.3.对新增字段重新add trandata测试,新增字段在目标端直接忽略跳过,OGG不报错

    ---Source 对表重新add trandata
    GGSCI (t1 as ogg@gbkt1) 256> delete trandata yz.test00a2
    GGSCI (t1 as ogg@gbkt1) 257> add trandata yz.test00a2
    GGSCI (t1 as ogg@gbkt1) 258> info trandata yz.TEST00A2
    Columns supplementally logged for table YZ.TEST00A1: "CREATED", "DATA_OBJECT_ID", "EDITION_NAME", "GENERATED", 
    "LAST_DDL_TIME", "NAMESPACE", "OBJECT_ID", "OBJECT_NAME", "OBJECT_TYPE", "OWNER", "SECONDARY", "STATUS",
    "SUBOBJECT_NAME", "TEMPORARY", "TIMESTAMP". Columns supplementally logged for table YZ.TEST00A1: "CREATED", "DATA_OBJECT_ID", "EDITION_NAME", "GENERATED",
    "LAST_DDL_TIME", "NAMESPACE", "OBJECT_ID", "OBJECT_NAME", "OBJECT_TYPE", "OWNER", "SECONDARY", "STATUS",
    "SUBOBJECT_NAME", "TEMPORARY", "TEST001", "TIMESTAMP". Source 再次插入测试 insert into yz.test00a1(OBJECT_ID,TEST001) values(6666667,'qwer'); commit; select OBJECT_ID,TEST001 from yz.TEST00A1 where object_id=6666667; Target select OBJECT_ID from bak_yz.TEST00A1 where object_id=6666667; OBJECT_ID ---------- 6666667 insert into yz.test00a2(OBJECT_ID,TEST001) values(6666667,'qwer'); commit; select OBJECT_ID,TEST001 from yz.TEST00A2 where object_id=6666667; Target select OBJECT_ID from bak_yz.TEST00A2 where object_id=6666667; OBJECT_ID ---------- 6666667 不报错!!!

    2.4.对测试表级别使用NOMAPALLCOLUMNS参数,无效果,OGG不报错

    --换一个参数
    NOMAPALLCOLUMNS
    --
    map yz.TEST00A2 ,target bak_yz.TEST00A2,noMAPALLCOLUMNS;
    再次测试
    alter table yz.test00a2 add test002 varchar2(20);
    insert into yz.test00a2(OBJECT_ID,TEST002) values(6666668,'qwer');
    commit;
    select OBJECT_ID,TEST002 from yz.TEST00A2 where object_id=6666668;
     OBJECT_ID TEST002
    ---------- --------------------
       6666668 qwer
    Target
    select OBJECT_ID from bak_yz.TEST00A2 where object_id=6666668;
     OBJECT_ID
    ----------
       6666668
    NOMAPALLCOLUMNS
    
    source
    insert into yz.test00a2(OBJECT_ID,TEST002) values(6666669,'qwer');
    commit;
    target
    select OBJECT_ID from bak_yz.TEST00A2 where object_id=6666669;
     OBJECT_ID
    ----------
       6666669


    2.5.对复制进程层面使用MAPALLCOLUMNS参数,测试新增字段,OGG目标端不报错;

    --参数级别
    map yz.TEST00A2 ,target bak_yz.TEST00A2;
    MAPALLCOLUMNS
    map yz.TEST00A1 ,target bak_yz.TEST00A1;
    
    Source 新增字段
    alter table yz.test00a1 add test001 varchar2(20);
    SQL> insert into yz.test00a1(OBJECT_ID,TEST001) values(6666666,'qwer');
    SQL> commit;
    select OBJECT_ID,TEST001 from yz.TEST00A1 where object_id=6666666;
     OBJECT_ID TEST001
    ---------- --------------------
       6666666 qwer
    
    target
    select OBJECT_ID from bak_yz.TEST00A1 where object_id=6666666;
     OBJECT_ID
    ----------
       6666666
    
    --另一个表!
    alter table yz.test00a2 add test001 varchar2(20);
    insert into yz.test00a2(OBJECT_ID,TEST001) values(6666666,'qwer');
     commit;
    select OBJECT_ID,TEST001 from yz.TEST00A2 where object_id=6666666;
     OBJECT_ID TEST001
    ---------- --------------------
       6666666 qwer
    Target
    SQL> select OBJECT_ID from bak_yz.TEST00A2 where object_id=6666666;
     OBJECT_ID
    ----------
       6666666
    --无报错!!!


    2.6.对复制进程层面使用MAPALLCOLUMNS参数 + assumetargetdefs参数,测试新增字段,OGG目标端不报错

    !!! 使用参数!
    GGSCI (t2) 16> stop rep_gbk
    assumetargetdefs
    GGSCI (t2) 18> start rep_gbk
    
    
    再次测试
    Source 新增字段
    alter table yz.test00a1 add test002 varchar2(20);
    insert into yz.test00a1(OBJECT_ID,TEST002) values(6666666,'qwer');
    commit;
    select OBJECT_ID,TEST002 from yz.TEST00A1 where object_id=6666666;
     OBJECT_ID TEST002
     ---------- --------------------
       6666666
       6666666 qwer
       
    target
    select OBJECT_ID from bak_yz.TEST00A1 where object_id=6666666;
     OBJECT_ID
    ----------
       6666666
       6666666
       
       
    --另一个表!
    alter table yz.test00a2 add test002 varchar2(20);
    insert into yz.test00a2(OBJECT_ID,TEST002) values(6666666,'qwer');
     commit;
    select OBJECT_ID,TEST002 from yz.TEST00A2 where object_id=6666666;
     OBJECT_ID TEST002
    ---------- --------------------
       6666666
       6666666 qwer
    Target
    SQL> select OBJECT_ID from bak_yz.TEST00A2 where object_id=6666666;
     OBJECT_ID
    ----------
       6666666
       6666666
  • 相关阅读:
    linux 网络相关
    工作随笔
    python
    trouble-shooting
    MySQL常见问题总结
    根据 Request 获取客户端 IP
    文件上传按钮优化
    Linux中RabbitMQ安装
    linux 完全卸载MySQL
    Linux 下安装 MySQL-5.7.24
  • 原文地址:https://www.cnblogs.com/lvcha001/p/15100445.html
Copyright © 2011-2022 走看看