歸檔模式下的資料庫恢復分為完全恢復(無資料遺失)與不完全恢復(時間點恢復,需 RESETLOGS)。本文詳細記錄 SVRMGRL/SQL*Plus 命令流程、三種不完全恢復模式與歸檔模式啟用步驟。
適用:所有線上 Redo Log 可用,將資料庫恢復至故障時刻。
$ svrmgrl
SVRMGR> CONNECT INTERNAL
SVRMGR> STARTUP MOUNT;
SVRMGR> RECOVER DATABASE;
-- 提示歸檔日志路徑,輸入 AUTO 或手動指定
SVRMGR> ALTER DATABASE OPEN;
警告:執行前**必須**做完整冷備份。RESETLOGS 會重置線上日志,舊日志失效,恢復失敗將導致資料庫無法開啟。
-- 1. 查詢最後有效歸檔日志 SCN
SELECT first_change# FROM v$log_history WHERE sequence# = 387; -- 387 為遺失日志序號
-- 2. 恢復流程
SVRMGR> CONNECT INTERNAL
SVRMGR> STARTUP MOUNT;
SVRMGR> RECOVER DATABASE UNTIL CHANGE 9999; -- 9999 為上一步查得 SCN
-- 提示日志時輸入 AUTO,遇到序號 387 自動停止
SVRMGR> ALTER DATABASE OPEN RESETLOGS;
SVRMGR> CONNECT INTERNAL
SVRMGR> STARTUP MOUNT;
SVRMGR> RECOVER DATABASE UNTIL CANCEL;
-- 逐個應用歸檔日志,至序號 387 時輸入 CANCEL
SVRMGR> ALTER DATABASE OPEN RESETLOGS;
-- 1. 查詢目標時間點
SELECT time FROM v$log_history WHERE sequence# = 387;
-- 結果例:2002-06-23 14:42:04
-- 2. 恢復流程
SVRMGR> CONNECT INTERNAL
SVRMGR> STARTUP MOUNT;
SVRMGR> RECOVER DATABASE UNTIL TIME '2002/06/23 14:42:00';
-- 輸入 AUTO 自動應用至指定時間停止
SVRMGR> ALTER DATABASE OPEN RESETLOGS;
時間格式:'YYYY/MM/DD HH24:MI:SS',單引號括起。
-- 1. 編輯 init.ora / spfile
log_archive_start = true
log_archive_dest_1 = 'LOCATION=/u01/app/oracle/arch'
log_archive_format = '%t_%s_%r.arc'
-- 2. 關閉資料庫
SVRMGR> CONNECT INTERNAL
SVRMGR> SHUTDOWN NORMAL;
-- 3. 啟動至 MOUNT
SVRMGR> STARTUP MOUNT;
-- 4. 切換歸檔模式
SVRMGR> ALTER DATABASE ARCHIVELOG;
-- 5. 開啟資料庫
SVRMGR> ALTER DATABASE OPEN;