A PL/SQL to add archived redo log files to logminer
Da HaiJan 19 2010 — edited Jan 19 2010Hi,
I make a programm to automatically add all archived redo log files to logminer utility, like below,
--logmnr.sql
set serveroutput on
declare
v_redo_dictionary_file VARCHAR2(100);
v_arihived_log_file VARCHAR2(100);
CURSOR logfile_cur IS
select name from v$archived_log WHERE to_char(COMPLETION_TIME,'dd_MM_yyyy') > '18_01_2010' and sequence# not in (select sequence# from v$archived_log WHERE DICTIONARY_BEGIN = 'YES' AND dictionary_end = 'YES');
begin
--Create DICTIONARY file on the SOURCE database's redo files
sys.dbms_logmnr_d.build( OPTIONS => sys.DBMS_LOGMNR_D.store_in_redo_logs);
select name into v_redo_dictionary_file from v$archived_log where DICTIONARY_BEGIN = 'YES' AND dictionary_end = 'YES' and sequence# = (select MAX(sequence#) from v$archived_log WHERE DICTIONARY_BEGIN = 'YES' AND dictionary_end = 'YES');
--add dictionary log files
sys.dbms_logmnr.add_logfile( logfilename=> v_redo_dictionary_file,
options=> sys.dbms_logmnr.new);
--add log files
open logfile_cur;
LOOP
FETCH logfile_cur INTO v_arihived_log_file;
sys.dbms_logmnr.add_logfile( logfilename=> v_arihived_log_file);
EXIT WHEN logfile_cur%NOTFOUND;
END LOOP;
CLOSE logfile_cur;
--start LogMiner, also enable ddl tracking
sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_redo_logs + sys.dbms_logmnr.ddl_dict_tracking);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/
##
SQL> @logmnr.sql
ORA-01013: user requested cancel of current operation
ORA-01289: cannot add duplicate logfile /usr/tmp/arch/1_4026_573231463.dbf
##
SQL> select name from v$archived_log WHERE to_char(COMPLETION_TIME,'dd_MM_yyyy') > '18_01_2010' and sequence# not in (select sequence# from v$archived_log WHERE DICTIONARY_BEGIN = 'YES' AND dictionary_end = 'YES');
NAME
--------------------------------------------------------------------------------
/usr/tmp/arch/1_3973_573231463.dbf
/usr/tmp/arch/1_3974_573231463.dbf
/usr/tmp/arch/1_3975_573231463.dbf
/usr/tmp/arch/1_3977_573231463.dbf
/usr/tmp/arch/1_3978_573231463.dbf
/usr/tmp/arch/1_3979_573231463.dbf
/usr/tmp/arch/1_3981_573231463.dbf
/usr/tmp/arch/1_3982_573231463.dbf
/usr/tmp/arch/1_3983_573231463.dbf
/usr/tmp/arch/1_3984_573231463.dbf
/usr/tmp/arch/1_3986_573231463.dbf
NAME
--------------------------------------------------------------------------------
/usr/tmp/arch/1_3987_573231463.dbf
/usr/tmp/arch/1_3988_573231463.dbf
/usr/tmp/arch/1_3989_573231463.dbf
/usr/tmp/arch/1_3990_573231463.dbf
/usr/tmp/arch/1_3991_573231463.dbf
/usr/tmp/arch/1_3992_573231463.dbf
/usr/tmp/arch/1_3994_573231463.dbf
/usr/tmp/arch/1_3995_573231463.dbf
/usr/tmp/arch/1_3996_573231463.dbf
/usr/tmp/arch/1_3997_573231463.dbf
/usr/tmp/arch/1_3999_573231463.dbf
NAME
--------------------------------------------------------------------------------
/usr/tmp/arch/1_4001_573231463.dbf
/usr/tmp/arch/1_4003_573231463.dbf
/usr/tmp/arch/1_4004_573231463.dbf
/usr/tmp/arch/1_4005_573231463.dbf
/usr/tmp/arch/1_4006_573231463.dbf
/usr/tmp/arch/1_4007_573231463.dbf
/usr/tmp/arch/1_4009_573231463.dbf
/usr/tmp/arch/1_4010_573231463.dbf
/usr/tmp/arch/1_4011_573231463.dbf
/usr/tmp/arch/1_4012_573231463.dbf
/usr/tmp/arch/1_4013_573231463.dbf
NAME
--------------------------------------------------------------------------------
/usr/tmp/arch/1_4015_573231463.dbf
/usr/tmp/arch/1_4017_573231463.dbf
/usr/tmp/arch/1_4018_573231463.dbf
/usr/tmp/arch/1_4019_573231463.dbf
/usr/tmp/arch/1_4020_573231463.dbf
/usr/tmp/arch/1_4022_573231463.dbf
/usr/tmp/arch/1_4023_573231463.dbf
/usr/tmp/arch/1_4025_573231463.dbf
/usr/tmp/arch/1_4026_573231463.dbf
Why I have error' ORA-01289: cannot add duplicate logfile /usr/tmp/arch/1_4026_573231463.dbf'
Please suggest,
Thanks
Roy