现在的位置: 首页 > 综合 > 正文

启用用户进程跟踪

2013年10月02日 ⁄ 综合 ⁄ 共 4738字 ⁄ 字号 评论关闭

--========================

-- 启用用户进程跟踪

--========================

 

一、用户进程跟踪文件

    用户跟踪文件在根据需要跟踪会话实际操作的时候根据要求产生

    通常用于帮助调整应用程序,比如检查由SQL的不良写法所致的相关问题等等

    由用户进程发出,服务器进程产生该类文件

    包含跟踪SQL命令的统计信息、包含用户的错误信息

    缺省情况下当用户出现会话错误时产生

    位置由user_dump_dest设定

    文件大小由max_dump_file_size 决定

    可以设定记录会话的所有信息

    分为基于会话级别和基于实例级别,大多数情况下,session级别进行跟踪

   

    在专用服务器模式中

        仅仅需要标识该会话并为该会话启用跟踪(专用模式为一对一模式,即一个用户进程对应一个服务器进程)

    在共享模式中

        对任何一个会话的跟踪会分布到每个共享服务器进程所生成的跟踪文件内

 

二、不同级别的跟踪 

    instance level

        alter system set sql_trace = true;

       

    session level:

        使用alter session命令启用跟踪

        alter session set sql_trace = true;

        使用dbms包来启用跟踪

        dbms_system.SET_SQL_TRACE_IN_SESSION

           

    上述两类级别跟踪文件位置由user_dump_dest设定,且生成的跟踪文件名为<SID>_ora_<SPID>.trc

    其中SID为实例名称,SPID为系统进程号(Unix)或线程号(Windows)

   

    1.演示基于实例级别的跟踪

        SQL> show parameter user_dump   --查看用户跟踪文件所在的位置

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        user_dump_dest                       string      /u01/app/oracle/admin/orcl/udu

                                                         mp

        SQL> ho rm -f /u01/app/oracle/admin/orcl/udump/*  --清除跟踪文件夹下先前产生的跟踪文件*/

 

        SQL> alter system set sql_trace = true;           --设置sql_trace参数启用实例级别的跟踪

 

        System altered.    

       

        --开启一个会话连接

        SQL> conn scott/tiger@orcl

        Connected.

 

        SQL> select s.username,s.sid,p.spid from v$session s,v$process p

          2  where s.paddr = p.addr and s.username = 'SCOTT'; --获取需要跟踪的特定SPID

 

        USERNAME                              SID SPID

        ------------------------------ ---------- ------------

        SCOTT                                 134 7826

 

        [oracle@robinson ~]$ ls $ORACLE_BASE/admin/orcl/udump

        orcl_ora_4457.trc  orcl_ora_4462.trc  orcl_ora_6283.trc  orcl_ora_7826.trc

        orcl_ora_4459.trc  orcl_ora_5027.trc  orcl_ora_6524.trc  orcl_ora_7833.trc

       

        --使用tail -f 逐步跟踪会话文件

        [oracle@robinson ~]$ tail -f $ORACLE_BASE/admin/orcl/udump/orcl_ora_7826.trc

        =====================

        PARSING IN CURSOR #3 len=40 dep=0 uid=54 oct=3 lid=54 tim=1253678938645444 hv=3933222116 ad='2dbb8df8'

        SELECT DECODE('A','A','1','2') FROM DUAL

        END OF STMT

        PARSE #3:c=1000,e=1076,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1253678938645434

        EXEC #3:c=0,e=41,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1253678938645588

        FETCH #3:c=0,e=20,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,tim=1253678938645673

        STAT #3 id=1 cnt=1 pid=0 pos=1 obj=0 op='FAST DUAL  (cr=0 pr=0 pw=0 time=8 us)'

        XCTEND rlbk=0, rd_only=1

        XCTEND rlbk=0, rd_only=1

        *** 2010-09-06 18:04:56.482

        =====================

        PARSING IN CURSOR #4 len=44 dep=0 uid=54 oct=3 lid=54 tim=1253679195783434 hv=24946478 ad='2d43cb14'

        select * from scott.emp where ename ='SCOTT'

        END OF STMT

        PARSE #4:c=1999,e=2262,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1253679195783423

        EXEC #4:c=0,e=52,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1253679195783643

        FETCH #4:c=0,e=208,p=0,cr=7,cu=0,mis=0,r=1,dep=0,og=1,tim=1253679195783930

        FETCH #4:c=0,e=73,p=0,cr=1,cu=0,mis=0,r=0,dep=0,og=1,tim=1253679195826698

        STAT #4 id=1 cnt=1 pid=0 pos=1 obj=51148 op='TABLE ACCESS FULL EMP (cr=8 pr=0 pw=0 time=194 us)'   

       

        --scott登陆的会话中执行下面的语句,则跟踪文件orcl_ora_7826.trc同步显示所执行的数据操纵语句

        SQL> select * from scott.emp where ename ='SCOTT';

 

             EMPNO ENAME                JOB                       MGR HIREDATE

        ---------- -------------------- ------------------ ---------- -------------

               SAL       COMM     DEPTNO

        ---------- ---------- ----------

              7788 SCOTT                ANALYST                  7566 19-4-87

              3100                    20   

       

        --由上可知,整个语句的执行详细处理步骤,最后提示使用了全表扫描

        关于实例级别的跟踪,专用服务器模式每个服务器进程都会生成自己的跟踪信息流

            共享模式则每个共享服务器都存在一个跟踪文件,且跟踪文件包含的跟踪信息与该共享服务器为其服务的所有会话

            而执行的所有SQL语句相关

       

        --关闭实例级别的跟踪

        SQL> alter system set sql_trace = false;

 

        System altered.

       

    2.演示基于会话级别的跟踪

        一个会话自身能够交互地启用针对该会话的跟踪,其它会话也可以编程启用针对该会话进行跟踪

        --清理上次跟踪的会话文件,且同样可以使用上面的方式来进行跟踪,只不过修改跟踪的参数不同而已

        SQL> ho rm -f /u01/app/oracle/admin/orcl/udump/*       --*/

       

        SQL> conn system/redhat

        Connected.

        SQL> alter session set sql_trace=true;

 

        Session altered.

 

        --执行SQL 语句则开始跟踪,跟踪完毕后执行下面的语句关闭跟踪

        --此处跟踪的方法同实例级别跟踪

 

        SQL> alter session set sql_trace = false;

 

        Session altered.

 

        --开启另一会话使用dbms包进行跟踪

        SQL> conn system/redhat

        Connected.

        SQL> select sid,serial# from v$session where username = 'SYSTEM';

 

               SID    SERIAL#

        ---------- ----------

               133       1141

              

        SQL> exec dbms_monitor.session_trace_enable(session_id=>133,serial_num=>1141);

 

        PL/SQL procedure successfully completed.

 

        SQL> update scott.emp set sal = sal + 500 where ename = 'SCOTT';

抱歉!评论已关闭.