ACID 原則規定:提交的事務不可回滾(持久性),Flashback 並非違背 ACID,而是通過構建「反向事務」撤銷不想要的修改,成功與否取決於後續是否有衝突提交。
DROP TABLE 從數據字典刪除元數據,空間標記可用,唯有時間點恢復可救。DROP TABLE 內部映射為 RENAME,表改名為 BIN$...==$0,對象號不變,索引/觸發器/權限/非空/主鍵/唯一約束同步改名,**外鍵約束被刪除**(避免孤兒引用)。USER_RECYCLEBIN;系統級:DBA_RECYCLEBIN。PURGE TABLE "BIN$..." 或 PURGE RECYCLEBIN。FLASHBACK TABLE original_name TO BEFORE DROP;
-- 或指定新名
FLASHBACK TABLE "BIN$..." TO BEFORE DROP RENAME TO new_name;
限制: 若同名新表已創建,需先重命名/刪除新表;TRUNCATE、PURGE、用戶刪除不可恢復;索引刪除可獨立恢復。
查看某行在時間區間內的所有版本:
SELECT versions_xid, versions_startscn, versions_endscn, col1, col2
FROM t VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE pk = :val;
根據 VERSIONS_XID 反查完整事務 SQL(含 UNDO SQL):
SELECT undo_sql FROM flashback_transaction_query
WHERE xid = HEXTORAW('...');
將整表恢復到指定 SCN/時間戳:
FLASHBACK TABLE t TO SCN 123456;
FLASHBACK TABLE t TO TIMESTAMP SYSDATE - 1/24; -- 1小時前
前提:表啟用 ROW MOVEMENT,且 UNDO 保留足夠。
UNDO_RETENTION 足夠大(如 24h),配合大 UNDO 表空間。ROW MOVEMENT 以支持 Flashback Table。PURGE RECYCLEBIN 釋放空間,避免誤以為可恢復實則已被自動清理。FLASHBACK DATABASE(需 FRA、歸檔模式)實現更大範圍恢復。