安裝
@$ORACLE_HOME/rdbms/admin/dbmslm.sql
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
-- 均需 SYS 身分執行
模式一:字典存 Flat File(需重啟)
-- 1. 設定 UTL_FILE_DIR 並重啟
ALTER SYSTEM SET utl_file_dir='/u01/app/oracle/logmnr' SCOPE=SPFILE;
STARTUP FORCE;
-- 2. 建立字典檔
EXEC dbms_logmnr_d.build(
dictionary_filename => 'dict.ora',
dictionary_location => '/u01/app/oracle/logmnr',
options => dbms_logmnr_d.store_in_flat_file
);
-- 3. 加入日誌檔
EXEC dbms_logmnr.add_logfile(logfilename => '/arch/1_3814.dbf', options => dbms_logmnr.new);
EXEC dbms_logmnr.add_logfile(logfilename => '/arch/1_3815.dbf', options => dbms_logmnr.addfile);
-- 4. 啟動分析
EXEC dbms_logmnr.start_logmnr(dictfilename => '/u01/app/oracle/logmnr/dict.ora');
-- 5. 查詢結果
CREATE TABLE logmnr_result AS SELECT * FROM v$logmnr_contents;
-- 6. 結束
EXEC dbms_logmnr.end_logmnr();
模式二:字典存 Redo Log(推薦,免重啟)
-- 1. 字典直接寫入 Redo
EXEC dbms_logmnr_d.build(options => dbms_logmnr_d.store_in_redo_logs);
-- 2. 加入日誌檔(同上)
-- 3. 啟動分析
EXEC dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_redo_logs);
-- 後續查詢與結束同模式一
10g/11g/12c/19c 必須啟用補充日誌
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
-- 關閉
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
跨實例/跨平台分析限制
- 必須使用被分析資料庫產生的字典,而非安裝 LogMiner 的資料庫字典。
- 字符集必須相同。
- 平台必須相同(Unix 產生的 Redo 必須在 Unix 上分析,不可在 Windows)。
- 僅支援 Oracle 8.0 以上版本產生的 Redo。
常用查詢範例
-- 查特定表 DML
SELECT sql_redo, sql_undo, timestamp, username
FROM v$logmnr_contents
WHERE seg_name = 'EMP' AND operation IN ('INSERT','UPDATE','DELETE');
-- 查特定用戶活動
SELECT * FROM v$logmnr_contents WHERE username = 'SCOTT';
-- 查 DDL
SELECT sql_redo FROM v$logmnr_contents WHERE operation = 'DDL';