oracle工具:logminer的简单使用

我的环境:
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-308.el5xen #1 SMP Fri Jan 27 17:59:00 EST 2012 i686 i686 i386 GNU/Linux

sys@ORCL> select * from v$version where rownum=1;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

 

    10g其实不需要生成dictionary文件了。只要直接把日志文件加载,然后分析即可。

    1 产生数据库操作

[sql]  view plain copy
  1. hr@ORCL> drop table t purge;  
  2.   
  3. Table dropped.  
  4.   
  5. hr@ORCL> create table logmnr_test (id number,name varchar2(20));  
  6.   
  7. Table created.  
  8.   
  9. hr@ORCL> insert into logmnr_test values(1,'think');  
  10.   
  11. 1 row created.  
  12.   
  13. hr@ORCL> insert into logmnr_test values(2,'water');  
  14.   
  15. 1 row created.  
  16.   
  17. hr@ORCL> commit;                      
  18.   
  19. Commit complete.  
  20.   
  21. hr@ORCL> select sequence#,status from v$log;  
  22.   
  23.  SEQUENCE# STATUS  
  24. ---------- ----------------  
  25.         14 CURRENT  
  26.         13 INACTIVE  
  27.         12 INACTIVE  
  28. hr@ORCL> update logmnr_test set name='think_pad' where id=2;  
  29.   
  30. 1 row updated.  
  31.   
  32. hr@ORCL> commit;  
  33.   
  34. Commit complete.  
  35.   
  36. hr@ORCL> alter system switch logfile;  
  37.   
  38. System altered.  
  39.   
  40. hr@ORCL> select sequence#,name from v$archived_log;  
  41.   
  42.  SEQUENCE#  
  43. ----------  
  44. NAME  
  45. ----------------------------------------------------------------------------------------------------  
  46. .............................  
  47.         14  
  48. /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2012_09_09/o1_mf_1_14_84qrj5co_.arc  


    2 为分析指定日志文件

[sql]  view plain copy
  1. sys@ORCL> select db_name,thread_sqn,filename  
  2.   2         from v$logmnr_logs;  
  3.   
  4. no rows selected  
  5.   
  6. sys@ORCL> exec DBMS_LOGMNR.ADD_LOGFILE('/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2012_09_09/o1_mf_1_14_84qrj5co_.arc',dbms_logmnr.NEW);  
  7.   
  8. PL/SQL procedure successfully completed.  
  9.   
  10. 若想接着分析更多的日志,把dbms_logmnr.NEW改成dbms_logmnr.addfile即可。  
  11.   
  12. sys@ORCL> select db_name,thread_sqn,filename from v$logmnr_logs;  
  13.   
  14. DB_NAME  THREAD_SQN  
  15. -------- ----------  
  16. FILENAME  
  17. ----------------------------------------------------------------------------------------------------  
  18. ORCL             14  
  19. /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2012_09_09/o1_mf_1_14_84qrj5co_.arc  


    3 启动logminer

[sql]  view plain copy
  1. sys@ORCL> exec DBMS_LOGMNR.START_LOGMNR(OPTIONS => SYS.DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);  
  2.   
  3. PL/SQL procedure successfully completed.  
  4.   
  5. 若是大数据量的分析,可以指定SCN或者时间的范围。  


    4 分析日志的内容
         1)检查数据更改的细节
            数据库里面的数据可能意想不到的原因或者错误而发生改变,在重做日志文件中可以找到这些更改的细节,比如:谁做了这些改变?什么时候改的?怎么改的?

[sql]  view plain copy
  1. select operation,timestamp,scn from v$logmnr_contents  
  2.  where seg_name='LOGMNR_TEST' and  
  3.        seg_owner='HR' and  
  4.        seg_type_name='TABLE';  
  5.   
  6. OPERATION                        TIMESTAMP                  SCN  
  7. -------------------------------- ------------------- ----------  
  8. DDL                              2012/09/09 08:20:47     721905  
  9.   
  10. select sql_redo,sql_undo from v$logmnr_contents  
  11.  where seg_name='LOGMNR_TEST' and  
  12.        seg_owner='HR' and  
  13.        seg_type_name='TABLE';  
  14.          
  15. SQL_REDO  
  16. ----------------------------------------------------------------------------------------------------  
  17. SQL_UNDO  
  18. ----------------------------------------------------------------------------------------------------  
  19. create table logmnr_test (id number,name varchar2(20));  
  20.   
  21. select username,session_info from v$logmnr_contents  
  22.  where seg_name='LOGMNR_TEST' and  
  23.        seg_owner='HR' and  
  24.        seg_type_name='TABLE'  


        2)执行容量分析
           如分析表产生DML的频数和频率

[sql]  view plain copy
  1. select operation,timestamp,count(*) total from v$logmnr_contents  
  2.  where seg_name='LOGMNR_TEST' and  
  3.        seg_owner='HR' and  
  4.        seg_type_name='TABLE'  
  5. group by operation,timestamp;  
  6.   
  7. OPERATION                        TIMESTAMP                TOTAL  
  8. -------------------------------- ------------------- ----------  
  9. DDL                              2012/09/09 08:20:47          1  


       3)寻找DDL命令的细节
          例如,使用logminer,可以找出删除表的具体时间和scn,便于media recovery。

[sql]  view plain copy
  1. select seg_name,operation,scn,timestamp,count(*)  
  2.   from v$logmnr_contents  
  3.  where operation='DELETE'  
  4.  group by seg_name,operation,scn,timestamp  
  5.  order by scn;  


    5 关闭logminer
       如果需要进一步的分析,可将v$logmnr_contents内容保存下来
       create table logmnr_contents as select * from v$logmnr_contents;
       然后,执行关闭:
       exec dbms_logmnr.end_logmnr;

   

    附图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值