Oracle日志挖掘(一)

2014-11-24 17:54:24 · 作者: · 浏览: 2

alter databaseadd supplemental logdata;


例子:SCOTT下UPDATE某记录,我想挖掘出这个操作的时间以及SCN,如


update emp set sal=9000;


步骤:


col member for a40



select v1.group#,v1.sequence#,v1.first_change#,v1.status,v2.member


from v$log v1,v$logfile v2


where v1.group#=v2.group#


order by 1;



结果:


GROUP# SEQUENCE# FIRST_CHANGE# STATUS MEMBER


-------------------- ------------- ---------------- ----------------------------------------


1 7 1346456 CURRENT /u01/oradata/mike/redo01.log


1 7 1346456 CURRENT /u01/oradata/mike/redo01b.log


2 5 1346098 INACTIVE /u01/oradata/mike/redo02b.log


2 5 1346098 INACTIVE /u01/oradata/mike/redo02.log


3 6 1346283 INACTIVE /u01/oradata/mike/redo03b.log


3 6 1346283 INACTIVE /u01/oradata/mike/redo03.log



6 rows selected.


Exec sys.dbms_logmnr.add_logfile(logfilename=>'/u01/oradata/mike/redo01.log');


如果没有数据字典,使用dbms_logmnr.dict_from_online_catalog选项参数,意思是从指定的dbms_logmnr.add_logfile或重做日志中找到数据字典。


exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);



select scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo,sql_undo


from v$logmnr_contents


where seg_name='EMP'and seg_owner='SCOTT';


结果:


---------- -------------------


SQL_REDO


----------------------------------------------------------------------------------------------------


SQL_UNDO


----------------------------------------------------------------------------------------------------


1352504 2013-06-20 11:26:38


update "SCOTT"."EMP"set "SAL"= '9000'where "SAL"= '2800'and ROWID= 'AAASb2AAEAAAACXAAA';


update "SCOTT"."EMP"set "SAL"= '2800'where "SAL"= '9000'and ROWID= 'AAASb2AAEAAAACXAAA';



1352504 2013-06-20 11:26:38


update "SCOTT"."EMP"set "SAL"= '9000'where "SAL"= '2800'and ROWID= 'AAASb2AAEAAAACXAAB';


update "SCOTT"."EMP"set "SAL"= '2800'where "SAL"= '9000'and ROWID= 'AAASb2AAEAAAACX………


exec dbms_logmnr.end_logmnr;


execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);


SCOTT用户下删除表test;


drop table test;


select group#,sequence#,statusfrom v$log;


结果:


GROUP# SEQUENCE# STATUS


-------------------- ----------------


1 13 INACTIVE


2 14 CURRENT


3 12 INACTIVE



select name,dictionary_begin,dictionary_endfrom v$archived_log;


结果:


NAME DIC DIC


----------------------------------------------------------------------------------- ---


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_3_8w4proqh_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_4_8w4psx1j_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_5_8w4q3sol_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_6_8w4qc0yo_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_7_8w564nnh_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_8_8w56c7gz_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_9_8w56d13f_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_10_8w56mrcn_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_11_8w5bskbb_.arc NO NO


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_12_8w5bstfx_.arc YES YES


/u01/fast_recovery_area/MIKE/archivelog/2013_06_20/o1_mf_1_13_8w5byo0v_.arc NO NO



11 rows selected.


发现有一个归档日志中dictionary_begin和dictionary_e