首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle LogMiner 工具實戰:資料字典建立、Redo Log 分析與 16 進制還原

     編輯:Oracle 資料庫基礎

LogMiner 架構

LogMiner 由兩個 PL/SQL 套件與四個動態視圖組成:

  • DBMS_LOGMNR:核心分析引擎
  • DBMS_LOGMNR_D:資料字典匯出工具
  • 啟動 DBMS_LOGMNR.START_LOGMNR 時建立 V$LOGMNR_* 視圖

資料字典檔案:為何必要

無字典檔時,LogMiner 輸出內部物件 ID 與 16 進制值:

-- 原始 SQL
INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '張三');

-- 無字典輸出
INSERT INTO "Object#308"("Col#1","Col#2") VALUES (HEXTORAW('c30rte567e436'), HEXTORAW('4a6f686e20446f65'));

建立字典檔可將物件編號還原為名稱,16 進制還原為可讀值。

建立字典檔步驟

  1. init.ora 設定 UTL_FILE_DIR 指定目錄權限:
    UTL_FILE_DIR = (E:\Oracle\logs)
  2. 重啟資料庫生效
  3. SYS 權限執行建立:
    CONNECT SYS
    EXECUTE DBMS_LOGMNR_D.BUILD(
      DICTIONARY_FILENAME => 'v816dict.ora',
      DICTIONARY_LOCATION => 'E:\Oracle\logs'
    );

字典檔維護時機

  • 資料庫結構變更(DDL)導致字典變更時 → 重建
  • 分析不同資料庫的 Redo Log 時 → 使用該資料庫字典檔

啟動 LogMiner 分析

EXECUTE DBMS_LOGMNR.START_LOGMNR(
  DICTIONARY_FILENAME => 'v816dict.ora',
  DICTIONARY_LOCATION => 'E:\Oracle\logs',
  STARTSCN => 123456,      -- 可選:起始 SCN
  ENDSCN   => 789012       -- 可選:結束 SCN
);

核心查詢視圖

實戰查詢範例

-- 查詢特定表的 DML 操作
SELECT SCN, TIMESTAMP, OPERATION, SQL_REDO, SQL_UNDO
FROM V$LOGMNR_CONTENTS
WHERE SEG_NAME = 'DM_DJ_SWRY'
  AND OPERATION IN ('INSERT','UPDATE','DELETE')
ORDER BY SCN;

-- 查詢特定用戶操作
SELECT * FROM V$LOGMNR_CONTENTS WHERE USERNAME = 'APP_USER';

結束分析

EXECUTE DBMS_LOGMNR.END_LOGMNR();

注意事項

  • 需 SELECT_CATALOG_ROLE 或 EXECUTE_CATALOG_ROLE 權限
  • 線上日志不可直接分析,需切換歸檔或備份歸檔日志
  • 大量日志分析耗資源,建議非尖峰時段執行
  • 12c+ 可使用 DBMS_LOGMNR.CONTINUOUS_MINE 即時挖掘
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
視圖用途
V$LOGMNR_CONTENTS重做記錄詳細內容 (SQL_REDO, SQL_UNDO, SEG_NAME 等)
V$LOGMNR_DICTIONARY字典檔資訊
V$LOGMNR_LOGS已加入分析的日志檔清單
V$LOGMNR_PARAMETERS當前啟動參數