首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle Redo Log 遺失後的三種恢復情境與操作手冊

     編輯:Oracle 資料庫相關知識

現象

誤刪 REDO01~03.LOG 導致資料庫無法正常啟動(ORA-00313、ORA-00312 等錯誤)。恢復策略取決於遺失的日誌組狀態:Current(當前)、Active(作用中)、Inactive/Unused(非作用中/未使用)。

通用前置步驟

  1. sqlplus /nolog
  2. CONNECT / AS SYSDBA(或指定實例 CONNECT /@instancename AS SYSDBA)
  3. STARTUP MOUNT — 掛載資料庫,不開啟,可操作控制檔、日誌檔、資料檔。
  4. 查詢狀態:
    SELECT * FROM v$logfile;  -- 檔案路徑、群組號
    SELECT * FROM v$log;      -- 群組狀態:CURRENT, ACTIVE, INACTIVE, UNUSED, CLEARING...

情境一:遺失非當前、已歸檔的日誌組(最輕鬆)

狀態顯示 INACTIVE 且已歸檔。執行:

ALTER DATABASE CLEAR LOGFILE GROUP n;

n 為群組號。Oracle 會自動建立新日誌檔並標記為 UNUSED。

情境二:遺失非當前、未歸檔的日誌組

狀態 ACTIVE 或 INACTIVE 但未歸檔。強制清除(會導致未歸檔內容永久遺失,需後續完整備份):

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n;

執行後務必立即進行完整熱備份,否則無法做時間點恢復。

情境三:遺失當前日誌組(最棘手)

若上述 CLEAR 失敗(報 ORA-01624),表示日誌組為 CURRENT。需執行未完成恢復:

RECOVER DATABASE UNTIL CANCEL;

依提示應用可用的歸檔日誌,直到無法繼續輸入 CANCEL,再 ALTER DATABASE OPEN RESETLOGS 開啟資料庫。資料會遺失至最後一個可用歸檔日誌為止。

事後必做

  • 立即執行完整備份(RMAN 或 EXP/冷備份)。
  • 檢查 V$LOG 確認所有群組狀態正常。
  • 若採用 Data Guard,需重新同步 Standby 端。

預防建議

  1. 多路徑多重做日誌:每組至少 2 個成員,分置不同磁碟/控制器。
  2. 啟用歸檔模式並監控歸檔目的地空間。
  3. 設定 RMAN 備份策略包含控制檔與 SPFILE 自動備份。
  4. 建立告警腳本監控 V$LOG 狀態異常。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved