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

Oracle 表資料誤刪救援:Flashback Table 與時間點復原實戰

     編輯:Oracle 教學

Oracle 表資料誤刪救援:Flashback Table 與時間點復原實戰

誤刪表資料時,切勿對該表進行任何 DML/DDL,立即採用下列方法將資料恢復至誤刪前的時間點。

方法一:建立備份表保留歷史資料 (適用於需保留當前狀態)

-- 建立 3 小時前的資料備份表,排除特定條件
CREATE TABLE tabletest_2014bak NOLOGGING AS
SELECT * FROM tabletest
AS OF TIMESTAMP SYSDATE - 21/24  -- 21/24 = 3.5 小時
WHERE name != 'boat';
  • AS OF TIMESTAMP:閃回查詢語法,讀取指定 SCN/時間點的資料版本。
  • NOLOGGING:減少 REDO 產生,加速大量建表。

方法二:直接將表閃回至指定時間點 (適用於整張表復原)

-- 1. 啟用列移動 (SHRINK/FLASHBACK 必備)
ALTER TABLE tabletest ENABLE ROW MOVEMENT;

-- 2. 閃回至精確時間點 (需早於當前時間)
FLASHBACK TABLE tabletest
TO TIMESTAMP TO_TIMESTAMP('2014-12-30 17:00:00', 'YYYY-MM-DD HH24:MI:SS');
  • ENABLE ROW MOVEMENT:允許行在區塊間移動,閃回過程中會重組 ROWID。
  • 閃回操作屬 DDL,隱含 COMMIT,執行前確認無未提交交易。
  • 若需復原至 SCN:TO SCN 12345678。

前置條件與限制

  1. UNDO 保留:UNDO_RETENTION 需涵蓋目標時間點;確認 V$UNDOSTAT 中 MAXQUERYLEN 足夠。
  2. 表空間:需啟用 FLASHBACK ON(表空間層級)或資料庫啟用 FLASHBACK DATABASE。
  3. 權限:需 FLASHBACK ANY TABLE 或表擁有者權限。
  4. 不支援:跨 DDL 變更(如 ALTER TABLE DROP COLUMN)後的閃回;已 PURGE 的回收桶物件。
  5. 進階:資料庫級閃回 (Flashback Database)

    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    FLASHBACK DATABASE TO TIMESTAMP SYSDATE - 1/24;  -- 1 小時前
    ALTER DATABASE OPEN RESETLOGS;

    需預先啟用 DB_FLASHBACK_RETENTION_TARGET、快速復原區、ARCHIVELOG 模式。

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