@$ORACLE_HOME/rdbms/admin/dbmslm.sql
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
-- 均需 SYS 身份執行
UTL_FILE_DIR = ('/path/to/dir')。EXEC DBMS_LOGMNR_D.BUILD(
DICTIONARY_FILENAME => 'logmn_dict.dat',
DICTIONARY_LOCATION => '/path/to/dir');字典讓 LogMiner 將內部 ID 解析為對象名稱。源庫 DDL 變更後需重建。
-- 首個文件(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);
建議使用歸檔日志,避免在線日志切換干擾。
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
核心視圖 V$LOGMNR_CONTENTS,關鍵列:
SCN, TIMESTAMP, OPERATION(INSERT/UPDATE/DELETE/DDL)SEG_OWNER, SEG_NAME, SEG_TYPE_NAMESQL_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),會話結束自動清理。
EXEC DBMS_LOGMNR.END_LOGMNR;
釋放 PGA 內存,結束事務。
若源庫開啟補充日志且字典已構建至 Redo Log(STORE_IN_REDO_LOGS),可直接:
EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
無需 UTL_FILE_DIR 與重啟,適合高可用環境(參考文章 94984)。