一、需求,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<br></br> 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", <br></br>"LAST_DDL_TIME", "NAMESPACE", "OBJECT_ID", "OBJECT_NAME", "OBJECT_TYPE", "OWNER", "SECONDARY", "STATUS", <br></br>"SUBOBJECT_NAME", "TEMPORARY", "TIMESTAMP".
Columns supplementally logged for table YZ.TEST00A1: "CREATED", "DATA_OBJECT_ID", "EDITION_NAME", "GENERATED", <br></br>"LAST_DDL_TIME", "NAMESPACE", "OBJECT_ID", "OBJECT_NAME", "OBJECT_TYPE", "OWNER", "SECONDARY", "STATUS", <br></br>"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

标签: 报错, ID, select, OBJECT, TEST00A2, MAPALLCOLUMNS, OGG19, yz

相关文章推荐

添加新评论,含*的栏目为必填