2026-03-12 21:01:38

This commit is contained in:
2026-03-12 22:01:38 +01:00
parent 3bd1db26cc
commit 26296b6d6a
336 changed files with 27507 additions and 0 deletions

124
logminer/logmnr_02.txt Normal file
View File

@@ -0,0 +1,124 @@
# https://redikx.wordpress.com/2015/07/10/logminer-to-analyze-archive-logs-on-different-database/
alias HUTTPRD='rlwrap sqlplus sys/"Secret00!"@bakura:1521/HUTTPRD as sysdba'
alias ZABRAKPRD='rlwrap sqlplus sys/"Secret00!"@togoria:1521/ZABRAKPRD as sysdba'
alias DURGA='rlwrap sqlplus jedi/"Secret00!"@bakura:1521/DURGA as sysdba'
alias MAUL='rlwrap sqlplus jedi/"Secret00!"@togoria:1521/MAUL as sysdba'
alias WOMBAT='sqlplus wombat/animal@bakura/DURGA'
# on PDB DURGA as WOMBAT user
alter session set NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
drop table DEMO purge;
create table DEMO(d date);
insert into DEMO values (sysdate);
insert into DEMO values (sysdate);
insert into DEMO values (sysdate);
insert into DEMO values (sysdate);
insert into DEMO values (sysdate);
commit;
insert into DEMO values (sysdate);
commit;
delete from DEMO;
commit;
# backup generated archivelog
rman target /
run
{
set nocfau;
allocate channel ch01 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
allocate channel ch02 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
backup as compressed backupset archivelog all delete input;
}
# store dictionary in redolog
begin
dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);
end;
/
# identify archivelog containing the dictionary
select thread#,sequence# from gv$archived_log where DICTIONARY_BEGIN='YES';
select thread#,sequence# from gv$archived_log where DICTIONARY_END='YES';
# backup archivelog containing the dictionary
rman target /
run
{
set nocfau;
allocate channel ch01 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
allocate channel ch02 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
backup as compressed backupset archivelog sequence 12 delete input;
}
# Goal: list all DML against DEMO table between 2024-06-23 15:00:00 and 2024-06-23 16:00:00
# identify required archivelog
select THREAD#,max(SEQUENCE#) from gv$archived_log where FIRST_TIME<=timestamp'2024-06-23 15:00:00' group by THREAD#;
select THREAD#,min(SEQUENCE#) from gv$archived_log where NEXT_TIME>=timestamp'2024-06-23 16:00:00' group by THREAD#;
# all operation will be realized on a different CDB on the CDB$ROOT
# restore required archivelog
rman target /
run
{
set nocfau;
allocate channel ch01 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
allocate channel ch02 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
set archivelog destination to '/mnt/yavin4/tmp/00000/logminer/arch/';
restore archivelog from sequence 3 until sequence 8;
}
# restore dictionary archivelog
rman target /
run
{
set nocfau;
allocate channel ch01 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
allocate channel ch02 device type disk format '/mnt/yavin4/tmp/00000/logminer/backup/%d_%U_%s_%t.bck';
set archivelog destination to '/mnt/yavin4/tmp/00000/logminer/arch/';
restore archivelog from sequence 12 until sequence 12;
}
# add log
execute dbms_logmnr.add_logfile(logfilename=>'/mnt/yavin4/tmp/00000/logminer/arch/1_12_1172413318.arc', options => dbms_logmnr.new);
execute dbms_logmnr.add_logfile(logfilename=>'/mnt/yavin4/tmp/00000/logminer/arch/1_3_1172413318.arc', options => dbms_logmnr.addfile);
execute dbms_logmnr.add_logfile(logfilename=>'/mnt/yavin4/tmp/00000/logminer/arch/1_4_1172413318.arc', options => dbms_logmnr.addfile);
execute dbms_logmnr.add_logfile(logfilename=>'/mnt/yavin4/tmp/00000/logminer/arch/1_5_1172413318.arc', options => dbms_logmnr.addfile);
execute dbms_logmnr.add_logfile(logfilename=>'/mnt/yavin4/tmp/00000/logminer/arch/1_6_1172413318.arc', options => dbms_logmnr.addfile);
execute dbms_logmnr.add_logfile(logfilename=>'/mnt/yavin4/tmp/00000/logminer/arch/1_7_1172413318.arc', options => dbms_logmnr.addfile);
execute dbms_logmnr.add_logfile(logfilename=>'/mnt/yavin4/tmp/00000/logminer/arch/1_8_1172413318.arc', options => dbms_logmnr.addfile);
# to list added log
set lines 256
col FILENAME for a60
col INFO for a60
select FILENAME,INFO from V$LOGMNR_LOGS;
# start logminer
begin
DBMS_LOGMNR.START_LOGMNR (startTime=>timestamp'2024-06-23 15:00:00'
,endTime=> timestamp'2024-06-23 16:00:00'
,OPTIONS=>DBMS_LOGMNR.DICT_FROM_REDO_LOGS + DBMS_LOGMNR.COMMITTED_DATA_ONLY
);
end;
/
# do mining
alter session set NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
col username for a20
col sql_redo for a70
col table_name for a20
col timestamp for a25
select timestamp,username,table_name,sql_redo from v$logmnr_contents where seg_name='DEMO';