Logical Standby日常維護與性能優化(一)―日常維護與故障排除
Logical Standby日常維護與性能優化(一)―日常維護與故障排除
2011年09月01日
本篇主要講述logical stanby日常管理維護中的檢查和故障排除要點,不涉及性能問題。性能問題和相關調整將在下篇中單獨闡述。
Logical Standby日常維護與性能優化(二)―性能診斷與優化
10gR2大大簡化了logical stanby的創建步驟,從physical到logical的轉換步驟異常簡單,不再對搭建過程過多描述。
因爲Logical standby是SQL語句的邏輯運用,而standby是block級別的recover,從故障角度上將,Logical standby比standby stanby有更多的故障機會出現。
常用的用於維護和排查logical standby的視圖幾乎都是已”dba_logstdby_*”和“v$logstdby_*”開頭,常用的包以”dbms_logstdby.*”開 頭,具體含義根據字面意思也不難理解,不贅述(下文有部分提及)。當然,用於physical standby的部分視圖,對排查邏輯備庫也同樣適用。
1. APPLY狀態的檢查和診斷
Apply進程是邏輯SQL運用的核心。Apply進程遇到錯誤會自動終止,需要處理後手工重新啓動。因此,監控apply進度和狀態是監控邏輯備庫同步與否的關鍵,如同物理DG監控日誌同步。
(1) 監控備庫上各個進程的狀態
可以查詢v$logstdby_process視圖,用於得到與SQL APPLY相關的各進程的狀態情況.
如果沒有返回值,表示APPLY進程沒有啓動或者已停止。如果是後者,可以從alert.log文件或者dba_logstdby_events中得到更多的錯誤信息用於後續處理。
(2) Apply 進度
監控Apply進度可以得到備庫的恢復進展以及同步狀態。關聯查詢v$logstdby_progress 和dba_logstdby_log,得出目前SQL APPLY的apply scn/time以及log sequence。如果apply進程正常而主備之間同步有很大差異,需要做進一步排查。
2. SQL Apply的異常事務處理
SQL Apply的異常事務會記錄到dba_logstdby_events視圖中,對於能夠進行手工fix的異常,可以處理後重新運行apply進程。對於 某些無法處理或者修復後需要忽略的異常,通過dbms_logstdby.skip*一系列包做標記以便讓apply進程跳過。比如,我們可以對特定的錯 誤事務進行標記,通過dbms_logstdby.skip_transaction標記指定的事務而忽略該事務的運用。
在10G中,oracle提供了帶skip failed transaction子句的 SQL apply啓動語句,可以方便的對當前記錄的錯誤事務全部跳過。
SQL>alter database start logical standby apply skip failed transaction;
3.SKIP策略
Logical standby提供skip的策略,可根據實際情況跳過不想被apply的對象或者跳過特定對象上的所有錯誤事務。
dbms_logstdby.skip: 用於指定對象的DML DDL skip
dbms_logstdby.skip_error: 用於指定對象上的錯誤事務 skip
dbms_logstdby.skip_transaction: 用於指定事務 skip
4. UNSKIP與初始化
Unskip是與skip相反的操作,用於已skip操作的撤銷。對於unskip的對象,需要進行手工構造或者初始化。
Oracle提供dbms_logstdby.instantiate_table包來對指定的table初始化。我們也可以手工來構造一個當前apply scn時刻的閃回查詢版本來初始化數據。
5. DDL handle
Logical standby中提供DDL handle的功能,用於自定義的一些DDL語句處理,比如一些表對象的重命名。
需要注意的是,在邏輯備庫中,db_file_name_convert/ log_file_name_convert參數並不生效。對於路徑不同的主備體系,添加數據文件和表空間會引起邏輯備庫的apply錯誤,可以通過 DDL handle可以實現文件路徑的重命名。
ORACLE聯機文檔上的一個例子:
CREATE OR REPLACE PROCEDURE SYS.HANDLE_TBS_DDL (
OLD_STMT IN VARCHAR2,
STMT_TYP IN VARCHAR2,
SCHEMA IN VARCHAR2,
NAME IN VARCHAR2,
XIDUSN IN NUMBER,
XIDSLT IN NUMBER,
XIDSQN IN NUMBER,
ACTION OUT NUMBER,
NEW_STMT OUT VARCHAR2
) AS
BEGIN
2011年09月01日
本篇主要講述logical stanby日常管理維護中的檢查和故障排除要點,不涉及性能問題。性能問題和相關調整將在下篇中單獨闡述。
Logical Standby日常維護與性能優化(二)―性能診斷與優化
10gR2大大簡化了logical stanby的創建步驟,從physical到logical的轉換步驟異常簡單,不再對搭建過程過多描述。
因爲Logical standby是SQL語句的邏輯運用,而standby是block級別的recover,從故障角度上將,Logical standby比standby stanby有更多的故障機會出現。
常用的用於維護和排查logical standby的視圖幾乎都是已”dba_logstdby_*”和“v$logstdby_*”開頭,常用的包以”dbms_logstdby.*”開 頭,具體含義根據字面意思也不難理解,不贅述(下文有部分提及)。當然,用於physical standby的部分視圖,對排查邏輯備庫也同樣適用。
1. APPLY狀態的檢查和診斷
Apply進程是邏輯SQL運用的核心。Apply進程遇到錯誤會自動終止,需要處理後手工重新啓動。因此,監控apply進度和狀態是監控邏輯備庫同步與否的關鍵,如同物理DG監控日誌同步。
(1) 監控備庫上各個進程的狀態
可以查詢v$logstdby_process視圖,用於得到與SQL APPLY相關的各進程的狀態情況.
如果沒有返回值,表示APPLY進程沒有啓動或者已停止。如果是後者,可以從alert.log文件或者dba_logstdby_events中得到更多的錯誤信息用於後續處理。
(2) Apply 進度
監控Apply進度可以得到備庫的恢復進展以及同步狀態。關聯查詢v$logstdby_progress 和dba_logstdby_log,得出目前SQL APPLY的apply scn/time以及log sequence。如果apply進程正常而主備之間同步有很大差異,需要做進一步排查。
2. SQL Apply的異常事務處理
SQL Apply的異常事務會記錄到dba_logstdby_events視圖中,對於能夠進行手工fix的異常,可以處理後重新運行apply進程。對於 某些無法處理或者修復後需要忽略的異常,通過dbms_logstdby.skip*一系列包做標記以便讓apply進程跳過。比如,我們可以對特定的錯 誤事務進行標記,通過dbms_logstdby.skip_transaction標記指定的事務而忽略該事務的運用。
在10G中,oracle提供了帶skip failed transaction子句的 SQL apply啓動語句,可以方便的對當前記錄的錯誤事務全部跳過。
SQL>alter database start logical standby apply skip failed transaction;
3.SKIP策略
Logical standby提供skip的策略,可根據實際情況跳過不想被apply的對象或者跳過特定對象上的所有錯誤事務。
dbms_logstdby.skip: 用於指定對象的DML DDL skip
dbms_logstdby.skip_error: 用於指定對象上的錯誤事務 skip
dbms_logstdby.skip_transaction: 用於指定事務 skip
4. UNSKIP與初始化
Unskip是與skip相反的操作,用於已skip操作的撤銷。對於unskip的對象,需要進行手工構造或者初始化。
Oracle提供dbms_logstdby.instantiate_table包來對指定的table初始化。我們也可以手工來構造一個當前apply scn時刻的閃回查詢版本來初始化數據。
5. DDL handle
Logical standby中提供DDL handle的功能,用於自定義的一些DDL語句處理,比如一些表對象的重命名。
需要注意的是,在邏輯備庫中,db_file_name_convert/ log_file_name_convert參數並不生效。對於路徑不同的主備體系,添加數據文件和表空間會引起邏輯備庫的apply錯誤,可以通過 DDL handle可以實現文件路徑的重命名。
ORACLE聯機文檔上的一個例子:
CREATE OR REPLACE PROCEDURE SYS.HANDLE_TBS_DDL (
OLD_STMT IN VARCHAR2,
STMT_TYP IN VARCHAR2,
SCHEMA IN VARCHAR2,
NAME IN VARCHAR2,
XIDUSN IN NUMBER,
XIDSLT IN NUMBER,
XIDSQN IN NUMBER,
ACTION OUT NUMBER,
NEW_STMT OUT VARCHAR2
) AS
BEGIN
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.