启用用户进程跟踪

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

-- 启用用户进程跟踪

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

 

一、用户进程跟踪文件

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

    通常用于帮助调整应用程序,比如检查由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';

 

        1 row updated.

 

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

 

        PL/SQL procedure successfully completed.

 

 

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

          2   where s.paddr = p.addr and s.sid = 133;        

 

        USERNAME                              SID SPID

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

        SYSTEM                                133 10170

 

        SQL> ho cat $ORACLE_BASE/admin/orcl/udump/orcl_ora_10170.trc

        /u01/app/oracle/admin/orcl/udump/orcl_ora_10170.trc

        Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

        With the Partitioning, OLAP and Data Mining options

        ORACLE_HOME = /u01/app/oracle/10g

        System name:    Linux

        Node name:      robinson

        Release:        2.6.18-164.el5

        Version:        #1 SMP Tue Aug 18 15:51:54 EDT 2009

        Machine:        i686

        Instance name: orcl

        Redo thread mounted by this instance: 1

        Oracle process number: 18

        Unix process pid: 10170, image: oracle@robinson (TNS V1-V3)

 

        *** 2010-09-06 19:49:33.906

        *** ACTION NAME:() 2010-09-06 19:49:33.903

        *** MODULE NAME:(SQL*Plus) 2010-09-06 19:49:33.903

        *** SERVICE NAME:(SYS$USERS) 2010-09-06 19:49:33.903

        *** SESSION ID:(133.1141) 2010-09-06 19:49:33.903

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

        PARSING IN CURSOR #2 len=81 dep=0 uid=5 oct=47 lid=5 tim=1253685326077891 hv=1816613408 ad='2dbf7d40'

        BEGIN dbms_monitor.session_trace_enable(session_id=>133,serial_num=>1141); END;

        END OF STMT

        EXEC #2:c=0,e=466,p=0,cr=0,cu=0,mis=1,r=1,dep=0,og=1,tim=1253685326077881

        WAIT #2: nam='SQL*Net message to client' ela= 4 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685326080388

        WAIT #2: nam='SQL*Net message from client' ela= 1823 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685326082309

        WAIT #0: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685326082495

        *** 2010-09-06 19:50:20.709

        WAIT #0: nam='SQL*Net message from client' ela= 45704475 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685371787005

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

        PARSING IN CURSOR #1 len=58 dep=0 uid=5 oct=6 lid=5 tim=1253685371793390 hv=3123987885 ad='2dbf7aa4'

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

        END OF STMT

        PARSE #1:c=4000,e=6173,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1253685371793377

        EXEC #1:c=999,e=1381,p=0,cr=7,cu=3,mis=0,r=1,dep=0,og=1,tim=1253685371794945

        WAIT #1: nam='SQL*Net message to client' ela= 3 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685371795058

        WAIT #1: nam='SQL*Net message from client' ela= 4984 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685371800090

        STAT #1 id=1 cnt=0 pid=0 pos=1 obj=0 op='UPDATE  EMP (cr=7 pr=0 pw=0 time=993 us)'

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

        WAIT #0: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685371800388

        *** 2010-09-06 19:50:53.414

        WAIT #0: nam='SQL*Net message from client' ela= 31924456 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1253685403724882

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

        PARSING IN CURSOR #2 len=82 dep=0 uid=5 oct=47 lid=5 tim=1253685403729071 hv=3536340123 ad='2dbf7744'

        BEGIN dbms_monitor.session_trace_disable(session_id=>133,serial_num=>1141); END;

        END OF STMT

        PARSE #2:c=1000,e=4016,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1253685403729061

        EXEC #2:c=0,e=150,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,tim=1253685   

 

三、启用会话跟踪查看show parameter sga 的源码

        SQL> conn system/redhat  --使用system帐户连接

        Connected.

        SQL> alter session set sql_trace = true;  --启用会话跟踪

 

        Session altered.

 

        SQL> show parameter sga                   --查看sga

 

        NAME                                 TYPE        VALUE

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

        lock_sga                             boolean     FALSE

        pre_page_sga                         boolean     FALSE

        sga_max_size                         big integer 448M

        sga_target                           big integer 448M

 

        SQL> alter session set sql_trace = false;  --关闭会话跟踪

 

        Session altered.

 

        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

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

        SYSTEM                                159 3365

       

        SQL>ho cat $ORACLE_BASE/admin/orcl/udump/orcl_ora_3365.trc --查看跟踪文件

   

        --以下内容为执行show parameter sga的实际操作语句,实质上是查询v$parameter视图

            SELECT NAME NAME_COL_PLUS_SHOW_PARAM,

                DECODE(TYPE,1,'boolean',2,'string',3,'integer',4,'file',5,'number', 6,'big integer', 'unknown') TYPE,

                DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM

            FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%sga%')

            ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM

 

四、启用实例级别会话跟踪产生的问题         

    使用下面的语句启用实例级别会话跟踪后

        alter system set sql_trace = true;

    再将其关闭后,重新启动实例出现下列提示

   

        SQL> startup    --启动实例

        ORA-32004: obsolete and/or deprecated parameter(s) specified

        ORACLE instance started.

 

        Total System Global Area  469762048 bytes

        Fixed Size                  1220048 bytes

        Variable Size             180355632 bytes

        Database Buffers          285212672 bytes

        Redo Buffers                2973696 bytes

        Database mounted.

        Database opened.

 

        [oracle@robinson ~]$ oerr ora 32004  --查看具体的错误信息描述有参数设置不妥

        32004, 00000, "obsolete and/or deprecated parameter(s) specified"

        // *Cause:  One or more obsolete and/or parameters were specified in

        //          the SPFILE or the PFILE on the server side.

        // *Action: See alert log for a list of parameters that are obsolete.

        //          or deprecated. Remove them from the SPFILE or the server

        //          side PFILE.

       

        --查看告警日志

        SQL> ho cat $ORACLE_BASE/admin/orcl/bdump/alert_orcl.log

           

            Deprecated system parameters with specified values:

                      sql_trace     --描述为sql_trace            

                    End of deprecated system parameter listing 

                   

        SQL> show parameter sql_trace;  --查看该参数已经置为false

 

        NAME                                 TYPE        VALUE

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

        sql_trace                            boolean     FALSE     

 

        --使用reset将其从参数文件中清除后启动正常

        SQL> alter system reset sql_trace scope = spfile sid = '*';

 

        System altered.

 

        SQL> startup force;

        ORACLE instance started.

 

        Total System Global Area  469762048 bytes

        Fixed Size                  1220048 bytes

        Variable Size             184549936 bytes

        Database Buffers          281018368 bytes

        Redo Buffers                2973696 bytes

        Database mounted.

        Database opened.

       

五、更多       

   

Oracle 冷备份

 

SPFILE错误导致数据库无法启动

 

Oracle 用户、对象权限、系统权限

 

Oracle 角色、配置文件

 

  Oracle 联机重做日志文件(ONLINE LOG FILE)

 

  Oracle 控制文件(CONTROLFILE)

 

  Oracle 表空间与数据文件

 

Oracle 归档日志

 

时间: 2024-08-02 05:42:04

启用用户进程跟踪的相关文章

《操作系统真象还原》——0.26 库函数是用户进程与内核的桥梁

0.26 库函数是用户进程与内核的桥梁 在讨论此问题之前,我们应该明白此问题的始作俑者是操作系统本身.我们用了操作系统,就理应遵守它的规范.任何操作系统都有自己的一套做事规则,在其上的所有应用程序,都按照它定下的规矩做事. 我们讨论的环境是Linux,所以,以下所有的内容都是在Linux系统的规则之中讨论,我们所讨论的内容便是搞清楚这些规则. 在Linux下C编程时,我们写的程序通常是用户级程序.为了输出文本,我们一般会在文件开始include ,这样程序就可以使用printf这样的函数完成打印

Linux内存点滴:用户进程内存空间

