當 Oracle 資料庫發生重做日誌損毀時,快速定位損毀檔案位置並判斷其狀態是恢復的關鍵。本文將系統說明在不同資料庫狀態下的查詢方法,以及針對不同日誌狀態的修復策略。
若資料庫正常運行,可直接查詢動態效能視圖獲取日誌資訊:
SELECT * FROM v$logfile;
SELECT * FROM v$log;
需先以 MOUNT 模式啟動實例,再查詢視圖:
STARTUP MOUNT;
SELECT * FROM v$logfile;
SELECT * FROM v$log;
最簡單情況,直接重建日誌組:
ALTER DATABASE DROP LOGFILE GROUP group_number;
ALTER DATABASE ADD LOGFILE GROUP group_number ('log_file_path', ...) SIZE log_file_size;
需清除未歸檔日誌(可能導致資料遺失,執行前請確認備份策略):
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP group_number;
同樣嘗試 CLEAR 命令,若失敗則必須執行基於時間點的不完全恢復 (PITR):
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP group_number;
-- 若失敗
-- 執行 RMAN 不完全恢復至損毀前時間點
ALTER DATABASE OPEN RESETLOGS;
完成修復並以 RESETLOGS 開啟資料庫後,務必立即執行完整資料庫備份,建立新的恢復基準點。