OGG目標端比源端字段多測試


1.1需求

需求,客戶需要在OGG災備目標端環境進行發版(對應的工作就是目標端表新增字段),結果就是OGG復制進程報錯!
測試模擬如何處理這個問題;

1.2實驗環境准備

實驗環境准備
源端
SQL> delete dd ;
commit;
目標端查詢
select * from dd;
no rows selected

 

1.3測試

1)COLMAP參數使用

目標端新增一個字段
alter table dd add hcc_name varchar2(200);
OGG參數
assumetargetdefs

源insert
insert into dd values(1,2,sysdate);
commit;
目標端正常【是不是非常不正常???字段都不一致了,怎么插入數據不報錯呢????]
select id,hcc_name from dd;
        ID HCC_NAME
---------- ----------
         1
         
源insert
insert into dd(id,cc_name,WITTIME) values(2,2,sysdate);
commit;
目標端
select id,hcc_name from dd
        ID HCC_NAME
---------- ----------
         2
         1

源端復制進程stop,start
源insert
insert into dd(id,cc_name,WITTIME) values(4,2,sysdate);
commit;
目標端
select id,hcc_name from dd;
2020-11-11 06:37:36  ERROR   OGG-00918  Key column HCC_NAME is missing from map.
!OGG有個特點,只有進程啟動的時候才會去重新讀取表定義信息,因此有的時候你發現兩個表的表結構早就不一致但是不報錯,但是某個時刻其它原因導致進程abend后再次啟動,
出現各種提示表結構不一致的錯誤。 此時解決方法?
1.源端刪除字段,再次進行同步; 2.使用COLMAP 對每個字段進行同步指定 MAP YZ.DD ,TARGET BAK_YZ.DD,COLMAP(ID=ID,CC_NAME=CC_NAME,WITTIME=WITTIME,HCC_NAME=''); 此時目標端新增的字段用null處理 SQL> select id,hcc_name from dd; ID HCC_NAME ---------- ---------- 2 4 1

 

2)源端新增字段后,兩邊表結構一致,測試確保數據正常同步

如果目標端進行發版,刪除colmap參數后,新增字段是否能進行同步;
源端新增字段
alter table dd add hcc_name varchar2(200);
源insert
insert into dd values(2,2,sysdate,5);
commit;
目標端
select id,hcc_name from dd
2020-11-11 06:50:09  ERROR   OGG-00918  Key column HCC_NAME is missing from map.

dump查詢
GGSCI (t2) 100> info repa
REPLICAT   REPA      Last Started 2020-11-11 06:45   Status ABENDED
Checkpoint Lag       00:00:00 (updated 00:02:59 ago)
Log Read Checkpoint  File /u01/ogg/base/dirdat/t1000000056
                     2020-11-10 22:29:22.808704  RBA 3454
---打開文件
Logdump 9 >open /u01/ogg/base/dirdat/t1000000056
--查看header record信息 
Logdump 15 >ghdr on
---查看列信息,包括number和長度
Logdump 16 >detail on
-----To add hex and ASCII data values to the column information
Logdump 17 >detail data
---查看用戶定義的信
Logdump 18 >usertoken on
Logdump 19 >pos 3454
 ---顯示下一條記錄
Logdump 19 >n
___________________________________________________________________ 
Hdr-Ind    :     E  (x45)     Partition  :     .  (x0c)  
UndoFlag   :     .  (x00)     BeforeAfter:     A  (x41)  
RecLength  :    53  (x0035)   IO Time    : 2020/11/11 06:50:03.741.070   
IOType     :     5  (x05)     OrigNode   :   255  (xff) 
TransInd   :     .  (x03)     FormatType :     R  (x52) 
SyskeyLen  :     0  (x00)     Incomplete :     .  (x00) 
AuditRBA   :        355       AuditPos   : 5406736 
Continued  :     N  (x00)     RecCount   :     1  (x01) 

2020/11/11 06:50:03.741.070 Insert               Len    53 RBA 3454 
Name: YZ.DD  (TDR Index: 2) 
After  Image:                                             Partition x0c   G  s   
 0000 0500 0000 0100 3201 0005 0000 0001 0032 0200 | ........2........2..  
 1f00 0000 3230 3230 2d31 312d 3130 3a32 323a 3530 | ....2020-11-10:22:50  
 3a30 332e 3030 3030 3030 3030 30                  | :03.000000000  
Column     0 (x0000), Len     5 (x0005)  
 0000 0100 32                                      | ....2  
Column     1 (x0001), Len     5 (x0005)  
 0000 0100 32                                      | ....2  
Column     2 (x0002), Len    31 (x001f)  
 0000 3230 3230 2d31 312d 3130 3a32 323a 3530 3a30 | ..2020-11-10:22:50:0  
 332e 3030 3030 3030 3030 30                       | 3.000000000 

dump文件中只有3個列的數據變換,確實不存在第四個字段

