微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

日志挖掘 log miner

日志挖掘 log miner

一、log miner的作用:

数据库恢复中有时会需要对Redo log进行分析, 要会使用log miner,以便确定要恢复的时间点或SCN

二、有两种日志挖掘方法 针对DML和DDL,整理如下 :

1.对语句DML进行日志挖掘:

1)添加database补充日志
sql>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

//注意:通过PL/sql包的DML的日志挖掘,这步要先执行,在此之后的DML操作才能从日志里挖到。在OEM中也是要求先做这一步,不同的是之前的DML操作是可以挖到的。

2)确定要分析的日志范围,添加日志,分析
sql>execute dbms_logmnr.add_logfile(logfilename=>’日志’,options=>dbms_logmnr.new); //第一个要加载的日志文件

sql>execute dbms_logmnr.add_logfile(logfilename=>’补充日志’,options=>dbms_logmnr.addfile); //可以反复添加补充多个日志文件

3)执行logmnr 分析
sql>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

4)查询分析结果,可以设置时间格式,也可以在显示方式里再确定格式.

sql>select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name=’表名’;

5)关闭日志分析
sql>execute dbms_logmnr.end_logmnr;


sys:
sql> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

scott:
sql> create table a (id int);
sql> insert into a values(1);
sql> update a set id=5;
sql> commit;
sql> delete a;
sql> commit;
Commit complete.

sys:

sql> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FirsT_CHANGE# FirsT_TIME
———- ———- ———- ———- ———- ——– —————- ————- ———–
1 1 26 52428800 2 NO CURRENT 2257870 2014-6-05 19
2 1 25 52428800 2 YES INACTIVE 2257866 2014-6-05 19
3 1 23 52428800 2 YES INACTIVE 2257862 2014-6-05 19
4 1 24 52428800 2 YES INACTIVE 2257864 2014-6-05 19

//上面a 表的DML操作都写进了current组里,记住sequence#是26号。然后手工切换当前日志进archive里。

sql> alter system switch logfile;

sql> /

sql> select name from v$archived_log;

/u01/disk1/timran/arch_1_789252862_21.log
/u01/disk1/timran/arch_1_789252862_22.log
/u01/disk1/timran/arch_1_789252862_23.log
/u01/disk1/timran/arch_1_789252862_24.log
/u01/disk1/timran/arch_1_789252862_25.log
/u01/disk1/timran/arch_1_789252862_26.log
/u01/disk1/timran/arch_1_789252862_27.log
/u01/disk1/timran/arch_1_789252862_28.log
/u01/disk1/timran/arch_1_789252862_29.log

62 rows selected

//切换后,sequence#26的日志的应该对应的是/u01/disk1/timran/arch_1_789252862_26.log

sql> execute dbms_logmnr.add_logfile(logfilename=>’/u01/disk1/timran/arch_1_789252862_26.log’,options=>dbms_logmnr.new);

sql> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

sql>select scn,to_char(timestamp,’yyyy-mm-dd hh24:mi:ss’) timestamp,sql_redo from v$logmnr_contents where seg_name=’A’;

SCN TIMESTAMP sql_REDO
———- ——————- ——————————————————————————–
2258232 2014-06-05 19:43:16 drop table a purge;
2258334 2014-06-05 19:44:20 create table a (id int);
2258341 2014-06-05 19:44:28 insert into “SCott”.”A”(“ID”) values (’1′);
2258349 2014-06-05 19:44:46 update “SCott”.”A” set “ID” = ’5′ where “ID” = ’1′ and ROWID = ‘AAANBAAAEAAAAGEA
2258353 2014-06-05 19:44:52 delete from “SCott”.”A” where “ID” = ’5′ and ROWID = ‘AAANBAAAEAAAAGEAAA’;

2.对DDL的操作的log miner:

1)如果是第一次做,先要建好logmnr目录,

设置logmnr 参数,存放数据字典文件dict.ora
$ mkdir /home/oracle/logmnr

sql> alter system set utl_file_dir=’/home/oracle/logmnr’ scope=spfile;

2)建立数据字典文件dict.ora
sql> execute dbms_logmnr_d.build(‘dict.ora’,’/home/oracle/logmnr’,dbms_logmnr_d.store_in_flat_file);

3)添加日志分析
sql> execute dbms_logmnr.add_logfile(logfilename=>’日志文件’,options=>dbms_logmnr.new);
sql> execute dbms_logmnr.add_logfile(logfilename=>’追加日志’,options=>dbms_logmnr.addfile);

4)执行分析
sql> execute dbms_logmnr.start_logmnr(dictfilename=>’/home/oracle/logmnr/dict.ora’,options=>dbms_logmnr.ddl_dict_tracking);

5)查看分析结果
sql> select username,’yyyy-mm-dd hh24:mi:ss’),sql_redo from v$logmnr_contents WHERE USERNAME =’SCott’ and lower(sql_redo) like ‘%table%’;

6)关闭日志分析 sql> execute dbms_logmnr.end_logmnr;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