---菜鸟一枚,如果不妥之处还望各路大神指点出来,谢谢啊!!,此为最基本的日志分析,还会对此文进行更新。
1、创建DBMS_LOGMNR包
SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
-------以sysdba身份运行
2、设置了初始化参数:UTL_FILE_DIR
并确认Oracle对改目录拥有读写权限,然后启动实例。示例中UTL_FILE_DIR参数如下:
alter system set utl_file_dir = '/u01/utl ' scope=spfile; --此参数必须重启数据库之后才能生效,此处我以/u01/utl为存放字典文件的目录(可以自定义)。
3、重启数据库
4、SQL> show parameter utl
NAME TYPE VALUE
------------------------ ----------- ------------------------------
utl_file_dir string /u01/utl
这个目录主要用于存放dbms_logmnr_d.build过程所产生的字典信息文件。
5、
BEGIN
dbms_logmnr_d.build(
dictionary_filename => 'dict.dat',
dictionary_location => '/u01/utl'
);
end;
/ ----生成字典文件
6、
Execute dbms_logmnr.add_logfile(logfilename=>'/u01/utl/ARC0805446139.0001',options=>dbms_logmnr.new); -----创建新的日志分析列表。
execute dbms_logmnr.add_logfile(logfilename=>'/u01/utl/ARC0805446140.0001',options=>dbms_logmnr.addfile); ----往上述列表中添加归档日志文件。
7、
BEGIN
dbms_logmnr.start_logmnr(
dictfilename => '/u01/utl/dict.dat',
starttime => to_date('20130613 18:10:00','yyyymmdd hh24:mi:ss'),
endtime => to_date('20130613 18:14:00','yyyymmdd hh24:mi:ss')
);
END;
/ ---开始分析2013-06-13 18:10:00到2013-06-13 18:14:00之间发生的数据更改;如果指定的开始时间和终止时间超出日志范围会报错。
execute dbms_logmnr.start_logmnr(dictfilename =>'/u01/utl/dict.dat'); ---如果不指定时间范围则使用此命令开始分析。
8、select operation,sql_redo,sql_undo from v$logmnr_contents;--从v$logmnr_contents视图中查询分析结果。
9、execute dbms_logmnr.end_logmnr(); --结束分析。
ps:
---1、如果用的是归档日志的话可以这样分析,但是如果你用的是rman备份出来的归档日志备份集,那就需要restore把备份集解开,在进行分析。
---2、字典文件最好是归档文件所在的数据库中的。
---3、字典文件最好在要分析的时间点之后创建。
注意:视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个session的生命期中存在。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。