首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 備份恢復系列 (5):Flashback 閃回技術全解析 (9i/10g)

     編輯:Oracle 資料庫基礎

Flashback 技術利用 UNDO 表空間 保存的歷史資料映像,實現「不還原備份、不停機」的秒級資料回溯與修復,是開發測試環境與生產環境誤操作搶救的利器。

9i Flashback Query 基礎

運作原理

  • UPDATE/DELETE 時,舊映像寫入 UNDO 表空間。
  • 最少保留時間由 UNDO_RETENTION (秒) 控制,實際保留受 UNDO 表空間大小與交易量影響。
  • 建議設定 UNDO_RETENTION = 86400 (一天),並確保 UNDO 表空間足夠大。

前置需求

  1. 啟用自動 UNDO 管理:ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO
  2. 設定保留時間:ALTER SYSTEM SET UNDO_RETENTION=86400
  3. 授權使用者:GRANT EXECUTE ON DBMS_FLASHBACK TO username

取得 SCN 或時間點

-- 方法一:DBMS_FLASHBACK 套件
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER SCN FROM DUAL;

-- 方法二:X$ 表 (需 SYS 權限)
SELECT MAX(KTUXESCNW * POWER(2,32) + KTUXESCNB) SCN FROM X$KTUXE;

-- 取得當前時間格式
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
SELECT SYSDATE FROM V$DATABASE;

兩種查詢模式

模式語法範例特點
AS OF 子句 (推薦)SELECT * FROM emp AS OF TIMESTAMP TO_TIMESTAMP('2024-01-01 12:00:00','YYYY-MM-DD HH24:MI:SS');單一查詢、自動恢復現狀、可直接 CREATE TABLE ... AS SELECT 存入暫存表
DBMS_FLASHBACK.ENABLEEXEC DBMS_FLASHBACK.ENABLE_AT_TIME('01-JAN-2024 12:00:00'); ... 查詢 ... EXEC DBMS_FLASHBACK.DISABLE;Session 級別啟用、查詢結果為閃回影像、啟用期間不可 DML、需手動 DISABLE

範例:將誤更新的薪資欄位修復

DECLARE
  CURSOR c1 IS SELECT * FROM scott.emp_temp;
  r_c1 scott.emp_temp%ROWTYPE;
BEGIN
  LOOP
    DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(49570);
    IF NOT c1%ISOPEN THEN OPEN c1; END IF;
    FETCH c1 INTO r_c1;
    DBMS_FLASHBACK.DISABLE;
    EXIT WHEN c1%NOTFOUND;
    UPDATE scott.emp_temp SET sal = r_c1.sal WHERE empno = r_c1.empno;
    COMMIT;
  END LOOP;
  CLOSE c1;
END;
/

10g Flashback 增強功能

功能指令/特性適用場景
Flashback DatabaseFLASHBACK DATABASE TO TIMESTAMP ... / TO SCN ...整個資料庫時間旅行,免傳統 PITR,需啟用 Flashback Logs
Flashback TableFLASHBACK TABLE emp TO TIMESTAMP ...單表級回溯,保留索引/約束/觸發器,需啟用 Row Movement
Flashback DropFLASHBACK TABLE emp TO BEFORE DROP從回收筒恢復 DROP TABLE,保留原名或重命名
Flashback Version QuerySELECT ... VERSIONS BETWEEN TIMESTAMP ...查看某列在時間區間內的所有歷史版本變更
Flashback Transaction QuerySELECT ... FROM FLASHBACK_TRANSACTION_QUERY事務級審計:誰、何時、做了什麼 DML,含 UNDO SQL

限制與注意事項

  • Flashback 無法復原 DDL (除 DROP TABLE 透過回收筒),TRUNCATE、ALTER TABLE 等不可閃回。
  • 需足夠 UNDO/Flashback Log 空間,否則舊映像會被覆寫導致 ORA-01555。
  • 生產環境謹慎使用 FLASHBACK DATABASE,需完整測試切換流程與 RTO/RPO 驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved