• sql跟踪方法相关介绍



    oracle sql跟踪方法:

    1、sql_trace
    打开跟踪:alter session set sql_trace=true;
    为跟踪文件做标记:alter session set tracefile_identifier='look_for_me';
    停止跟踪:alter session set sql_trace=false;
    最后生成的跟踪文件可以采用tkprof工具生成来查看。

    2、10046跟踪代码
    跟踪界别介绍:
    Level 0   停用SQL跟踪,相当于SQL_TRACE=FALSE
    Level 1   标准SQL跟踪,相当于SQL_TRACE=TRUE
    Level 4   在level 1的基础上增加绑定变量的信息
    Level 8   在level 1的基础上增加等待事件的信息
    Level 12 在level 1的基础上增加绑定变量和等待事件的信息

    打开跟踪:
    GRANT ALTER SESSION TO lttfm; --必须具有alter session权限
    alter session set events '10046 trace name context forever,level 12';--当前用户设置
    或者在init.ora文件中插入下面的行:event = 10046 trace name context forever,level 12;--为全局设置

    关闭跟踪:
    alter session set events '10046 trace name context off';--关闭用户跟踪

    注:sql_trace和10046设置代码跟踪只能针对本会话或者系统级进行会话跟踪,具体设置某个非本会话的跟踪需要采用oradebug或者
    dbms_system.set_ev或者dbms_monitor.session_trace_enable。

    3、使用oradebug
    --用如下语句找出要跟踪的spid
    select * from v$session a where audsid = userenv('sessionid'); --查询当前的sessionid
    select s.USERNAME,
           s.OSUSER,
           s.SID,
           s.PADDR,
           s.PROCESS,
           p.spid     os_process_id,
           p.pid      oracle_process_id
      from v$session s, v$process p
     where s.paddr = p.addr
       and s.username = upper('LTWEBGIS')
       and s.SID = 145;

    --设置跟踪进程id。
    SQL> connect / as sysdba
    SQL> oradebug setospid 5672;该语句为跟踪其他会话(5672为v$process的spid),

    若跟踪本会话,执行 oradebug setmypid。

    SQL> connect / as sysdba
    SQL> oradebug setorapid 15 --输入的15为v$process的pid

    --设置跟踪文件大小无限制
    SQL> oradebug unlimit;
    --设置跟踪,级别8
    SQL> oradebug event 10046 trace name context forever,level 8;
    已处理的语句

    --关闭跟踪
    SQL> oradebug event 10046 trace name context off;


    执行该语句(SQL> oradebug setospid 5672;)时,提示“ORA-01031: 权限不足”,
    原因:oradebug是sysdba的命令(一般用户执行提示权限不足),而且是sqlplus特有的命令,不能在plsql工具中执行(否则提示无效sql)。
    可以用oradebug help命令查看oradebug工具说明。


    4、dbms_system(必须用sys用户执行)
     exec dbms_system.set_ev(si => 159,se => 254,ev => 10046,le =>8 ,nm => '');--会话id等参数必须设置正确,否则trace无法生成
     生成后可用sql语句查看trace文件位置。

    --停止跟踪       
     exec dbms_system.set_ev(si => 159,se => 254,ev => 10046,le =>0 ,nm => '');

    5、dbms_monitor
    exec dbms_monitor.session_trace_enable(session_id => 136,serial_num => 4,waits => true,binds => true);
    exec dbms_monitor.session_trace_disable(session_id => 136,serial_num => 4);
    如果不设置session_id或者设置为null,则跟踪当前会话

    6、dbms_support
    exec dbms_support.start_trace_in_session(sid => 1234,serial# => 56789,waits => true,binds => true);
    exec dbms_support.stop_trace_in_session(sid => 1234,serial# => 56789);
    dbms_support默认情况下,系统不安装这个包。如果需要使用的话,需进行单独设置。在$ORACLE_HOME/rdbms/admin/目录下应该存在
    dbmssupp.sql,prvtsupp.plb这两个文件,执行这两个文件后才可使用,如果别的用户要使用,需要进行相应的授权,并创建同义词。

    注:3,4,5,6这几种跟踪方法都是在sys的用户下才能执行,可对任意会话进行跟踪。

    获取跟踪文件:
    1)oradebug获取跟踪文件
    --使用oradebug获取本会话跟踪文件位置
    SQL> oradebug setmypid
    SQL> oradebug tracefile_name

    --获取任意会话跟踪文件位置
    SQL> oradebug setospid 5392
    已处理的语句
    SQL> oradebug tracefile_name
    d:\oracle\product\10.2.0\admin\fgisdb\udump\fgisdb_ora_5600.trc


    2)sql获取跟踪文件

    --sql查看当前session跟踪文件位置
     SELECT d.value || '\' || lower(rtrim(i.instance_name, chr(0))) || '_ora_' ||
            p.spid || '.trc' trace_file_name
       FROM (SELECT p.spid
               FROM v$mystat m, v$session s, v$process p
              WHERE m.statistic# = 1
                AND s.sid = m.sid
                AND p.addr = s.paddr) p,
            (SELECT instance_name FROM v$instance) i,
            (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d;

    --以下sql为查询输入的spid的会话跟踪文件
     select d.value || '\' || lower(rtrim(i.instance_name, chr(0))) || '_ora_' ||
           &spid || '.trc' trace_file_name
      from (SELECT instance_name FROM v$instance) i,
           (select value from v$parameter where name = 'user_dump_dest') d;

    查看跟踪级别
    1)查看当前session的跟踪级别(必须在sys用户下执行)
    declare
      event_level number;
    begin
      dbms_system.read_ev(10046,event_level);
      dbms_output.put_line(to_char(event_level));
    end;

    2)执行如下语句查看跟踪事件的跟踪级别

    SQL> oradebug setospid spid --先指定要查看跟踪级别的spid
    SQL> oradebug eventdump session
    10046 trace name CONTEXT level 8, forever

    注:如果开启了跟踪会话,但之后数据库关闭,那么跟踪自动关闭。

  • 相关阅读:
    LeetCode题解之Flipping an Image
    LeetCode 之Find Minimum in Rotated Sorted Array
    LeetCode题解Transpose Matrix
    LeetCode 题解之Minimum Index Sum of Two Lists
    LeetCode题解之Intersection of Two Linked Lists
    LeetCode 题解之Add Two Numbers II
    LeetCode题解之Add two numbers
    href="#"与href="javascript:void(0)"的区别
    有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
    ie7下属性书写不规范造成的easyui 弹窗布局紊乱
  • 原文地址:https://www.cnblogs.com/lanzi/p/2616606.html
Copyright © 2020-2023  润新知