ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 日志挖掘

日志挖掘

原创 Linux操作系统 作者:ilsyx 时间:2011-08-17 09:54:08 0 删除 编辑

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 一个批量添加的脚本(注意一次不要添的太多,视机器性能决定,太多分析时间很长,一条一条分析就行)

declare
v_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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: RMAN备份脚本
请登录后发表评论 登录
全部评论

注册时间:2009-06-12

  • 博文量
    194
  • 访问量
    596601