誤操作 DELETE、TRUNCATE、DROP TABLE 後,Oracle 閃回技術(Flashback)提供無需還原備份、秒級恢復的神奇能力。本文實測三大場景恢復全流程。
FLASHBACK DATABASE 或表啟用 ROW MOVEMENT。UNDO_RETENTION 覆蓋誤操作時間窗口。-- 1. 啟用行移動(閃回表需移動 ROWID)
ALTER TABLE aa ENABLE ROW MOVEMENT;
-- 2. 閃回到誤操作前的精確時間點
FLASHBACK TABLE aa TO TIMESTAMP TO_TIMESTAMP('2013-01-28 10:49:30', 'YYYY-MM-DD HH24:MI:SS');
-- 3. 驗證
SELECT COUNT(*) FROM aa;
原理:利用 Undo 數據構造反向 UPDATE,將表數據「倒轉」到指定 SCN/時間點。
限制:僅恢復數據,不恢復索引/約束/權限變更;需 ROW MOVEMENT 因 ROWID 可能改變。
-- TRUNCATE 實際執行 DDL,會隱式 COMMIT,但 10g+ 將截斷前的段標記進 Recyclebin
FLASHBACK TABLE aa TO BEFORE DROP;
-- 或指定 Recyclebin 對象名
FLASHBACK TABLE "BIN$xxxxx" TO BEFORE DROP RENAME TO aa_restored;
關鍵點:TRUNCATE 不產生 Undo,但 Oracle 將段標記為「可回收」,閃回實際是修改段頭元數據,將 HWM 恢復,**極快(毫秒級)**。
前提:RECYCLEBIN = ON(默認),且表空間未因空間壓力自動清理 Recyclebin。
FLASHBACK TABLE aa TO BEFORE DROP;
效果同 TRUNCATE 恢復,連索引、約束、權限、觸發器一併恢復(DDL 閃回)。
-- 需啟用:ALTER DATABASE FLASHBACK ON;
-- 恢復整庫到 1 小時前
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP SYSDATE - 1/24;
ALTER DATABASE OPEN RESETLOGS;
適用於批量誤操作、邏輯腐壞、測試環境快速重置。
ORA-01555 → 擴大 Undo 表空間、調大 UNDO_RETENTION、啟用 RETENTION GUARANTEE。ALTER TABLE ... MOVE、DROP PARTITION 等 DDL,閃回表將失效(段頭重寫)。FLASHBACK TABLE partition_name TO ... 不支持,需整表閃回或分區交換法。FLASHBACK ANY TABLE 系統權限或表擁有者權限。DELETE → Flashback Table to Timestamp;TRUNCATE/DROP → Flashback Table to Before Drop。閃回技術是 Oracle 獨有的「後悔藥」,但**前提是平時備好 Undo、啟用 Recyclebin、演練恢復流程**。將閃回恢復納入季度演練計劃,讓團隊在真誤操作發生時「閉眼也能恢復」。