使用logminer的前提条件:
1、打开数据库的supplemental log
alter database add supplemental log data;
开启oracle的最小附加日志。
2、查询supplemental log的打开情况
select supplemental_log_data_min from v$database;
3、如果需要挖掘归档日志,数据库需要开启归档;
archive log list;
4、DML数据,修改数据
delete from ....
5、查询当前在用的日志文件
select * from v$log;
select * from v$logfile;
6、装载日志文件
begin
DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => 'xxxx/redo03.log',
OPTIONS => DBMS_LOGMNR.NEW);
end;
begin
DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => 'xxxx/redo04.log';
end;
检查装载后的日志文件:
select * from v$logmnr_file;
7、日志挖掘
===================使用本机日志进行挖掘===============================
BEGIN
DBMS_LOGMNR.START_LOGMNR(
OPTION => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
END;
===================使用放入redo log中的数据字典进行挖掘================
BEGIN
execute DBMS_LOGMNR.START_LOGMNR(
OPTION => DBMS_LOGMNR.DICT_FROM_REDO_LOGS);
END;
8、查看结果
select SQL_REDO,SQL_UNDO from v$logmnr_contents where table_name="XXX";
在查询这个视图的时候才开始真正的挖掘和分析redo日志文件。
9、关闭logminer
execute DBMS_LOGMNR.END_LOGMNR();
==============数据字典抽取到redo log中========================
下述内容应该在第6步之前执行:
EXECUTE DBMS_LOGMNR_D.BUILD(
OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS)
查看包含数据字典的redo log 文件:
select name from v$archived_log where dictionary_begin='YES'
select name from v$archived_log where dictionary_end='YES'