我正在尝试使用Oracle LogMiner(DBMS_LOGMNR
包)来实现基于重做日志的审计跟踪功能。但每当我查询V$LOGMNR_CONTENTS
时,它会在闪回恢复区(SELECT NAME FROM V$RECOVERY_FILE_DEST
)中创建几个大的(最多50M)归档日志文件,尽管我的测试数据库中每小时只有几个事务。使用Oracle LogMiner几次后,将使用闪回恢复区中的所有空间,Oracle将停止工作。
有没有办法阻止Oracle LogMiner在闪回恢复区创建归档日志?
我通过以下方式初始化Oracle LogMiner:
SYS.DBMS_LOGMNR_D.BUILD(options => SYS.DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
SYS.DBMS_LOGMNR.START_LOGMNR(startScn => PREV_SCN, endScn => NEXT_SCN,
options =>
SYS.DBMS_LOGMNR.COMMITTED_DATA_ONLY +
SYS.DBMS_LOGMNR.DICT_FROM_REDO_LOGS +
SYS.DBMS_LOGMNR.SKIP_CORRUPTION +
SYS.DBMS_LOGMNR.CONTINUOUS_MINE
);
PREV_SCN和NEXT_SCN之间的距离在我的情况下总是很小,只涵盖几个交易。
当我使用ALTER DATABASE NOARCHIVELOG;
关闭存档日志时,DBMS_LOGMNR_D.BUILD
会引发ORA-01325
:必须启用存档日志模式才能构建到日志流中。
答案 0 :(得分:1)
Logminer在重做日志中创建条目的原因是因为您已具体询问:
SYS.DBMS_LOGMNR_D.BUILD(options => SYS.DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
^^^^^^^^^^^^^^^^^^
如果您不希望logminer将其数据存储在重做日志中,请改用DBMS_LOGMNR_D.STORE_IN_FLAT_FILE
。有关如何使用平面文件设置logminer的分步指南,请参阅this blog note。