Oracle sql trace用法

sql_trace是oracle提供的一个不胜好之跟踪工具,主要用于检查数据库底异常情况,通过跟数据库的移动,找到有问题之言语。

一、概述:
    SQL_TRACE是Oracle的一个不行有力的工具。打开SQL_TRACE就足以逐渐捕获任何一个会话的数据库活动,或者捕获整个数据库的活动,并以数据库活动记录成跟文件。每次用了之后需要关闭跟踪,否则会降低系统的性。
    SQL_TRACE可以帮助诊断许多题目,其中囊括:

二、用法:
   1、文件跟踪的归类:
      跟踪DBA可以行使简单栽办法进行跟踪:
    . 跟踪整个数据库实例。只待简单的修改参数文件(pfile/spfile)参数
SQL_TRACE = TRUE
,然后再开动数据库即可。在大局启用SQL_TRACE会导致有进程的移动给盯梢,包括后台进程同持有用户进程,这样吗会见数据库导致性降低比较显然。
    .
会话级跟踪。SQL_TRACE的平常以方式是一味跟踪一个对话。被盯梢的对话可以是若自己之,也得是另外用户的对话。如果是友善之对话,只需要以SQL*PLUS中运行一下指令即可:
      SQL> alter session set sql_trace = true;
      类似的如撤销对会话的跟,运行一下限令:
      SQL> alter session set sql_trace = false;
     
      如果用跟一个特定的对话,首先得取得会话的SID和Serial#,这些消息可以以视图V$SESSION中收获,一旦掌握了这半只参数,就足以运行一下指令:
      SQL> execute
SYS.dbms_system.set_sql_trace_in_session(13,9,true);
      同样为可以使用这进程关闭会讲话跟踪:
    SQL> execute
SYS.dbms_system.set_sql_trace_in_session(13,9,false);
 
  2、跟踪文件之位置:
     一旦为会讲话激活了SQL_TRACE,ORACLE就会见以udump管理区创建跟踪文件,文件之对象位置由参数user_dump_dest来规定。每个
操作都非会见挂原来的文本,新的跟记录将见面被长至文件末尾。通常状态下,可以根据文件之改动时判定目录下哪个文件是时的文书。
   SQL> show parameter user_dump_dest;
  
   NAME                                 TYPE        VALUE

   ———————————— ———–

   user_dump_dest                       string      d:oracleadminora9iudump
  
   也堪经过以下SQL来规定文件称:
    
     select d.value||”||lower(rtrim(i.instance,
chr(0)))||’_ora_’||p.spid||’.trc’ trace_file_name 
   from 
   (
    select p.spid     
      from sys.v$mystat m,sys.v$session s,sys.v$process p
     where m.statistic# = 1
       and s.sid = m.sid
       and p.addr = s.paddr
   ) p,
   (
   select t.instance
     from sys.v$thread  t,sys.v$parameter  v 
    where v.name = ‘thread’
      and ( v.value = 0 or t.thread# = to_number(v.value) )
   ) i, 
   (
   select value from sys.v$parameter where name = ‘user_dump_dest’
   ) d ;

   TRACE_FILE_NAME
   ——————————————————————————–
  
   d:oracleadminora9iudumpora9i_ora_2060.trc  
 
 3、计时信息:
    为了最可怜限度的施用跟踪文件,应该打开计时表明,通过参数TIMED_STATISTICTS=TRUE进行安装,这样可针对每个SQL语句的履行时间等于展开记录,这个功效对系统特性的负非常有些。
    打开对话的计时信息:
    SQL> alter session set timed_statistics = true ;
    打开数据库系统的计时信息
    SQL> alter system set timed_statistics = true ;
 
 4、TKPROF:
    通过前三步的安已了解哪生成SQL跟踪文件了,ORACLE生成的跟文件阅读起来非常拮据(也不怕是易读性很不同),可以关押跟踪文件的均等有,执行以下SQL语句:
   SQL> select count(*) from sys_dept;
  
    COUNT(*)
   ———-
          16   
   执行了晚,查看跟踪文件被斯讲话的始末如下:
   
    PARSING IN CURSOR #1 len=31 dep=0 uid=62 oct=3 lid=62
tim=14727407741 hv=2200985491 ad=’128e3820′
   select count(*) from sys_dept
   END OF STMT
   PARSE
#1:c=0,e=16348,p=1,cr=31,cu=0,mis=1,r=0,dep=0,og=4,tim=14727407735
   EXEC
#1:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727407814
   FETCH
#1:c=0,e=15641,p=5,cr=7,cu=0,mis=0,r=1,dep=0,og=4,tim=14727423807
   =====================
   PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62
tim=14727508742 hv=3517412409 ad=’12bbcff4′
   begin :id := sys.dbms_transaction.local_transaction_id; end;
   END OF STMT
   PARSE
#2:c=0,e=122,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727508735
   EXEC
#2:c=0,e=144,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727508945
   =====================
   PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62
tim=14727587562 hv=3517412409 ad=’12bbcff4′
   begin :id := sys.dbms_transaction.local_transaction_id; end;
   END OF STMT
   PARSE
#2:c=0,e=121,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727587556
   EXEC
#2:c=0,e=97,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727587721
  
   这样不但涉猎麻烦,并且为生成千上万情难以知晓。ORACLE提供了一个格式化跟踪文件之家伙

  • TKPROF( Transient Kernel Profiler
    ),通过之家伙能以SQL文件转发为剖人员易懂的格式。
       
        一般TKPROF工具的施用的简方法,只所以到了少单重要字:跟踪文件称与出口文件名
    (TKPROF的有血有肉要参考其他材料):
        TKPROF <trace file> <output file>
       
        在命令行模式下运作(数据库在window2000下安装之)
        C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc
    d:report.txt
       
        执行完毕后,在reprot.txt中询问才之言辞内容如下:
        select count(*)
       from
       sys_dept
     
     
       call     count       cpu    elapsed       disk      query    current        rows
       ——- ——  ——– ———- ———- ———-
    ———-  ———-
       Parse        1      0.00       0.01          1         31          0           0
       Execute      1      0.00       0.00          0          0          0           0
       Fetch        1      0.00       0.01          5          7          0           1
       ——- ——  ——– ———- ———- ———-
    ———-  ———-
       total        3      0.00       0.03          6         38          0           1
      
       Misses in library cache during parse: 1
       Optimizer goal: CHOOSE
       Parsing user id: 62     
     
       通过设置tkprof的关键字[EXPLAIN =
    <username/password>],也得以于跟踪文件被加进SQL语句之实施计划:
      C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc d:report.txt
    explain=test/test;  
      
      ********************************************************************************
     
      select count(*)
      from
       sys_dept
     
     
      call     count       cpu    elapsed       disk      query    current        rows
      ——- ——  ——– ———- ———- ———-
    ———-  ———-
      Parse        2      0.00       0.01          1         31          0           0
      Execute      2      0.00       0.00          0          0          0           0
      Fetch        2      0.00       0.01          5         14          0           2
      ——- ——  ——– ———- ———- ———-
    ———-  ———-
      total        6      0.00       0.03          6         45          0           2
     
      Misses in library cache during parse: 1
      Optimizer goal: CHOOSE
      Parsing user id: 62 
     
      Rows     Row Source Operation
      ——-  —————————————————
            1  SORT AGGREGATE
           16   TABLE ACCESS FULL SYS_DEPT

相关文章