转载:http://blog.jobbole.com/45733/ 经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的.VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swapped size (kb)CODE, Code size (kb)DATA, Data+Stack size (kb)nFLT

整理3款网页用户行为跟踪分析工具

初看下这些工具与网页流量统计很像,实际上作为网页用户行为跟踪分析工具来看,功能上不仅仅是简单的统计流量,而是涉及到用户访问网页的方方面面,比如用户的鼠标移动,键盘输入,点击行为等等.几乎可以将用户在网页中的所有行为都进行记录统计,无论对于网站运营还是网页设计者都是十分有用的一手资料 Userfly Userfly可以提供免费的网页访客动作记录服务.只需要在网页中添加一段简单的Javascript代码,就可以记录访客从打开该网页到关闭整 个过程中的动作. Userfly能够记录的内容包括鼠标的移动

Linux 用户进程内存空间详解

常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的. VIRT, Virtual Image (kb) RES, Resident size (kb) SHR, Shared Mem size (kb) %MEM, Memory usage(kb) SWAP, Swapped size (kb) CODE, Code size (kb) DATA, Data+Stack size (kb) nFLT, Page Fault count nDRT, Dir

终止SQL Server中的用户进程方法

一.情景:在很多情况下,往往会要求数据库管理员终止SQL Server中的用户进程.本文将为大家介绍如何创建一个简单的存储过程来实现同时终止多个会话.结束连续的会话和结束连接到数据库的所有会话等功能. 在很多情况下,往往会要求数据库管理员终止SQL Server中的用户进程,例如在停止某个数据库的运作时,或者还原数据库之前,或者长时间运行活动事务等情况下.数据库管理员通常会使用SQL Server中提供的"KILL"命令来完成任务. 但是,SQL Server提供的"KILL

vc++-Windows服务如何为用户进程提权

问题描述 Windows服务如何为用户进程提权 有两个exe程序,其中一个是window是服务(称为a.exe),运行在system用户下,另一个是普通进程(称为b.exe),运行在ad域账户(该账户没有admin权限)下,但是该进程是需要管理员权限运行的. 如何让a.exe启动b.exe,使b.exe运行在没有admin权限的ad域用户下,但是该程序又具有管理员权限? 本人暂时想到一个方法:写一个不需要admin权限的c.exe,a.exe启动c.exe(使用CreateProcessAsUs

启用关机事件跟踪

在不少工作站和服务器系统中,Shutdown Event Tracker都是个非常实用的功能.此功能可以为用户提供系统关闭的原因,以此来分析系统遇到和存在的问题.而事实上,在Windows7中,也存在此功能,只是被隐藏了. 1. 组策略法 * WIN+R运行gpedit.msc * 依次打开 Computer Configuration (计算机配置)> Administrative Templates (管理模板)> System(系统) >RHS > Display Shutd

Linux系统下用户进程死循环问题解决方法

在进行Linux系统操作的时候,有时候会遇到一次用户态进程死循环,即系统反应迟钝.进程挂死等问题,那么遇到这些问题又该如何解决呢?下面小编就给大家介绍下一次用户态进程死循环的问题该如何处理. 1.问题现象 业务进程(用户态多线程程序)挂死,操作系统反应迟钝,系统日志没有任何异常.从进程的内核态堆栈看,看似所有线程都卡在了内核态的如下堆栈流程中: [root@vmc116 ~]# cat /proc/27007/task/11825/stack [<ffffffff8100baf6>] reti

启用 Oracle 10046 调试事件

    Oracle 10046是一个Oracle内部事件.最常用的是在Session级别设置sql_trace(alter session set sql_trace=true)即是开启了级别为1的10046调试事件.当设置了10046事件之后,Oracle 将产生一个dump文件.通过得到的dump文件进行进一步分析,可以得到Oracle 内部执行系统解析.调用.等待.绑定变量等详细的trace信息,对于分析系统的性能有着举足轻重的作用.   一.10046事件的相关参数  该事件需要设置一