Oracle LogMiner 是從 Oracle 8i 版本開始內建的強大日誌分析工具,透過 DBMS_LOGMNR 和 DBMS_LOGMNR_D 套件,能夠深入剖析重做日誌檔案,協助 DBA 進行審計、資料恢復或異常排查。本文將系統性介紹 LogMiner 的部署需求、安裝步驟、字典建立、日誌檔案管理與查詢分析全流程。
在啟動分析前,必須確認以下三大前提條件,否則工具將無法正常運作:
以 SYS 權限依序執行以下兩個腳本,完成 PL/SQL 套件的建立:
@$ORACLE_HOME/rdbms/admin/dbmslm.sql
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
資料字典讓 LogMiner 能將內部 Object ID 轉換為可讀的物件名稱,大幅提升分析可讀性。
init.ora,新增 UTL_FILE_DIR 參數指定字典輸出目錄(例如 D:\Oracle\logs),並重啟資料庫生效。EXECUTE dbms_logmnr_d.build(
dictionary_filename => 'logmn_ora817.dat',
dictionary_location => 'D:\Oracle\logs');
注意:若目標資料庫結構發生變更(如增減表、欄位),必須重新產生字典檔。
建議優先分析歸檔日誌,避免線上日誌被覆寫。使用 DBMS_LOGMNR.ADD_LOGFILE 管理清單:
OPTIONS => DBMS_LOGMNR.NEWOPTIONS => DBMS_LOGMNR.ADDFILEOPTIONS => DBMS_LOGMNR.REMOVEFILE呼叫 DBMS_LOGMNR.START_LOGMNR 並指定字典路徑,可搭配時間或 SCN 範圍縮小掃描範圍:
EXECUTE dbms_logmnr.start_logmnr(
DictFileName => 'D:\Oracle\logs\logmn_ora817.dat',
StartTime => SYSDATE - 1, -- 可選:起始時間
EndTime => SYSDATE); -- 可選:結束時間
分析完成後,核心視圖 V$LOGMNR_CONTENTS 將呈現所有 DML/DDL 變更細節:
SELECT operation, table_name, sql_redo, sql_undo, timestamp
FROM v$logmnr_contents
WHERE seg_owner = 'SCOTT'
ORDER BY timestamp;
常用欄位包含 OPERATION(INSERT/UPDATE/DELETE/DDL)、SQL_REDO(正向 SQL)、SQL_UNDO(回滾 SQL)等,可直接用於資料修復或審計報表。
StartScn/EndScn 避免全量掃描造成效能壓力。DBMS_LOGMNR.COLUMN_PRESENT 等函式,可進一步過濾特定欄位變更。掌握 LogMiner 全流程,能讓 DBA 在誤操作恢復、合規審計、效能回溯等場景中遊刃有餘。