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

Oracle Flashback Database 實戰:SCN/時間點恢復與表級閃回查詢

     編輯:Oracle 教學

Oracle Flashback Database 實戰:SCN/時間點恢復與表級閃回查詢

Flashback Database 需啟用 FLASHBACK ON 並配置快速恢復區 (FRA)。本文記錄兩種恢復模式實測:資料庫級閃回 (SCN/RESETLOGS) 與表級閃回查詢 (AS OF TIMESTAMP)。

模式一:資料庫級閃回 (至指定 SCN)


-- 1. 關閉資料庫至 MOUNT
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

-- 2. 閃回至目標 SCN
FLASHBACK DATABASE TO SCN 119272598;

-- 3. 嘗試開啟 (需 RESETLOGS)
ALTER DATABASE OPEN RESETLOGS;
-- 若報 ORA-01610 需使用備份控制檔恢復,見另篇

查詢可恢復 SCN/時間點:


SELECT scn, TO_CHAR(time_dp,'YYYY-MM-DD HH24:MI:SS')
FROM sys.smon_scn_time
ORDER BY time_dp DESC;

不推薦常規使用:資料庫級閃回需停機、RESETLOGS 會切斷歸檔鏈、影響 Data Guard 同步。僅適用於測試環境或極端災難。

模式二:表級閃回查詢 (不停機、不影響線上)

利用 AS OF TIMESTAMP / AS OF SCN 子句,將歷史版本資料查出並寫回。


-- 1. 先清空目標表 (避免主鍵衝突)
DELETE FROM t_viradsl2;

-- 2. 從歷史版本插入資料
INSERT INTO t_viradsl2
SELECT * FROM t_viradsl2
AS OF TIMESTAMP TO_DATE('2011-01-19 15:28:00','YYYY-MM-DD HH24:MI:SS');

COMMIT;

亦可用 SCN:


INSERT INTO t_viradsl2
SELECT * FROM t_viradsl2 AS OF SCN 123456789;

關鍵前提與限制

項目要求
UNDO 保留UNDO_RETENTION 需覆蓋目標時間點,否則報 ORA-01555
表結構閃回期間表結構不得變更 (DDL 會截斷歷史版本)
權限需 FLASHBACK ANY TABLE 或物件 FLASHBACK 權限
資料類型不支援 BFILE、嵌套表、部分物件型別

進階:Flashback Transaction Query 審計誰改了什麼


SELECT xid, operation, logon_user, undo_sql
FROM flashback_transaction_query
WHERE table_name = 'T_VIRADSL2'
  AND start_timestamp >= SYSDATE - 1;

可生成反向 SQL (UNDO_SQL) 精準回滾特定異動。


表級閃回查詢是「後悔藥」首選:線上、秒級、無停機、粒度細。資料庫級閃回屬重型武器,謹慎使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved