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

Oracle sql trace用法的更多相关文章

  1. Oracle sql trace

    一.SQL_TRACE说明 1.1.在全局启用 在参数文件(pfile/spfile)中指定:sql_trace =true 1.2.在当前session级设置 启用当前session的跟踪: alt ...

  2. Oracle SQL Trace 和 10046 事件

    http://blog.csdn.net/tianlesoftware/article/details/5857023 一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRAC ...

  3. Oracle 课程八之性能优化之Oracle SQL Trace

    一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪,我们可以了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL ...

  4. Oracle 11g R2性能优化 SQL TRACE

    作为Oracle官方自带的一种基本性能诊断工具,SQL Trace可以用来评估当前正在运行的SQL语句的效率,同时为该语句生成统计信息等,并保存这些信息到指定路径下的跟踪文件(trace)当中.SQL ...

  5. Oracle核心技术之 SQL TRACE

    1.SQL TRACE说明: 参数类型 布尔型 缺省值 false 参数类别 动态 取值范围 True|false 2.类型 1)sql trace参数:alter system改变对全局进程影响,如 ...

  6. Oracle SQL优化[转]

    Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...

  7. Oracle SQL优化规则详解

    1. 选用适合的Oracle优化器 Oracle的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.o ...

  8. ORACLE 中ROWNUM用法总结(转)

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  9. Oracle SQL explain/execution Plan

    From http://blog.csdn.net/wujiandao/article/details/6621073 1. Four ways to get execution plan(anyti ...

随机推荐

  1. selenium+Python(Js处理浏览器滚动条)

    控制浏览器滚动条 有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助 js 是来进行操作.一般用到操作滚动条的会两个场景: 注册时的法律条文需要阅读,判断用户是否阅读 ...

  2. java.security.MessageDigest的使用之生成安全令牌!

    时候,我们需要产生一个数据,这个数据保存了用户的信息,但加密后仍然有可能被人使用,即便他人不确切的了解详细信息... 好比,我们在上网的时候,很多网页都会有一个信息,是否保存登录信息,以便下次可以直接 ...

  3. 在C代码中将结构体变量作为参数传递效率忒低

    在C语言编程中,我们几乎不可能看见有人将一个结构体变量作为参数进行传递,因为效率太低了.本文尝试从反汇编的角度给出其中的缘由. 对于C语言来说,所有的参数传递都是值传递.如果一个变量为指针,那么传递的 ...

  4. 【c++】动态绑定

    C++的函数调用默认不使用动态绑定.要触发动态绑定,必须满足两个条件: 只有指定为虚函数的成员函数才能进行动态绑定 必须通过基类类型的引用或指针进行函数调用 因为每个派生类对象中都拥有基类部分,所以可 ...

  5. yum无法正常安装,提示如下 There are no enabled repos Run "yum repolist all"

    一般来说著名的linux系统基本上分两大类:1 RedHat系列:Redhat.Centos.Fedora等2 Debian系列:Debian.Ubuntu等RedHat 系列:1 常见的安装包格式 ...

  6. java--线程状态【转】

    1.新建状态 Thread t1 = new Thread(); 创建之后,就已经有了相应的内存和其他资源,但是还是处于不可运行状态. 2.就绪状态 当一个线程使用.start()启动之后就处于就绪状 ...

  7. javascript 中合并排序算法 详解

    javascript 中合并排序算法 详解 我会通过程序的执行过程来给大家合并排序是如何排序的...  合并排序代码如下: <script type="text/javascript& ...

  8. 【关于使用SpringJUnit4ClassRunner单元测试报错问题】

    今天单元测试如下的代码的时候发现项目老是报错: package com.yhb.jsxn.service; import java.text.SimpleDateFormat; import java ...

  9. 六 Selector

    选择器是java NIO中能够检测一到多个NIO通道(Channel),并能知晓是否为诸如读写时间做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接 为什么用Sele ...

  10. asp.net 、C#实现微信企业号OAuth2认证

    以微信企业号作为入口的应用,几乎都会遇到需要应用系统中个人信息和微信用户关联问题.从而进行其他业务处理.目前所做项目采取在企业号通讯录添加自定义字段存入应用系统用户信息表中唯一标识UserGuid进行 ...