LogMiner (8i+) 可離線分析 Redo/Archive Log,解析 DML (INSERT/UPDATE/DELETE) 並產生回滾 SQL,適用審計、回溯特定交易、容量規劃。純 PL/SQL 包 + 動態視圖,無 GUI,免費內建。
@$ORACLE_HOME/rdbms/admin/dbmslmgm.sql -- 建立 DBMS_LOGMNR 套件
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql -- 建立 DBMS_LOGMNR_D 套件 (字典匯出)
-- 1. init.ora 設定 UTL_FILE_DIR = '/oracle/logs'
-- 2. 重啟實例
-- 3. 匯出字典
EXEC DBMS_LOGMNR_D.BUILD(
DICTIONARY_FILENAME => 'v816dict.ora',
DICTIONARY_LOCATION => '/oracle/logs');
表結構變更或跨庫分析時必須重建字典。
-- Online Redo
EXEC DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/oracle/oradata/sid/redo01.log',
OPTIONS => DBMS_LOGMNR.NEW);
EXEC DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/oracle/oradata/sid/redo02.log',
OPTIONS => DBMS_LOGMNR.ADDFILE);
-- Archived Redo
EXEC DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/oracle/oradata/sid/archive/ARC001.001',
OPTIONS => DBMS_LOGMNR.NEW);
-- 後續 ADDFILE 追加...
移除:OPTIONS => DBMS_LOGMNR.REMOVEFILE。
-- 無限制
EXEC DBMS_LOGMNR.START_LOGMNR(
DICTFILENAME => '/oracle/logs/v816dict.ora');
-- 指定時間範圍
EXEC DBMS_LOGMNR.START_LOGMNR(
DICTFILENAME => '/oracle/logs/v816dict.ora',
STARTTIME => TO_DATE('2001-09-18 00:00:00','YYYY-MM-DD HH24:MI:SS'),
ENDTIME => TO_DATE('2001-09-18 23:59:59','YYYY-MM-DD HH24:MI:SS'));
-- 指定 SCN 範圍
EXEC DBMS_LOGMNR.START_LOGMNR(
DICTFILENAME => '/oracle/logs/v816dict.ora',
STARTSCN => 20, ENDSCN => 50);
-- 所有重做 SQL
SELECT SQL_REDO FROM V$LOGMNR_CONTENTS;
-- 特定用戶對特定表的操作
SELECT SQL_REDO FROM V$LOGMNR_CONTENTS
WHERE USERNAME = 'DB_ZGXT' AND TABLE_NAME = 'SB_DJJL';
注意:結果僅存在於啟動 Session 的 PGA 中,Session 結束或執行 DBMS_LOGMNR.END_LOGMNR 即消失。
SQL_UNDO 欄位可直接獲得回滾語句,加速 Point-in-Time Recovery。LogMiner 是 DBA 手中的「時光機」,雖無 GUI 但功能強大,掌握其 PL/SQL API 可應對審計、誤操作回溯、異機日誌分析等核心場景。