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
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章