本文以 Windows 平台搭配 Oracle 10g R2,並啟用 Archive 模式為測試環境。模擬場景為:資料庫正常關閉後發現 Redo Log 檔案遺失,需進行緊急恢復操作。
若僅遺失一個或多個 Redo 群組中的單一成員,處理相對簡單:直接從其他目錄複製完好的成員檔案,隨後重新啟動資料庫即可恢復正常運作。
當一組、兩組甚至所有 Redo Log 群組全數遺失時,可採用以下三種恢復方式,本文重點示範 CLEAR LOGFILE 方法。
模擬最嚴重的全遺失場景,先關閉資料庫,再從作業系統層面刪除所有 Redo Log 檔案。
SQL> STARTUP
Oracle 執行個體已啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 255855492 bytes
Database Buffers 348127232 bytes
Redo Buffers 7135232 bytes
資料庫已裝載完畢。
ORA-00313: 無法開啟日誌組 1 (用於執行緒 1) 的成員
ORA-00312: 聯機日誌 1 執行緒 1: 'E:\Oracle\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'
ORA-00312: 聯機日誌 1 執行緒 1: 'F:\REDO\REDO01_B.LOG'
SQL> SELECT group#, members, archived, status FROM v$log;
GROUP# MEMBERS ARC STATUS
------ ------- --- --------
1 2 YES INACTIVE
2 2 NO CURRENT
3 2 YES INACTIVE
先處理 INACTIVE 的 Group 1:
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
資料庫已更改。
SQL> ALTER DATABASE OPEN;
第 1 行出現錯誤:
ORA-00313: 無法開啟日誌組 2 (用於執行緒 1) 的成員
ORA-00312: 聯機日誌 2 執行緒 1: 'E:\Oracle\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'
ORA-00312: 聯機日誌 3 執行緒 1: 'F:\REDO\REDO02_B.LOG'
因 Group 2 為 CURRENT 狀態,直接 CLEAR 會報錯 ORA-00350: 日誌需要歸檔。
SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
資料庫已更改。
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;
資料庫已更改。
SQL> ALTER DATABASE OPEN;
資料庫已更改。
CLEAR LOGFILE 僅能搭配複製有效的物理備份使用,否則無法恢復。