首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle LogMiner 實戰:從 Redo Log 還原被誤刪除與更新的資料

     編輯:Oracle 資料庫相關知識

LogMiner 是 Oracle 強大的日誌分析工具,可從線上或歸檔 Redo Log 中重構 SQL 語句,實現邏輯層面的資料復原。以下透過完整實驗示範如何找回被 DELETE 與 UPDATE 異動的資料。

環境準備與測試資料建立

  1. 建立表空間 zwc、用戶 zwc 並授權。
  2. 建立測試表 tab01,包含主鍵 a 與日期欄位 d。
  3. 透過 PL/SQL 迴圈插入 2,000,000 筆測試資料,表大小約 80MB。

模擬誤操作並啟用補充日誌

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
DELETE FROM zwc.tab01 WHERE ROWNUM <= 100;
UPDATE zwc.tab01 SET d = SYSDATE - 100 WHERE ROWNUM <= 10;
COMMIT;

LogMiner 分析流程

  1. 設定 UTL_FILE_DIR 與日期格式,關閉再啟動資料庫至 MOUNT 狀態開啟歸檔模式(若未開啟)。
  2. 建立 LogMiner 字典檔:EXEC DBMS_LOGMNR_D.BUILD('test.ora', 'c:\oracle');
  3. 加入目標歸檔日誌:EXEC DBMS_LOGMNR.ADD_LOGFILE('C:\arch\ARC00041_0842045960.001', DBMS_LOGMNR.NEW);
  4. 啟動 LogMiner:EXEC DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'c:\oracle\test.ora');
  5. 將分析結果存入表:CREATE TABLE zwc.t_logminer TABLESPACE zwc AS SELECT * FROM V$LOGMNR_CONTENTS;
  6. 結束分析:EXEC DBMS_LOGMNR.END_LOGMNR;

還原被刪除與更新的資料

查詢 t_logminer 表,針對 OPERATION 為 DELETE 的記錄,SQL_UNDO 欄位即為還原用的 INSERT 語句;UPDATE 的 SQL_UNDO 則為還原前值的 UPDATE 語句。實驗中成功產生 100 筆 INSERT 還原刪除資料,10 筆 UPDATE 還原更新資料。

關鍵欄位說明:
SQL_UNDO:回滾用 SQL(還原操作)
SQL_REDO:重做用 SQL(原操作)
OPERATION:操作類型(INSERT/DELETE/UPDATE 等)

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