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

Oracle LogMiner 實戰指南:從安裝到 Redo Log 深度分析

     編輯:Oracle 資料庫相關知識

LogMiner:讓 Redo Log 開口說話

Oracle 8i 引入 LogMiner,一組 PL/SQL 套件(DBMS_LOGMNR、DBMS_LOGMNR_D)與動態效能視圖(V$LOGMNR_*),可離線/線上分析 Redo/Archive Log,解析出完整 DML(INSERT/UPDATE/DELETE)甚至反向 SQL,適用於除錯、審計、特定交易回滾、資料增長趨勢分析。完全免費、無 GUI、命令列操作,功能極強。

核心用途

  • 離線追蹤變更:不影響線上效能分析歷史變更
  • 精準回滾:生成反向 SQL 針對性恢復,減少 Point-in-Time Recovery 範圍
  • 容量規劃:分析 Redo 量推估資料增長模式
  • 跨資料庫分析:可分析其他資料庫的 Redo Log(需字典檔)

安裝步驟(以 SYS 執行)

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

關鍵步驟:建立資料字典檔

無字典檔時,LogMiner 輸出物件名/欄位名為十六進位(如 Object#308(col#1, col#2)),難以閱讀。建立字典檔讓輸出還原真實名稱:

-- 1. init.ora 設定 UTL_FILE_DIR
UTL_FILE_DIR = '/oracle/logs'

-- 2. 重啟資料庫生效

-- 3. 產生字典檔
CONNECT SYS
EXECUTE dbms_logmnr_d.build(
    dictionary_filename => 'v816dict.ora',
    dictionary_location => '/oracle/logs'
);

注意:DDL 變更結構時、分析不同資料庫時,必須重新產生字典檔。

啟動 LogMiner 分析會話

-- 加入要分析的 Redo Log 檔案
EXECUTE dbms_logmnr.add_logfile(
    logfilename => '/oracle/archive/arch_1_100.dbf',
    options     => dbms_logmnr.NEW
);

-- 啟動會話(指定字典檔、線上/離線模式、時間/SCN 範圍)
EXECUTE dbms_logmnr.start_logmnr(
    dictfilename => '/oracle/logs/v816dict.ora',
    options      => dbms_logmnr.DICT_FROM_FILE
);

-- 查詢分析結果
SELECT sql_redo, sql_undo, operation, seg_name, timestamp
FROM v$logmnr_contents
WHERE seg_owner = 'SCOTT'
  AND timestamp BETWEEN SYSDATE-1 AND SYSDATE;

-- 結束會話
EXECUTE dbms_logmnr.end_logmnr;

進階過濾與應用技巧

  • DBMS_LOGMNR.START_LOGIMNR 選項:COMMITTED_DATA_ONLY(僅顯示已提交)、SKIP_CORRUPTION、CONTINUOUS_MINE(自動挖掘線上 Redo)
  • 依 XID(交易 ID)過濾特定交易
  • 依 SEG_NAME 針對特定表分析
  • 產出的 SQL_UNDO 可直接執行實現精準回滾

常見陷阱與解決

問題原因對策
輸出全是十六進位未提供/字典檔過期重建字典檔並指定 DICT_FROM_FILE
找不到預期 DMLRedo Log 已被覆寫/未加入確認 V$ARCHIVED_LOG 並 ADD_LOGFILE
效能極慢分析大量 Redo 無過濾加入時間/SCN/物件/交易過濾條件

LogMiner 是 DBA 工具箱中的「核磁共振」,雖無 GUI 但功能深度無可取代。熟練掌握字典檔管理、會話控制與結果查詢,能在關鍵時刻從 Redo Log 還原真相、精準修復。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved