DELETE 無 WHERE、TRUNCATE 表)。-- 必須以 SYS 執行
@$ORACLE_HOME/rdbms/admin/dbmslm.sql
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
-- 1. 設置 UTL_FILE_DIR (9i/10g 需重啟,11g+ 可動態)
-- init.ora: UTL_FILE_DIR = '/u01/app/oracle/logmnr_dict'
-- 11g+: ALTER SYSTEM SET UTL_FILE_DIR='/u01/app/oracle/logmnr_dict' SCOPE=SPFILE; -- 仍需重啟
-- 2. 重啟後構建字典
EXEC DBMS_LOGMNR_D.BUILD(
DICTIONARY_FILENAME => 'logmnr_dict.ora',
DICTIONARY_LOCATION => '/u01/app/oracle/logmnr_dict'
);
10g+ 推薦聯機字典模式:DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG),無需文件維護,自動追蹤 DDL 變更。
-- 添加首個日志 (NEW)
EXEC DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/u01/app/oracle/oradata/arch/ARC00123.001',
OPTIONS => DBMS_LOGMNR.NEW
);
-- 追加更多日志 (ADDFILE)
EXEC DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/u01/app/oracle/oradata/arch/ARC00124.001',
OPTIONS => DBMS_LOGMNR.ADDFILE
);
-- 移除日志 (REMOVEFILE)
EXEC DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/u01/app/oracle/oradata/arch/ARC00123.001',
OPTIONS => DBMS_LOGMNR.REMOVEFILE
);
-- 使用離線字典
EXEC DBMS_LOGMNR.START_LOGMNR(
DICTFILENAME => '/u01/app/oracle/logmnr_dict/logmnr_dict.ora',
STARTTIME => TO_DATE('2024-01-15 10:00:00', 'YYYY-MM-DD HH24:MI:SS'),
ENDTIME => TO_DATE('2024-01-15 11:00:00', 'YYYY-MM-DD HH24:MI:SS')
-- 或使用 SCN 範圍: STARTSCN => 12345678, ENDSCN => 12345999
);
-- 核心視圖
DESC V$LOGMNR_CONTENTS;
-- 典型查詢:找出 SCOTT 用戶在 EMP 表的 DELETE 操作
SELECT TIMESTAMP, SCN, OPERATION, TABLE_NAME, SQL_REDO, SQL_UNDO
FROM V$LOGMNR_CONTENTS
WHERE SEG_OWNER = 'SCOTT'
AND TABLE_NAME = 'EMP'
AND OPERATION = 'DELETE'
ORDER BY TIMESTAMP;
關鍵欄位:OPERATION(INSERT/UPDATE/DELETE/DDL)、SQL_REDO(重做 SQL)、SQL_UNDO(回滾 SQL)、ROW_ID、USERNAME。
EXEC DBMS_LOGMNR.END_LOGMNR;
ALTER SESSION SET PGA_AGGREGATE_TARGET=500M。Flashback Transaction Query (10g+) 可更直觀查看事務級變更。