• Oracle执行语句跟踪(2)——使用10046事件实现语句追踪


    接上篇博文Oracle执行语句跟踪(1)——使用sql trace实现语句追踪,一旦我们通过会话追踪获取到超时事物的执行语句,就可以使用10046事件对语句进行追踪。

    启用10046事件追踪的方式

    
    SQL> alter session set events '10046 trace name context forever ,level 12' ;
    SQL> alter session set events '10046 trace name context off' ;
    

    从上面语句可以看出追踪的是当前正在使用的会话,在两个语句之间可以放入我们需要分析的语句。

    获取trace文件

    在当前sqlplus会话下,可以通过以下语句获得trace文件的数字编号。其中SPID即为trace文件的数字编号,一般的组成方式为实例名_ora_SPID.ora

    
    select b.sid,b.SADDR,c.ADDR,c.PID,c.SPID from v$session b,v$process c
     where b.SID=(select distinct sid from v$mystat)
     and b.PADDR=c.ADDR;
    

    trace文件的解析一样可以使用tkprof。

    
    tkprof INST_ora_3370.trc INST_ora_3370.trc explain=test/test
    

    用于监控的脚本

    为了同时更好的分析查实事件,我写了一个脚本用于同时获取外部时间计时同时生成trace文件。


    prompt written by camash
    prompt Importing table ...
    set trimspool on;
    set linesize 120;
    set pagesize 2000;
    set newpage 1;
    set heading off;
    set term off;
    spool test_formal_4.txt;
    set feedback off
    set define off
    var t1 varchar2(20)
    var t2 varchar2(20)
    set timing on
    alter session set events '10046 trace name context forever ,level 12' ;
    exec :t1:=to_char(SYSTIMESTAMP,'hh24:mi:ss.ff3');

    your sql script

    alter session set events '10046 trace name context off' ;
    prompt Done.
    exec :t2:=to_char(SYSTIMESTAMP,'hh24:mi:ss.ff3')
    set serverout on
    exec dbms_output.put_line('start time: '|| :t1);
    exec dbms_output.put_line('end time: '|| :t2);
    spool off;

    这样每条SQL语句的实际时间就会存放在执行目录的“test_formal_4.txt”文件中,而trace文件将在trace文件目录中生成。

    版权说明:camash原创,转载请注明出处 http://www.cnblogs.com/shenfeng/

    --EOF--

  • 相关阅读:
    Yii2 分页
    Yii2 或者当前登录用户帐号
    css3媒体查询判断移动设备横竖屏
    Javascript操作Tr隐藏显示变形~
    php注释标准
    匹配一段html中所有的src
    数据库遇到错误(随时补充)
    NetCore-缓存文件上传和文件流上传
    SVN跨服务器版本迁移
    发票同步微信卡包
  • 原文地址:https://www.cnblogs.com/shenfeng/p/oracle_10046.html
Copyright © 2020-2023  润新知