log miner 的作用
数据库恢复中有时会需要对Redo log进行分析,要会使用log miner,以便确定要恢复的时间点或SCN
日志挖掘的方法分类
1)DML
2)DDL
对语句DML进行日志挖掘
- 添加database补充日志
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
*注意:通过PL/SQL包的DML的日志挖掘,这步要先执行,在此之后的DML操作才能从日志里挖到。在OEM中也是要求先做这一步,不同的是之前的DML操作时可以挖到的。
- 确定要分析的日志范围,添加日志,分析
SQL>execute dbms_logmnr.add_logfile(logfilename=>'日志',options=>dbms_logmn.new); //第一个要加载的日志文件
SQL>execute dbms_logmnr.add_logfile(logfilename=>'补充日志',options=>dbms_logmn.addfile); //可以反复添加补充多个日志文件
- 执行logmin分析
SQL>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
- 查询分析结果,可以设置时间格式,也可以在显示方式里再确定格式
SQL>select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name='表名';
- 关闭日志分析
SQL>execute dbms_logmnr.end_logmnr;
对DDL的操作的log miner
- 如果是第一次做,先要建好logmnr目录,设置logmnr参数,存放数据字典文件dict.ora
$ mkdir /home/oracle/logmnr
SQL> alter system set utl_file_dir='/home/oracle/logmnr' scope=spfile;
- 简历数据字典文件dict.ora
SQL> dbms_logmnr_d.build('dict.ora','/home/oracle/logmnr',dbms_logmnr_d.store_in_flat_file);
- 添加日志分析
SQL>execute dbms_logmnr.add_logfile(logfilename=>'日志',options=>dbms_logmn.new);
SQL>execute dbms_logmnr.add_logfile(logfilename=>'追加日志',options=>dbms_logmn.addfile);
- 执行分析
SQL>execute dbms_logmnr.start_logmnr(dictfilename=>‘/home/oracle/logmnr/dict.ora’,options=>dbms_logmnr.ddl_dict_tracking);
- 查看分析结果
SQL> select username,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents WHERE USERNAME = 'SCOTT' and lower(sql_redo) like '%table%';
- 关闭日志分析
SQL> execute dbms_logmnr.end_logmnr;
例子将在053的不完全恢复一节中演示。
在oracle11g的OEM里已加入了有关log miner的功能,可以根据时间段由oracle自动选择需要的日志,比较方便,但只有提交的事务的信息,看来是从transaction的据奥都设计的。
OEM–>Availability–>Manage–>View and Manage Transctions