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

Oracle LogMiner 完整實戰指南:重做日誌分析、異動追蹤與資料回復

     編輯:Oracle 資料庫相關知識

LogMiner 簡介

Oracle 8i 引入的免費內建工具,透過 PL/SQL 套件 (DBMS_LOGMNR, DBMS_LOGMNR_D) 與動態視圖 (V$LOGMNR_CONTENTS) 解析線上/歸檔 Redo Log,還原 DML (INSERT/UPDATE/DELETE) 及對應的回滾 SQL,適用於稽核、除錯、點時刻恢復、誤操作回復。

安裝步驟 (以 SYS 身分執行)

@$ORACLE_HOME/rdbms/admin/dbmslsm.sql   -- 建立 DBMS_LOGMNR
@$ORACLE_HOME/rdbms/admin/dbmslsmd.sql  -- 建立 DBMS_LOGMNR_D

使用流程

1. 建立資料字典檔 (可選但強烈建議)

否則物件名稱顯示為 16 進位 Object ID,難以閱讀。

-- 1. 設定 UTL_FILE_DIR (init.ora)
UTL_FILE_DIR = /u01/app/oracle/admin/logminer_dict

-- 2. 重啟資料庫生效

-- 3. 產生字典檔
EXEC DBMS_LOGMNR_D.BUILD(
  dictionary_filename => 'dict_ora9i.ora',
  dictionary_location => '/u01/app/oracle/admin/logminer_dict'
);

2. 指定分析的 Redo Log 清單

-- 線上日誌
EXEC DBMS_LOGMNR.ADD_LOGFILE(
  logfilename => '/u01/oradata/ORCL/redo01.log',
  options => DBMS_LOGMNR.NEW
);

-- 歸檔日誌 (可多次呼叫 ADD_LOGFILE 累加)
EXEC DBMS_LOGMNR.ADD_LOGFILE(
  logfilename => '/u01/arch/arch_1_100.dbf',
  options => DBMS_LOGMNR.ADDFILE
);

3. 啟動分析

-- 無條件分析
EXEC DBMS_LOGMNR.START_LOGMNR(
  options => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
);

-- 有條件:時間範圍
EXEC DBMS_LOGMNR.START_LOGMNR(
  starttime => TO_DATE('2023-07-15 00:00:00','YYYY-MM-DD HH24:MI:SS'),
  endtime   => TO_DATE('2023-07-15 23:59:59','YYYY-MM-DD HH24:MI:SS'),
  options   => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
);

-- 有條件:SCN 範圍
EXEC DBMS_LOGMNR.START_LOGMNR(
  startscn => 12345678,
  endscn   => 12345999,
  options  => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
);

4. 查詢分析結果

-- 查詢特定使用者對特定表的操作
SELECT sql_redo, sql_undo, operation, timestamp, username
FROM v$logmnr_contents
WHERE seg_owner = 'SCOTT' AND table_name = 'EMP'
ORDER BY timestamp;

-- 取得特定交易的完整 SQL
SELECT sql_redo FROM v$logmnr_contents
WHERE xidusn = 1 AND xidslt = 12 AND xidsqn = 3456
ORDER BY timestamp;

5. 結束分析

EXEC DBMS_LOGMNR.END_LOGMNR;  -- 釋放 PGA 記憶體,結果視圖失效

跨資料庫分析注意事項

  • 必須使用被分析資料庫產生的字典檔
  • 字元集必須相同
  • 平台必須相同 (Unix→Unix, Windows→Windows)
  • 僅支援 Oracle 8.0+ 產生的 Redo Log

實戰應用場景

場景操作重點
誤刪資料回復找出 DELETE SQL_UNDO,改寫為 INSERT 執行
誤更新回滾取得 UPDATE 的 SQL_UNDO 直接執行
稽核敏感表異動定期分析歸檔日誌,篩選關鍵表操作
應用除錯追蹤特定 Session/交易的完整 SQL 序列
容量規劃分析日誌產生量趨勢,預估儲存/備份需求

效能與限制

  • 分析過程佔用 PGA 記憶體,大量日誌建議分批 ADD_LOGFILE + START/END
  • 結果僅存在於當前 Session,不可跨 Session 共享
  • 無法直接分析 DDL (除非啟用 DBMS_LOGMNR.DDL_DICT_TRACKING)
  • 補充日誌 (ALTER DATABASE ADD SUPPLEMENTAL LOG DATA) 可獲得完整欄位前後值
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved