Oracle 閃回技術是邏輯錯誤快速恢復的利器,包含閃回查詢、閃回刪除、閃回歸檔、閃回資料庫四大功能。本文深度解析各功能原理、配置步驟、限制條件與選型決策。
UNDO_RETENTION 參數控制保留秒數(預設 900 秒)SELECT * FROM dept
AS OF TIMESTAMP TO_TIMESTAMP('2016-09-10 11:00:00','YYYY-MM-DD HH24:MI:SS');
-- 1. 啟用列移動(允許 ROWID 變更)
ALTER TABLE emp ENABLE ROW MOVEMENT;
-- 2. 閃回至時間點
FLASHBACK TABLE dept
TO TIMESTAMP TO_TIMESTAMP('2016-09-10 11:00:00','YYYY-MM-DD HH24:MI:SS');
10g+ DROP TABLE 實為 RENAME 至回收站(BIN$...),不實際刪除資料檔。
-- 還原被 DROP 的表 FLASHBACK TABLE emp TO BEFORE DROP; -- 還原並重命名(避免名稱衝突) FLASHBACK TABLE emp TO BEFORE DROP RENAME TO emp_new; -- 查看回收站 SHOW RECYCLEBIN; -- 或 SELECT * FROM user_recyclebin; -- 徹底刪除(無法閃回) DROP TABLE emp PURGE; -- 清空回收站 PURGE RECYCLEBIN;
DROP 有效,TRUNCATE 不產生 UNDO,無法閃回-- 1. 建立歸檔表空間 CREATE TABLESPACE fba_ts DATAFILE 'fba.dbf' SIZE 20M; -- 2. 建立閃回歸檔(保留 2 年) CREATE FLASHBACK ARCHIVE fba_2yr TABLESPACE fba_ts RETENTION 2 YEAR; -- 3. 授權用戶 GRANT FLASHBACK ARCHIVE ON fba_2yr TO scott; -- 4. 為表啟用 CONN scott/tiger ALTER TABLE emp FLASHBACK ARCHIVE fba_2yr;
SELECT * FROM emp AS OF TIMESTAMP SYSDATE - 365; -- 查一年前資料 FLASHBACK TABLE emp TO TIMESTAMP SYSDATE - 30; -- 回退 30 天前
相當於不完全恢復(PITR)的極速版,需 RESETLOGS 開啟,會造成停機時間。
DB_RECOVERY_FILE_DEST)-- 1. 指定恢復區位置與大小 ALTER SYSTEM SET db_recovery_file_dest = '/flash_recovery_area'; ALTER SYSTEM SET db_recovery_file_dest_size = 4G; -- 2. 設定閃回日誌保留目標(分鐘) ALTER SYSTEM SET db_flashback_retention_target = 120; -- 2 小時 -- 3. 啟用(需 MOUNT 狀態) SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE FLASHBACK ON; ALTER DATABASE OPEN;
SHUTDOWN IMMEDIATE; STARTUP MOUNT; FLASHBACK DATABASE TO TIMESTAMP SYSDATE - 60/1440; -- 回退 60 分鐘 ALTER DATABASE OPEN RESETLOGS;
| 功能 | 依賴 | 時間範圍 | 停機 | 適用場景 |
|---|---|---|---|---|
| 閃回查詢/表 | UNDO | UNDO_RETENTION(通常小時級) | 無 | 誤更新/刪除、臨時歷史查詢 |
| 閃回刪除 | 回收站(表空間) | 空間允許期間 | 無 | 誤 DROP 表 |
| 閃回歸檔 | 獨立歸檔儲存 | 年級(配置保留期) | 無 | 長期歷史審計、合規查詢 |
| 閃回資料庫 | 閃回日誌(恢復區) | DB_FLASHBACK_RETENTION_TARGET | 是 | 整庫邏輯災難、測試環境快速重置 |
V$UNDOSTAT、V$FLASHBACK_DATABASE_STAT 監控保留滿足度閃回技術體系讓 Oracle 邏輯錯誤恢復從「小時級」壓縮至「秒級」,是高可用架構不可或缺的安全網。