日志挖掘
1、运行以下2个脚本安装logminer功能,一般数据库都已经安装好了
@$ORACLE_HOME/rdbms/admin/dbmslm.sql@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
2、修改utl_file_dir参数
要生成数据字典文件,首先要修改一个utl_file_dir参数,修改为*或者想存放数据字典文件位置的目录:conn / as sysdba
alter system set utl_file_dir='*' scope=spfile;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
shutdown immediate
startup
3、生成数据字典文件
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dict20100226.txt',dictionary_location => '/oracle/data');4、创建使用的表空间
create tablespace logmnr datafile '/oracle/data/oradata/ora10/logmnr.dbf' size 50m autoextend on extent management local segment space management auto;5、设置使用的表空间
EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnr')6、填加要分析的日志文件
6.1 添加第一个
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/orabak/testarch/1_89802_640266118.dbf',Options=>dbms_logmnr.new);6.2 在已有的日志基础上添加
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/orabak/testarch/1_89802_640266118.dbf',Options=>dbms_logmnr.addfile);6.3 将分析日志从列表移走
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/orabak/testarch/1_89802_640266118.dbf',Options=>dbms_logmnr.removefile);6.4 一个批量添加的脚本(注意一次不要添的太多,视机器性能决定,太多分析时间很长,一条一条分析就行)
declarev_sql varchar2(2000);
cursor archived_log_name is select name from v$archived_log where dest_id=1 and name is not null;
v_name archived_log_name%rowtype;
begin
open archived_log_name;
loop
fetch archived_log_name into v_name;
exit when archived_log_name%notfound;
if archived_log_name%rowcount<=1 then
v_sql := 'EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'||''''||v_name.name||''''||',Options=>dbms_logmnr.new);';
--DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>v_name.name,Options=>dbms_logmnr.new);
dbms_output.put_line(v_sql);
else
v_sql := 'EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'||''''||v_name.name||''''||',Options=>dbms_logmnr.addfile);';
--DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>v_name.name,Options=>dbms_logmnr.addfile);
dbms_output.put_line(v_sql);
end if;
end loop;
end;
/
7、开始分析日志
提取特定时间的日志:exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/script/dict20100226.txt',starttime=>to_date('2010-02-25 22:30:00','YYYY-MM-DD HH24:MI:SS'),endtime=>to_date('2010-02-26 9:00:59','YYYY-MM-DD HH24:MI:SS'))
使用在线数据字典:
EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
8、查看结果
select * from v$logmnr_contents where table_space='SYSTEM' and sql_redo like '%alter%';select timestamp,username,session#,sql_redo,operation from v$logmnr_contents;
create table logmnr as select * from v$logmnr_contents;
9、结束分析,释放PGA内存资源
SQL> exec dbms_logmnr.end_logmnr;PL/SQL procedure successfully completed.
注意,v$logmnr_contents内容保存了日志的内容,只在当前会话有效,如果想长期保存分析,可以在当前会话用create table logmnr as select * from v$logmnr_contents语句来持久保存。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11780477/viewspace-705056/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11780477/viewspace-705056/