1. 程式人生 > 其它 >OGG19版本源端新增欄位,目標端複製程序不報錯,使用MAPALLCOLUMNS進行測試

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