前言
今天在測試 OGG 一個功能的時候,需要重新初始化 oggca,所以重裝了一下 OGG。重建完之后重新添加抽取進程報錯,一直無法添加成功:
經過一翻分析,找到了解決方案,本文記錄一下解決過程。
問題描述
OGG 重裝之前,沒有清理原先抽取進程,重裝后,抽取進程重建失敗!
原因是因為添加抽取進程時,會在數據庫中的一些表里創建一些數據,用來記錄抽取進程的信息。
- dba_capture:displays information about all capture processes in the database.
- dba_apply:displays information about all apply processes in the database.
- system.logmnr_*
如果重建同名進程時未清理對應的記錄,會導致無法成功創建抽取進程。
問題解決
經過在 MOS 查找對應的解決方案,最終解決問題。
參考 MOS 文檔:Unable To Register OGG Extract (Doc ID 2861271.1)
根據 MOS 提供的清理步驟:
SQL> select session# from system.logmnr_session$ where session_name like '%E_MYSQL%';-- 執行清理
SQL> delete from system.logmnr_spill$ where session# = 1;
delete from system.logmnr_age_spill$ where session# = 1;
delete from system.logmnr_log$ where session# = 1;
delete from system.logmnr_restart_ckpt$ where session# = 1;
delete from system.logmnr_restart_ckpt_txinfo$ where session# = 1;
delete from system.logmnr_filter$ where session# = 1;
delete from system.logmnr_parameter$ where session# = 1;
delete from system.logmnr_global$ where session# = 1;
delete from system.logmnr_session$ where session# = 1;
commit;
清理后再次添加抽取進程,依然報錯。
參考 MOS 文檔:Add Extract on GGMA Fails By OGG-08241 (Doc ID 2936927.1)
根據 MOS 提供的清理步驟:
SQL> select capture_name from dba_capture where capture_name like '%E_MYSQL%';CAPTURE_NAME
----------------------------------------------------------------------------------------------------
OGG$CAP_E_MYSQLSQL> exec dbms_capture_adm.stop_capture('OGG$CAP_E_MYSQL');
SQL> exec dbms_capture_adm.drop_capture('OGG$CAP_E_MYSQL');SQL> select apply_name from dba_apply where apply_name like '%E_MYSQL%';APPLY_NAME
----------------------------------------------------------------------------------------------------
OGG$E_MYSQLSQL> exec dbms_apply_adm.stop_apply('OGG$E_MYSQL');
SQL> exec dbms_apply_adm.drop_apply('OGG$E_MYSQL');
再次添加抽取進程:
創建成功。問題解決!