源端需要對新增字段添加最小補充日志
GGSCI (t1 as ogg@t1) 30> dblogin USERID ogg,PASSWORD ogg
Successfully logged into database.
GGSCI (t1 as ogg@t1) 31> info trandata yz.dd
Logging of supplemental redo log data is enabled for table YZ.DD.
Columns supplementally logged for table YZ.DD: "CC_NAME", "ID", "WITTIME".
Prepared CSN for table YZ.DD: 2594737
GGSCI (t1 as ogg@t1) 32> delete trandata yz.dd
2020-11-10 22:52:03  INFO    OGG-15142  Logging of supplemental redo log data disabled for table YZ.DD.
2020-11-10 22:52:03  INFO    OGG-15139  TRANDATA for scheduling columns has been disabled on table YZ.DD.
GGSCI (t1 as ogg@t1) 33> add trandata yz.dd
2020-11-10 22:52:09  WARNING OGG-06439  No unique key is defined for table DD. All viable columns will be used to represent the key,
but may not guarantee uniqueness. KEYCOLS may be used to define the key.
2020-11-10 22:52:09 INFO OGG-15130 No key found for table YZ.DD. All viable columns will be logged. 2020-11-10 22:52:09 INFO OGG-15132 Logging of supplemental redo data enabled for table YZ.DD. 2020-11-10 22:52:09 INFO OGG-15133 TRANDATA for scheduling columns has been added on table YZ.DD. 2020-11-10 22:52:09 INFO OGG-15135 TRANDATA for instantiation CSN has been added on table YZ.DD. --目標端ogg 恢復COLMAP暫時處理這一條臟數據后,注釋COLAP參數,再次測試。 源insert insert into dd values(5,2,sysdate,5); commit; 目標端 select id,hcc_name from dd insert into dd values(6,2,sysdate,5); commit; Logdump 91 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x00) UndoFlag : . (x00) BeforeAfter: A (x41) RecLength : 77 (x004d) IO Time : 2020/11/10 23:01:56.201.496 IOType : 170 (xaa) OrigNode : 1 (x01) TransInd : . (x03) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) DDR/TDR Idx: (003, 000) AuditPos : 7548432 Continued : N (x00) RecCount : 1 (x01) 2020/11/10 23:01:56.201.496 Metadata Len 77 RBA 3831 Database Name: * DDR Version: 1 Database type: ORACLE Character set ID: UTF-8 National character set ID: UTF-16 Locale: neutral Case sensitivity: 14 14 14 14 14 14 14 14 14 14 14 14 11 14 14 14 TimeZone: GMT Global name: T1 * Logdump 92 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x00) UndoFlag : . (x00) BeforeAfter: A (x41) RecLength : 544 (x0220) IO Time : 2020/11/10 23:01:56.201.497 IOType : 170 (xaa) OrigNode : 2 (x02) TransInd : . (x03) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) DDR/TDR Idx: (003, 003) AuditPos : 7548432 Continued : N (x00) RecCount : 1 (x01) 2020/11/10 23:01:56.201.497 Metadata Len 544 RBA 3959 Table Name: YZ.DD * 1)Name 2)Data Type 3)External Length 4)Fetch Offset 5)Scale 6)Level 7)Null 8)Bump if Odd 9)Internal Length 10)Binary Length 11)Table Length 12)Most Sig DT 13)Least Sig DT 14)High Precision 15)Low Precision 16)Elementary Item 17)Occurs 18)Key Column 19)Sub DataType 20)Native DataType 21)Character Set 22)Character Length 23)LOB Type 24)Partial Type * TDR version: 11 Definition for table YZ.DD Record Length: 830 Columns: 6 ID 64 50 0 0 0 1 0 50 50 50 0 0 0 0 1 0 1 2 2 -1 0 0 0 CC_NAME 64 200 56 0 0 1 0 200 200 0 0 0 0 0 1 0 1 0 1 -1 0 0 0 WITTIME 192 29 262 0 0 1 0 29 29 29 0 6 0 0 1 0 1 0 187 -1 0 0 0 SYS_NC00004$ 64 36 294 0 0 1 0 18 18 0 0 0 0 0 1 0 0 4 23 -1 0 0 0 property: 0x0000000000030128 SYS_NC00005$ 64 602 318 0 0 1 0 301 301 0 0 0 0 0 1 0 0 4 23 -1 0 0 0 property: 0x0000000000030128 HCC_NAME 64 200 624 0 0 1 0 200 200 0 0 0 0 0 1 0 1 0 1 -1 0 0 0 End of definition Logdump 93 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag : . (x00) BeforeAfter: A (x41) RecLength : 62 (x003e) IO Time : 2020/11/11 07:01:53.746.059 IOType : 5 (x05) OrigNode : 255 (xff) TransInd : . (x03) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 355 AuditPos : 7548432 Continued : N (x00) RecCount : 1 (x01) 2020/11/11 07:01:53.746.059 Insert Len 62 RBA 4559 Name: YZ.DD (TDR Index: 3) After Image: Partition x0c G s 0000 0500 0000 0100 3601 0005 0000 0001 0032 0200 | ........6........2.. 1f00 0000 3230 3230 2d31 312d 3130 3a32 333a 3031 | ....2020-11-10:23:01 3a35 342e 3030 3030 3030 3030 3005 0005 0000 0001 | :54.000000000....... 0035 | .5 Column 0 (x0000), Len 5 (x0005) 0000 0100 36 | ....6 Column 1 (x0001), Len 5 (x0005) 0000 0100 32 | ....2 Column 2 (x0002), Len 31 (x001f) 0000 3230 3230 2d31 312d 3130 3a32 333a 3031 3a35 | ..2020-11-10:23:01:5 342e 3030 3030 3030 3030 30 | 4.000000000 Column 5 (x0005), Len 5 (x0005) 0000 0100 35 | ....5 非常無語的是什么呢,源端手工新增字段,源端的抽取進程也需要重啟,否則即使ADD TRANDATA 新增字段,插入新增字段的數據,在dump文件中不能不會得到體現! 如果新增字段,最好的方法是,源端stop 抽取進程,源端新增字段,源端delete ,add trandata 等待目標端OGG進程應用完畢殘余dump變換后,目標端新增字段,源端啟動抽取進程,
目標端啟動應用復制進程。 或者目標端等待OGG 復制進程報錯提示字段缺失,手工增加字段,重啟啟動復制進程,源端順序不變。 源端 SQL
> insert into dd values(8,2,sysdate,5); 1 row created. SQL> commit; 目標端 SQL> select id,hcc_name from dd where id=8; ID HCC_NAME ---------- ---------- 8 5

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM