zoukankan      html  css  js  c++  java
  • oracle工具:logminer的简单使用

    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 产生数据库操作  www.2cto.com 
    [sql]
    hr@ORCL> drop table t purge; 
     
    Table dropped. 
     
    hr@ORCL> create table logmnr_test (id number,name varchar2(20)); 
     
    Table created. 
     
    hr@ORCL> insert into logmnr_test values(1,'think'); 
     
    1 row created. 
     
    hr@ORCL> insert into logmnr_test values(2,'water'); 
     
    1 row created. 
     
    hr@ORCL> commit;                     
     
    Commit complete. 
     
    hr@ORCL> select sequence#,status from v$log; 
        www.2cto.com 
    SEQUENCE# STATUS 
    ---------- ---------------- 
            14 CURRENT 
            13 INACTIVE 
            12 INACTIVE 
    hr@ORCL> update logmnr_test set name='think_pad' where id=2; 
     
    1 row updated. 
     
    hr@ORCL> commit; 
     
    Commit complete. 
     
    hr@ORCL> alter system switch logfile; 
     
    System altered. 
     
    hr@ORCL> select sequence#,name from v$archived_log; 
     
    SEQUENCE# 
    ---------- 
    NAME 
    ------------------------------------------------------------------------------------ ----------------
    ............................. 
            14 
    /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2012_09_09/o1_mf_1_14_84qrj5co_.arc
      www.2cto.com 
        2 为分析指定日志文件
    [sql]
    sys@ORCL> select db_name,thread_sqn,filename 
      2         from v$logmnr_logs; 
     
    no rows selected 
     
    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);
     
    PL/SQL procedure successfully completed. 
     
    若想接着分析更多的日志,把dbms_logmnr.NEW改成dbms_logmnr.addfile即可。 
     
    sys@ORCL> select db_name,thread_sqn,filename from v$logmnr_logs; 
     
    DB_NAME  THREAD_SQN 
    -------- ---------- 
    FILENAME 
    -------------------------------------------------------------------------------------
    ORCL             14 
    /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2012_09_09/o1_mf_1_14_84qrj5co_.arc    www.2cto.com 
     
        3 启动logminer
    [sql]
    sys@ORCL> exec DBMS_LOGMNR.START_LOGMNR(OPTIONS => SYS.DBMS_LOGMNR.DICT_FROM_ONLINE_ CATALOG); 
     
    PL/SQL procedure successfully completed. 
     
    若是大数据量的分析,可以指定SCN或者时间的范围。 
     
        4 分析日志的内容
             1)检查数据更改的细节
                数据库里面的数据可能意想不到的原因或者错误而发生改变,在重做日志文件中可 以找到这些更改的细节,比如:谁做了这些改变?什么时候改的?怎么改的?
    [sql]
    select operation,timestamp,scn from v$logmnr_contents 
    where seg_name='LOGMNR_TEST' and 
           seg_owner='HR' and 
           seg_type_name='TABLE'; 
     
    OPERATION                        TIMESTAMP                  SCN 
    -------------------------------- ------------------- ---------- 
    DDL                              2012/09/09 08:20:47     721905 
     
    select sql_redo,sql_undo from v$logmnr_contents 
    where seg_name='LOGMNR_TEST' and 
           seg_owner='HR' and 
           seg_type_name='TABLE'; 
            
    SQL_REDO    www.2cto.com 
    ----------------------------------------------------------------------------------------
    SQL_UNDO 
    ----------------------------------------------------------------------------------------
    create table logmnr_test (id number,name varchar2(20)); 
     
    select username,session_info from v$logmnr_contents 
    where seg_name='LOGMNR_TEST' and 
           seg_owner='HR' and 
           seg_type_name='TABLE' 
     
            2)执行容量分析
               如分析表产生DML的频数和频率
    [sql]
    select operation,timestamp,count(*) total from v$logmnr_contents 
    where seg_name='LOGMNR_TEST' and 
           seg_owner='HR' and 
           seg_type_name='TABLE' 
    group by operation,timestamp; 
     
    OPERATION                        TIMESTAMP                TOTAL 
    -------------------------------- ------------------- ---------- 
    DDL                              2012/09/09 08:20:47          1 
     
           3)寻找DDL命令的细节
              例如,使用logminer,可以找出删除表的具体时间和scn,便于media recovery。
    [sql]
    select seg_name,operation,scn,timestamp,count(*) 
      from v$logmnr_contents    www.2cto.com 
    where operation='DELETE' 
    group by seg_name,operation,scn,timestamp 
    order by scn; 
     
        5 关闭logminer
           如果需要进一步的分析,可将v$logmnr_contents内容保存下来
           create table logmnr_contents as select * from v$logmnr_contents;
           然后,执行关闭:
           exec dbms_logmnr.end_logmnr;
      
        附图:

  • 相关阅读:
    BZOJ 1996: [Hnoi2010]chorus 合唱队
    BZOJ 2431: [HAOI2009]逆序对数列
    BZOJ1013: [JSOI2008]球形空间产生器sphere
    BZOJ 4196: [Noi2015]软件包管理器
    BZOJ 3670: [Noi2014]动物园
    NOIP 2017 提高组 day1t2 时间复杂度
    loj #6278. 数列分块入门 2
    CF285 E Positions in Permutations——“恰好->大于”的容斥和允许“随意放”的dp
    洛谷 1969 积木大赛——水题
    洛谷 1965 转圈游戏——水题
  • 原文地址:https://www.cnblogs.com/weixun/p/3172587.html
Copyright © 2011-2022 走看看