ALTER SYSTEM SET UNDO_RETENTION = 3600; -- 例: 1 小時
| 程序 | 用途 |
|---|---|
| ENABLE_AT_TIME | 會話級啟用閃回,指定時間戳 (自動對應最近 SCN) |
| ENABLE_AT_SYSTEM_CHANGE_NUMBER | 會話級啟用閃回,指定 SCN |
| GET_SYSTEM_CHANGE_NUMBER | 取得當前 SCN |
| DISABLE | 關閉會話閃回,返回當前時間 |
注意事項:
ENABLE 系列程序NLS_DATE_FORMAT 含時分秒 (預設僅精確到日)AS OF TIMESTAMP 會自動轉換為 SCNSYS.SMON_SCN_TIME (每 5 分鐘記錄一次,保留最近 1440 筆 ≈ 5 天)SCN_TO_TIMESTAMP()、TIMESTAMP_TO_SCN()-- 查看映射表
SELECT scn, TO_CHAR(time_dp,'yyyy-mm-dd hh24:mi:ss') FROM sys.smon_scn_time;
-- 時間轉 SCN 範例
SELECT TIMESTAMP_TO_SCN(TO_TIMESTAMP('2010-10-19 21:00:00','YYYY-MM-DD HH24:MI:SS')) FROM dual;
-- 1. 確認資料筆數 SELECT COUNT(*) FROM t1; -- 8302 -- 2. 誤刪並提交 DELETE FROM t1; COMMIT; -- 3. 取得刪除前 SCN (或用 TIMESTAMP_TO_SCN 推估) SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM dual; -- 假設 1482649 -- 4. 閃回查詢驗證 SELECT COUNT(*) FROM t1 AS OF SCN 1482600; -- 8302 筆皆在 -- 5. 兩種恢復方式 -- 方式 A: INSERT ... AS OF SCN INSERT INTO t1 SELECT * FROM t1 AS OF SCN 1482600; COMMIT; -- 方式 B: FLASHBACK TABLE (10g+) FLASHBACK TABLE t1 TO SCN 1482600; COMMIT; -- 針對 DROP TABLE 的恢復 FLASHBACK TABLE t1 TO BEFORE DROP; COMMIT;
UNDO_RETENTION 至少覆蓋業務容許的最大恢復窗口 (建議 24h+)GUARANTEE 選項避免 Undo 被強制覆寫SMON_SCN_TIME 記錄完整性FLASHBACK TABLE,避免全量 INSERT 產生大量 Redo