使用Logminer挖掘日志

某客户数据被莫名篡改,为找到根源,促使我学习Logminer的使用。

Logminer可以分析的文件包括联机在线日志(online redo log)和归档日志。步骤如下:

  1. 创建DBMS_LOGMNR包,以sysdba身份登入sqlplus,执行sql>后的语句进行安装logminer包
    SQL> @?/rdbms/admin/dbmslms.sql      
    SQL> @?/rdbms/admin/dbmslm.sql      
    SQL> @?/rdbms/admin/dbmslmd.sql      
    SQL> @?/rdbms/admin/prvtlm.plb
  2. 查看客户UTL_FILE_DIR参数,此参数指定分析数据的存放路径。
    SQL> show parameter UTL_FILE_DIR
  3. 如果此路径已经有值,那么恭喜你,少了很多麻烦。如果没有值,对于使用pfile作为参数文件的库(10g之前的库),需要停库修改参数文件;对于使用spfile的库,需要进行以下配置:
    SQL> alter system set UTL_FILE_DIR='对应路径'scope=spfile;      
    SQL> shutdonw immediate      
    SQL> startup

  1. 创建数据字典文件
    SQL> execute dbms_logmnr_d.build(dictionary_filename => 'logassay.ora',dictionary_location =>'UTL对应路径');
  2. 对于在线日志,可通过如下方式分析,查找当前在线日志组:
  3. 	
  4. SQL> select * from v$log where status ='CURRENT';
  5. GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1          1         91   52428800          2 NO  CURRENT                 760170 06-JUL-11
  6. 查找在线日志组成员
  7. SQL> select member from v$logfile where group#=1;MEMBER    
    --------------------------------------------    
    +ASMDG1/john/onlinelog/group_1.258.751305035    
    +ASMDG1/john/onlinelog/group_1.259.751305039
  8. 添加日志
  9.  

    SQL> execute dbms_logmnr.add_logfile('+ASMDG1/john/onlinelog/group_1.258.751305035');PL/SQL procedure successfully completed.
  10. 生成分析文件
  11. 	
  12. SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/marshall/logminer/logassay.ora');
  13. PL/SQL procedure successfully completed.
  14. 把v$logmnr_contents查询的数据保存在新的表中
    create table logmnrXXX_XXX as select * from v$logmnr_contents;
  15. 校验数据
    select count(*) from logmnrXXX_XXX;      
    select count(*) from v$logmnr_contents;

    查询表中数据

    select sql_redo from logmnrXXX_XXX where sql_redo like '%update%%';
  16. 停掉之前分析
    execute dbms_logmnr.end_logmnr;
  17. 对于归档文件的分析,首先查看归档路径,然后添加归档,生成分析文件,
  18. SQL> archive log listexecute dbms_logmnr.add_logfile('/ora_backup/arch/1_12413.dbf');    
    execute dbms_logmnr.start_logmnr(dictfilename=>'/ora_backup/logassay.ora');    
    select sql_redo from logmnr12449 where upper(sql_redo) like '%UPDATE%BROAD_SUBSCRB%';    
    create table logmnr12450_12445 as select * from v$logmnr_contents;    
    select count(*) from logmnrXXX_XXX;    
    select count(*) from v$logmnr_contents;    
    execute dbms_logmnr.end_logmnr;

注意:

1.建议分析后,将生成的分析使用creat table … as select * from v$logmnr_contents;导入新的表中,以便日后分析

2.可以根据已知的rowid查询数据

 

 

 

 

参考资料:

Eygle:Oracle 10g LOGMNR挖掘日志很方便

笑笑:Logminer 工具提取操作记录试验步骤

kingmaxno1:ORACLE中logminner使用

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress