一、基礎狀態檢查
-
數據庫角色與模式
SELECT db_unique_name, open_mode, database_role, switchover_status FROM v$database;
預期狀態:
- 主庫:
OPEN_MODE=READ WRITE
,DATABASE_ROLE=PRIMARY
- 備庫:
OPEN_MODE=READ ONLY WITH APPLY
,DATABASE_ROLE=PHYSICAL STANDBY
- 主庫:
-
ADG配置有效性
SHOW PARAMETER log_archive_dest_2; -- 檢查歸檔目標狀態 SHOW PARAMETER log_archive_config; -- 檢查DG配置
二、日志同步健康檢查
-
主備庫歸檔一致性
-- 主備庫均執行: SELECT THREAD#, MAX(SEQUENCE#) FROM v$archived_log WHERE resetlogs_change# = (SELECT resetlogs_change# FROM v$database_incarnation WHERE status='CURRENT') GROUP BY THREAD#;
要求:主備庫的
MAX(SEQUENCE#)
差值應≤1(允許輕微延遲)。 -
檢查GAP缺口
-- 備庫執行: SELECT * FROM v$archive_gap; -- 有返回結果說明存在GAP
處理方案:
- 若返回
THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE#
,需從主庫拷貝缺失歸檔到備庫并注冊:ALTER DATABASE REGISTER PHYSICAL LOGFILE '/path/to/archive_log_seq90.arc';
- 若返回
-
傳輸與應用延遲監控
-- 備庫執行: SELECT name, value, time_computed FROM v$dataguard_stats WHERE name IN ('transport lag', 'apply lag');
閾值建議:
transport lag
(傳輸延遲)與apply lag
(應用延遲)均需 ≤ 5分鐘。
三、進程與錯誤監控
-
關鍵進程狀態
SELECT process, status, sequence#, thread# FROM v$managed_standby;
關鍵進程說明:
進程 主庫角色 備庫角色 正常狀態 LNS 存在 不存在 WRITING
MRP0 不存在 存在 APPLYING_LOG
異常狀態處理:
- MRP0狀態為
WAIT_FOR_GAP
:檢查是否存在歸檔缺口(參考第二節)。 - MRP0狀態為
WAIT_FOR_LOG
:主庫日志傳輸異常。
- MRP0狀態為
-
歸檔傳輸錯誤
-- 主庫執行: SELECT dest_name, status, error FROM v$archive_dest_status WHERE dest_id = 2; -- 對應備庫的歸檔目標
嚴重錯誤:
STATUS=ERROR
或ERROR
字段非空(如ORA-12170
網絡超時)。
四、常見問題定位
-
未應用日志檢查(備庫)
SELECT thread#, COUNT(*) FROM v$archived_log WHERE applied='NO' GROUP BY thread#;
處理:若積壓持續增長,檢查MRP0進程是否停滯。
-
日志傳輸阻塞(主庫)
-- 主庫檢查未發送日志量: WITH arch AS (SELECT thread#, MAX(sequence#) arch_seq FROM gv$managed_standby WHERE process='ARCH' GROUP BY thread#),lns AS (SELECT thread#, MAX(sequence#) lns_seq FROM gv$managed_standby WHERE process='LNS' GROUP BY thread#) SELECT a.thread#, l.lns_seq - a.arch_seq AS unsent_logs FROM arch a, lns l WHERE a.thread# = l.thread#;
閾值:
unsent_logs > 10
需排查網絡或存儲性能。 -
歸檔刪除策略
重要原則:- ? 禁止在備庫強制刪除未應用的歸檔(
DELETE FORCE
)! - 若備庫空間不足:
-- 主庫臨時停止傳輸(緩解壓力): ALTER SYSTEM SET log_archive_dest_state_2=DEFER; -- 空間釋放后恢復: ALTER SYSTEM SET log_archive_dest_state_2=ENABLE;
- ? 禁止在備庫強制刪除未應用的歸檔(
五、巡檢總結清單
類別 | 檢查項 | 頻率 | 異常處理 |
---|---|---|---|
基礎狀態 | 數據庫角色與模式 | 每日 | 檢查switchover_status |
日志同步 | 歸檔序列一致性 | 每小時 | 補注冊缺失歸檔 |
日志同步 | 傳輸與應用延遲 | 每小時 | 監控v$dataguard_stats |
進程健康 | LNS/MRP0進程狀態 | 每小時 | 重啟進程或排查GAP |
錯誤監控 | 歸檔傳輸錯誤 | 每日 | 檢查網絡/存儲日志 |
空間管理 | 歸檔未應用量 | 每日 | 避免強制刪除,主庫暫斷傳輸 |
關鍵提示:
- 主備切換(Switchover/Failover)后必須重新驗證所有巡檢項。
- 發現
UNRESOLVABLE GAP
需立即人工干預。- 備庫的
_system_trig_enabled
參數應為FALSE
(避免觸發器重復執行)。
附:進程狀態速查表
MRP0狀態 | 含義 | 緊急度 |
---|---|---|
APPLYING_LOG | 正常應用日志 | 正常 |
WAIT_FOR_GAP | 等待缺失日志 | 警告 |
WAIT_FOR_LOG | 等待新日志傳輸 | 警告 |
NOT ALLOWED | 配置錯誤/角色異常 | 嚴重 |