如何使用Logminer来分析具体的DML操作日志
在Oracle数据库维护中,常常需要分析原来数据库都做了哪些删除、更新、增加数据的操作,所以一般需要用到Logminer这工具来分析归档日志。
环境:AIX5.3+Oracle10.2.0.1 使用IBM的Tivoli Storage Manager把数据库数据、归档日志备份到带库中
1、确定具体时间的DML操作,把相应的归档日志从带库恢复到数据库中
2、用Logminer来分析相应的归档日志
一.在sqlplus用sys超级用户登陆数据库中,然后把当前的时间改成'yyyy-mm-dd hh24:mi:ss'格式,这样可以看清楚归档日志的起始时间:
SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
二、v$log_history视图的sequence#为归档日志序列号,first_time为该归档日志的开始时间。
SQL>select sequence#,first_time from v$log_history;
记下某天的归档日志序列,比如为3988--4000
三、用rman target/ 进入数据库,把相应的归档日志从带库取到数据库中来,/oracle/oms/oradata/temp目录为放归档日志的目录。
RUN
{
SET ARCHIVELOG DESTINATION TO '/oracle/oms/oradata/temp';
RESTORE ARCHIVELOG SEQUENCE 3988;
}
注:导出多个归档日志:
RUN
{
SET ARCHIVELOG DESTINATION TO '/oracle/oms/oradata/temp';
RESTORE ARCHIVELOG SEQUENCE between 2895 and 2897;
}
注:3988为归档日志的序列号,有多个日志,需要运行多个上面的语句。
四、建立日志分析列表,把第一个归档日志放到分析列表
SQL>execute dbms_logmnr.add_logfile(logfilename=>'/oracle/oms/oradata/temp/1_3988_644336885.dbf',options=>dbms_logmnr.new);
五、把第二个归档日志放到分析列表(第二个归档日志以后都是下面的格式)
SQL>execute dbms_logmnr.add_logfile(logfilename=>'/oracle/oms/oradata/temp/1_3989_644336885.dbf',options=>dbms_logmnr.addfile);
六、启动LogMiner
SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
七、把分析出来的数据放在logminer_test表中,这样方便查询。因为表v$logmnr_contents的数据量很大,选择一个空闲的表空间
SQL>
create table logminer_test tablespace MLOG_NORM_SPACE
as
select * from v$logmnr_contents;
八、把分析日志表logminer_test的查询权限赋予给lhomsread只读的数据库用户,这样使用第三方工具很方便查询(plsql等):
SQL>grant select on logminer_test to lhomsread;
九、结束logminer
SQL> execute dbms_logmnr.end_logmnr;