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

Oracle LogMiner 完整操作指南:安裝、字典構建、日志添加、SQL 重做提取

     編輯:Oracle 資料庫基礎

前置要求

  • 僅支援 Oracle 8.0+ 版本日志分析。
  • 分析端字符集、平台、Block Size 必須與源數據庫一致。
  • 必須使用源庫生成的數據字典。

1. 安裝 LogMiner 套件

@$ORACLE_HOME/rdbms/admin/dbmslm.sql
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
-- 均需 SYS 身份執行

2. 構建數據字典文件(傳統方式)

  1. 初始化參數文件添加 UTL_FILE_DIR = ('/path/to/dir')。
  2. 重啟數據庫使參數生效。
  3. 生成字典:
    EXEC DBMS_LOGMNR_D.BUILD(
      DICTIONARY_FILENAME => 'logmn_dict.dat',
      DICTIONARY_LOCATION => '/path/to/dir');

字典讓 LogMiner 將內部 ID 解析為對象名稱。源庫 DDL 變更後需重建。

3. 添加待分析日志文件

-- 首個文件(NEW)
EXEC DBMS_LOGMNR.ADD_LOGFILE(
  LOGFILENAME => '/arch/ARC001.001', OPTIONS => DBMS_LOGMNR.NEW);

-- 追加文件(ADDFILE)
EXEC DBMS_LOGMNR.ADD_LOGFILE(
  LOGFILENAME => '/arch/ARC002.001', OPTIONS => DBMS_LOGMNR.ADDFILE);

-- 移除文件(REMOVEFILE)
EXEC DBMS_LOGMNR.ADD_LOGFILE(
  LOGFILENAME => '/arch/ARC002.001', OPTIONS => DBMS_LOGMNR.REMOVEFILE);

建議使用歸檔日志,避免在線日志切換干擾。

4. 啟動分析會話

EXEC DBMS_LOGMNR.START_LOGMNR(
  DICTFILENAME => '/path/to/dir/logmn_dict.dat',
  STARTTIME    => TO_DATE('2024-01-01 00:00','YYYY-MM-DD HH24:MI'),
  ENDTIME      => TO_DATE('2024-01-02 00:00','YYYY-MM-DD HH24:MI'));
-- 或使用 SCN 範圍:STARTSCN, ENDSCN

5. 查詢分析結果

核心視圖 V$LOGMNR_CONTENTS,關鍵列:

  • SCN, TIMESTAMP, OPERATION(INSERT/UPDATE/DELETE/DDL)
  • SEG_OWNER, SEG_NAME, SEG_TYPE_NAME
  • SQL_REDO(正向 SQL)、SQL_UNDO(回滾 SQL)
  • ROW_ID, USERNAME, SESSION_INFO

示例:

SELECT OPERATION, COUNT(*) FROM V$LOGMNR_CONTENTS GROUP BY OPERATION;
SELECT SQL_REDO FROM V$LOGMNR_CONTENTS WHERE SEG_NAME='EMP' AND OPERATION='INSERT';

結果僅在當前會話生命周期內可見(存儲於 PGA),會話結束自動清理。

6. 結束分析

EXEC DBMS_LOGMNR.END_LOGMNR;

釋放 PGA 內存,結束事務。

進階:免字典文件模式(10g+)

若源庫開啟補充日志且字典已構建至 Redo Log(STORE_IN_REDO_LOGS),可直接:

EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

無需 UTL_FILE_DIR 與重啟,適合高可用環境(參考文章 94984)。

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