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

Oracle LogMiner 完整指南:安裝、啟用、日誌分析與審計實戰

     編輯:Oracle 資料庫相關知識

LogMiner 核心價值

  • 離線分析重做/歸檔日誌,**不影響線上效能**。
  • 解析 DML(Insert/Update/Delete)、DDL(9i+)、產生反向 SQL(UNDO)。
  • 支援:審計追蹤、邏輯損壞時間定位、精細事務級恢復、容量規劃趨勢分析。

版本支援矩陣

Oracle 版本分析 DML分析 DDL備註
8i✓✗僅 DML
9i+✓✓完整功能

可分析舊版(8.0+)日誌,但工具需安裝於 8i+ 資料庫。

限制事項

  • 不支援:索引組織表、LONG、LOB、集合型別、MTS(共享伺服器)環境。
  • 字典檔必須來自**被分析資料庫實例**,而非安裝 LogMiner 的資料庫。
  • 分析端與來源端字元集必須相同、平台必須相同(如同為 Linux x86_64)。

安裝步驟(以 SYS 身分)

@$ORACLE_HOME/rdbms/admin/dbmslm.sql    -- 建立 DBMS_LOGMNR 套件
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql   -- 建立 DBMS_LOGMNR_D 套件(字典產生)

使用流程

  1. 產生字典檔(三選一):
    • 線上模式:EXEC DBMS_LOGMNR_D.BUILD('dict.ora', '/path', DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);
    • 重做日誌模式:EXEC DBMS_LOGMNR_D.BUILD(options => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
    • 平檔模式(舊版相容):同上 STORE_IN_FLAT_FILE。
  2. 啟動 LogMiner 會話:
    EXEC DBMS_LOGMNR.START_LOGMNR(
      startScn => 123456,
      endScn   => 789012,
      DictFileName => '/path/dict.ora',
      Options => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
  3. 查詢 V$LOGMNR_CONTENTS:
    SELECT scn, timestamp, operation, sql_redo, sql_undo, seg_owner, seg_name
    FROM   v$logmnr_contents
    WHERE  seg_owner = 'SCOTT'
    AND    operation IN ('INSERT','UPDATE','DELETE');
  4. 結束會話:EXEC DBMS_LOGMNR.END_LOGMNR;

實戰場景:誤刪資料恢復

  1. 確知誤操作大約時間窗口(如 10:00-10:05)。
  2. 識別對應歸檔日誌序號(V$ARCHIVED_LOG)。
  3. 啟動 LogMiner 覆蓋該 SCN 範圍。
  4. 篩選 OPERATION='DELETE' 且 SEG_NAME='TARGET_TABLE'。
  5. 取得 SQL_UNDO 欄位(即反向 INSERT),直接執行即可恢復。

進階:持續性審計部署

  • 排程腳本每小時啟動 LogMiner 分析新歸檔,將關鍵 DML/DDL 寫入審計表。
  • 搭配 DBMS_ALERT 或外部表實現近即時異常警報(如大量刪除、DDL 變更)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved