當發生使用者誤操作(如誤 TRUNCATE TABLE、誤 DELETE)且資料庫運行於 ARCHIVELOG 模式 時,可透過 RMAN 基於時間點的不完全恢復,將資料庫還原至錯誤發生前的瞬間。
SQL> HOST DATE
2011-08-29 21:01:29 CST
SQL> TRUNCATE TABLE t_user;
Table truncated.
關鍵:精確記下誤操作前的時間點(21:01:00),作為恢復目標。
[oracle@localhost ~]$ export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
RMAN> RUN {
STARTUP FORCE MOUNT;
SET UNTIL TIME '2011-08-29 21:01:00';
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
指令解析:
STARTUP FORCE MOUNT:強制關閉並以 MOUNT 模式啟動。SET UNTIL TIME:指定恢復終點(不含該時間點之後的變更)。RESTORE DATABASE:從備份還原所有資料檔。RECOVER DATABASE:應用歸檔日誌將資料庫向前滾動至指定時間。ALTER DATABASE OPEN RESETLOGS:以新的 RESETLOGS 開啟資料庫,產生新的化身。SQL> SELECT COUNT(*) FROM t_user;
COUNT(*)
----------
2
資料已恢復至截斷前的狀態。
V$LOGMNR_CONTENTS 確認誤操作確切 SCN。DELETE BACKUP 移除過期備份集,釋放儲存空間。RUN {
DELETE NOPROMPT BACKUP;
DELETE NOPROMPT COPY;
BACKUP DATABASE FORMAT '/oracle/10g/Oracle/RMAN/%d_%s.dbf';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
}
基於時間點的 RMAN 不完全恢復是應對邏輯錯誤的利器,關鍵在於精確的時間點定位與標準化的恢復流程。建議將此流程納入災難演練腳本,定期演練確保關鍵時刻能迅速恢復業務。