由於虛擬機器宿主機重啟,導致很多虛擬機器服務需要重點關注,其中一個DG的從庫和另一個report庫有OGG同步,所以這裡再系統恢復後檢查OGG狀態的時候,果然目標端的REPLICAT程式處於abend狀態,重啟也無效,具體資訊如下:
一、錯誤資訊
目標端ggserr.log
2018-07-29 10:15:56 INFO OGG-06510 Oracle GoldenGate Delivery for Oracle, reprpt01.prm: Using the following key columns for target table GGS.T_EMP. 2018-07-29 10:15:56 ERROR OGG-01163 Oracle GoldenGate Delivery for Oracle, reprpt01.prm: Bad column length (21) specified for column BANK in table CU.T_EMP, maximum allowable length is 20. 2018-07-29 10:15:56 ERROR OGG-01668 Oracle GoldenGate Delivery for Oracle, reprpt01.prm: PROCESS ABENDING.
二、錯誤原因
從錯誤日誌看出這裡由於源端和目標端的表結構不一致,導致ogg程式啟動失敗。這種一般是由於源改了表結構,目標端沒改,在源和目標程式不重啟的情況下不影響同步,一旦重啟程式則無法直接同步,即報如上錯誤。
三、處理過程
1.排查源端和目標端的表結構
(果然表結構不一致,目標端通過alter table GGS.T_EMP modify BANK varchar2(21);更改後重啟目標端程式,依舊報錯)
2.通過源端和目標端建立表定義檔案的方式完成同步
源端配置
1)配置表定義檔案
GGSCI (cus) 1> edit params defen.prm defsfile /ogg/dirdef/cus.def userid ggs ,password ggspass table CUS.t_emp;
defgen paramfile ./dirprm/defgen.prm
在dirdef目錄生成檔案dirdef/cus.def ,具體內容如下
後面內容就不截圖了,包含現有表結構的實際定義內容等。
2)源端的表定義檔案scp到目標端的./dirdef目錄下
目標端配置
3)目錄端的replicat程式配置檔案新增內容
GGSCI (cusreport) 2> edit params REPRPT01
sourcedefs /ogg/dirdef/cus.def override
##切記一定要假如override,否則不會生效
4)重啟目標端
GGSCI (cusreport) 3> start REPRPT01
至此OGG資料同步恢復。