LogMiner 是Oracle公司从8i起提供的一个非常有用的分析工具,使用该工具可以轻松获得Oracle redo logfile中的具体内容。
1.安装Logminer
以sys用户执行:
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
其中dbmslm.sql建立dbms_logmnr包,dbmslmd.sql建立dbms_logmnr_d包。如果系统中已经存在这两个package,则说明logminer已经安装。
2.创建数据字典文件
创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。logminer也允许将数据字典保存在redo log中(数据库必须为归档模式),如果是分析本数据库的redo log,也可以不用生成而直接引用本数据的数据字典信息。
设置utl_file_dir参数,需要重启
SQL> alter system set utl_file_dir='D:' scope=spfile;
System altered.
重启后,执行:
SQL> exec dbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_locatio
n=>'D:',options=>dbms_logmnr_d.store_in_flat_file);
PL/SQL procedure successfully completed.
3.添加要分析的redo logfile
SQL> exec dbms_logmnr.add_logfile('d:oracleoradataningredo01.log',dbms_logmn
r.new);
PL/SQL procedure successfully completed.
SQL> exec dbms_logmnr.add_logfile('d:oracleoradataningredo02.log',dbms_logmn
r.addfile);
PL/SQL procedure successfully completed.
通过v$logmnr_logs可以查看已经加入的logfile
删除某个已经加入的logfile
Execute dbms_logmnr.add_logfile('d:oracleoradataningredo02.log’,dbms_logmnr.removefile);
5.查询分析的日志文件包含的scn范围和时间范围
SQL> select low_scn,next_scn,low_time,high_time from v$logmnr_logs;
LOW_SCN NEXT_SCN LOW_TIME HIGH_TIME
---------- ---------- --------- ---------
568805 597160 03-NOV-06 06-NOV-06
597160 2.8147E+14 06-NOV-06 01-JAN-88
6.开始分析日志
根据scn分析
SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'d:dict.ora',startscn=>568805,
endscn=>597160);
PL/SQL procedure successfully completed.
根据时间分析
SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'d:dict.ora',starttime=>to_dat
e('20061104 12:00:00','yyyymmdd hh24:mi:ss'), endtime =>to_date('20061105 12:00:
00','yyyymmdd hh24:mi:ss'));
PL/SQL procedure successfully completed.
默认情况下,logminer不会分析DDL日志。如果需要分析DDL,则需要修改option参数(只有使用数据字典文件,或者数据字典信息在redo log中时才能分析DDL):
SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.ddl_dict_tracking);
PL/SQL procedure successfully completed.
如果只分析已经commit的事务,则
SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.committed_data_only);
PL/SQL procedure successfully completed.
7.查询分析后的结果(该视图只在分析期间有数据)
SQL>select username,sql_redo,sql_undo From v$logmnr_contents;
查看DDL结果:
SQL> select sql_redo from v$logmnr_contents where opration='DDL';
8.停止分析
SQL> exec dbms_logmnr.end_logmnr;
PL/SQL procedure successfully completed.
默认情况下,logminer的一些数据都存放在system表空间中,最好修改一下:
SQL> exec dbms_logmnr_d.set_tablespace('users');
PL/SQL procedure successfully completed.
9.其他来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/193161/viewspace-50203/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/193161/viewspace-50203/