LogMiner 是 Oracle 8i+ 內建的線上/離線重做日誌分析工具,能將二進位 Redo/Archive Log 解析為可讀的 SQL 陳述式 (DML/DDL)、回滾 SQL、SCN、時間戳、操作用戶等,廣泛用於審計、誤操作定點復原、容量規劃、邏輯損壞時間定位。
@$ORACLE_HOME/rdbms/admin/dbmslm.sql -- 建立 DBMS_LOGMNR 套件
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql -- 建立 DBMS_LOGMNR_D 套件 (字典匯出)
| 物件 | 說明 |
|---|---|
| Source Database | 產生日誌的源資料庫 |
| Mining Database | 執行 LogMiner 的分析端資料庫,版本 ≥ Source,同平台、同字符集 |
| LogMiner 字典 | 將內部 Object ID/Type 轉為名稱/格式,三種來源: 1. 線上資料字典 ( DICT_FROM_ONLINE_CATALOG) — 結構無變更、Source 需 OPEN、僅 DML2. 寫入 Redo Log ( STORE_IN_REDO_LOGS) — Source 需 OPEN+Archivelog、支援 DDL3. 扁平檔案 ( STORE_IN_FLAT_FILE) — 需設定 UTL_FILE_DIR、離線分析首選 |
V$LOGMNR_CONTENTS:分析結果主表 (OPERATION, SQL_REDO, SQL_UNDO, SEG_NAME, TIMESTAMP, SCN...)V$LOGMNR_LOGS:已加入分析的日誌清單 (LOW_TIME, HIGH_TIME, LOW_SCN, NEXT_SCN)V$LOGMNR_DICTIONARY、V$LOGMNR_PARAMETERSALTER SYSTEM SET UTL_FILE_DIR='*' SCOPE=SPFILE; → 重啟EXEC DBMS_LOGMNR_D.BUILD(
DICTIONARY_FILENAME => 'logminer_dict.dat',
DICTIONARY_LOCATION => '/u01/arch',
OPTIONS => DBMS_LOGMNR_D.STORE_IN_FLAT_FILE
);
EXEC DBMS_LOGMNR.ADD_LOGFILE(
OPTIONS => DBMS_LOGMNR.NEW,
LOGFILENAME => '/u01/arch/arc_1_123.arc'
);
-- 後續加入更多日誌
EXEC DBMS_LOGMNR.ADD_LOGFILE(OPTIONS => DBMS_LOGMNR.ADDFILE, LOGFILENAME => '...');
EXEC DBMS_LOGMNR.START_LOGMNR(
DICTFILENAME => '/u01/arch/logminer_dict.dat',
STARTTIME => TO_DATE('2024-01-01 10:00:00','YYYY-MM-DD HH24:MI:SS'),
ENDTIME => TO_DATE('2024-01-01 12:00:00','YYYY-MM-DD HH24:MI:SS')
);
-- DML 操作
SELECT OPERATION, SQL_REDO, SQL_UNDO
FROM V$LOGMNR_CONTENTS
WHERE SEG_NAME = 'TARGET_TABLE';
-- DDL 操作 (9i+)
SELECT TIMESTAMP, SQL_REDO
FROM V$LOGMNR_CONTENTS
WHERE UPPER(SQL_REDO) LIKE '%TRUNCATE%';
EXEC DBMS_LOGMNR.END_LOGMNR;V$LOGMNR_LOGS 確認 SCN/時間範圍再縮小 START_LOGMNR 範圍。FLASHBACK_TRANSACTION_QUERY (10g+) 可更直觀地獲取事務級 UNDO SQL。