LogMiner 是 Oracle 強大的日誌分析工具,可從線上或歸檔 Redo Log 中重構 SQL 語句,實現邏輯層面的資料復原。以下透過完整實驗示範如何找回被 DELETE 與 UPDATE 異動的資料。
zwc、用戶 zwc 並授權。tab01,包含主鍵 a 與日期欄位 d。ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
DELETE FROM zwc.tab01 WHERE ROWNUM <= 100;
UPDATE zwc.tab01 SET d = SYSDATE - 100 WHERE ROWNUM <= 10;
COMMIT;
UTL_FILE_DIR 與日期格式,關閉再啟動資料庫至 MOUNT 狀態開啟歸檔模式(若未開啟)。EXEC DBMS_LOGMNR_D.BUILD('test.ora', 'c:\oracle');EXEC DBMS_LOGMNR.ADD_LOGFILE('C:\arch\ARC00041_0842045960.001', DBMS_LOGMNR.NEW);EXEC DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'c:\oracle\test.ora');CREATE TABLE zwc.t_logminer TABLESPACE zwc AS SELECT * FROM V$LOGMNR_CONTENTS;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 等)