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