誤刪 REDO01~03.LOG 導致資料庫無法啟動,是 DBA 面臨的高壓場景。恢復策略取決於遺失日誌組的狀態:Current(當前)、Active(作用中)、Inactive(非作用中)、Unused(未使用)。本文提供分級恢復 SOP,附關鍵視圖查詢與命令範例。
sqlplus /nolog
CONNECT / AS SYSDBA
STARTUP MOUNT; -- 僅掛載,不開啟資料庫
-- 1. 查看 Redo 文件物理路徑
SELECT * FROM v$logfile;
-- 2. 查看日誌組狀態
SELECT group#, sequence#, bytes, status, archived FROM v$log;
重點關注 STATUS 欄位:CURRENT、ACTIVE、INACTIVE、UNUSED、CLEARING、CLEARING_CURRENT。
| 日誌組狀態 | 是否已歸檔 | 恢復命令 | 說明 |
|---|---|---|---|
| INACTIVE / UNUSED | 已歸檔 | ALTER DATABASE CLEAR LOGFILE GROUP n; | 直接清除重建,無數據損失 |
| INACTIVE / UNUSED | 未歸檔 | ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n; | 強制清除,**會丟失未歸檔紅日誌**,需立即全備 |
| ACTIVE | -- | 嘗試 CLEAR,若失敗轉 RECOVER DATABASE UNTIL CANCEL | Active 表示尚未 checkpoint,可能需不完整恢復 |
| CURRENT | -- | RECOVER DATABASE UNTIL CANCEL + ALTER DATABASE OPEN RESETLOGS | **最嚴重**,需基於備份做不完整恢復並重置日誌 |
ALTER DATABASE CLEAR LOGFILE GROUP 2;
-- 若有多路徑,自動在原路徑重建同大小文件
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;
-- 警告:未歸檔紅日誌永久丟失,執行後**必須立即進行完整冷/熱備份**
-- 1. 從備份還原所有數據文件、控制文件
-- 2. 掛載資料庫
STARTUP MOUNT;
-- 3. 基於時間/SCN/取消點恢復
RECOVER DATABASE UNTIL CANCEL; -- 互動式應用歸檔日誌,輸入 CANCEL 結束
-- 或
RECOVER DATABASE UNTIL TIME '2024-05-20 14:30:00';
-- 或
RECOVER DATABASE UNTIL CHANGE 123456789;
-- 4. 重置日誌開啟
ALTER DATABASE OPEN RESETLOGS;
關鍵提醒:RESETLOGS 會產生新化身,舊備份不可直接用於後續恢復,開啟後**必須立即全備**。
ALTER DATABASE ARCHIVELOG,配合 RMAN 定時備份chattr +i 或權限收緊,防誤刪v$log 狀態變化、歸檔目的地空間、RMAN 備份狀態Redo 遺失恢復核心原則:優先 CLEAR 非當前組,當前組唯有不完整恢復 + RESETLOGS。平時做好多路徑、歸檔、備份三重保障,才能在災難發生時從容應對,將 RPO/RTO 控制在業務可接受範圍內。