DBMS_SUPPORT包简单使用

栏目: 数据库 · 发布时间: 7年前

内容简介:本片文章介绍下追踪SQL的另一种方法,使用DBMS_SUPPORT包来追踪SQL。DBMS_SUPPORT是Oracle为内部人员提供的一个软件包。供内部支持人员使用以更有效地跟踪SQL。馆方文档上没有这个包的说明文件,默认情况下,系统不安装这个包。DBMS_SUPPORT包ORACLE RDBMS 7.2版本开始就有提供,但是某些平台/版本可能已经不存在了,如果需要使用的话,需进行单独安装,安装DBMS_SUPPORT包也很简单,只要执行$ORACLE_HOME/rdbms/admin/目录下的dbmss

本片文章介绍下追踪 SQL 的另一种方法,使用DBMS_SUPPORT包来追踪SQL。

DBMS_SUPPORT是Oracle为内部人员提供的一个软件包。供内部支持人员使用以更有效地跟踪SQL。馆方文档上没有这个包的说明文件,默认情况下,系统不安装这个包。

SQL> desc dbms_support
ERROR:
ORA-04043: object dbms_support does not exist

DBMS_SUPPORT包ORACLE RDBMS 7.2版本开始就有提供,但是某些平台/版本可能已经不存在了,如果需要使用的话,需进行单独安装,安装DBMS_SUPPORT包也很简单,只要执行$ORACLE_HOME/rdbms/admin/目录下的dbmssupp.sql脚本即可。

SQL> @?/rdbms/admin/dbmssupp
Package created.
Package body created.

DBMS_SUPPORT包的结构很简单,只有当前SESSION和其他SESSION两个级别。

SQL> desc dbms_support
FUNCTION MYSID RETURNS NUMBER
FUNCTION PACKAGE_VERSION RETURNS VARCHAR2
PROCEDURE START_TRACE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 WAITS                          BOOLEAN                 IN     DEFAULT
 BINDS                          BOOLEAN                 IN     DEFAULT
PROCEDURE START_TRACE_IN_SESSION
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SID                            NUMBER                  IN
 SERIAL                         NUMBER                  IN
 WAITS                          BOOLEAN                 IN     DEFAULT
 BINDS                          BOOLEAN                 IN     DEFAULT
PROCEDURE STOP_TRACE
PROCEDURE STOP_TRACE_IN_SESSION
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SID                            NUMBER                  IN
 SERIAL                         NUMBER                  IN

下面分别演示下DBMS_SUPPORT包各个功能的用法:

1.FUNCTION MYSID:如果我们要查询当前会话的SID和SERIAL#,我们通常先去查询V$MYSTAT视图,然后再去查询V$SESSION视图,现在我们也可以通过DBMS_SUPPORT包的MYSID函数直接查到当前会话的SID。

SQL> select sid,serial# from v$session where sid=(select sid from v$mystat 
where rownum=1);
       SID    SERIAL#
---------- ----------
       159        338
SQL> select sid,serial# from v$session where sid=dbms_support.mysid;
       SID    SERIAL#
---------- ----------
       159        338

2.FUNCTION PACKAGE_VERSION:通过DBMS_SUPPORT包PACKAGE_VERSION函数,可以得到软件包所能支持的最低的PL/SQL的版本。

SQL> select dbms_support.PACKAGE_VERSION from dual;
PACKAGE_VERSION
--------------------------------------------------------------------
DBMS_SUPPORT Version 1.0 (17-Aug-1998) - Requires Oracle 7.2 - 8.0.5

3.PROCEDURE START_TRACE/ PROCEDURE STOP_TRACE:这两个过程是针对当前会话开启和关闭追踪,START_TRACE过程有2个参数,WAITS(等待事件信息)和BINDS(绑定变量信息)。

开启SQL追踪:

SQL> exec dbms_support.start_trace;
PL/SQL procedure successfully completed.

以上开启的SQL追踪默认激活10046事件的level 1,即等同于:

SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 1';
Session altered.

如果加上BINDS=>true,默认激活10046事件的level 4:

SQL> exec dbms_support.start_trace (BINDS=>true);
PL/SQL procedure successfully completed.

等同于:

SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 4';
Session altered.

如果加上的是WAITS =>true,默认激活10046事件的level 8:

SQL> exec dbms_support.start_trace (WAITS=>true);
PL/SQL procedure successfully completed.

等同于:

SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';
Session altered.

如果同时加上BINDS=>true和WAITS =>true,则激活10046事件的level 12:

SQL> exec dbms_support.start_trace (BINDS=>true,WAITS=>true);
PL/SQL procedure successfully completed.

等同于:

SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
Session altered.

关闭SQL追踪:

SQL> exec dbms_support.stop_trace;
PL/SQL procedure successfully completed.

默认激活10046的level 0,相当于:

SQL> ALTER SESSION SET EVENTS '10046 trace name context off';
Session altered.

4.PROCEDURE START_TRACE_IN_SESSION/STOP_TRACE_IN_SESSION:这两个过程是针对其他会话开启和关闭追踪,这两个过程分别比START_TRACE/STOP_TRACE过程多了SID和SERIAL#2个参数,SID和SERIAL#可以确定一个SESSION,所以在追踪其他SESSION的SQL时必须先查到这个SESSION的SID和SERIAL#。

[oracle@dbdream ~]$ sqlplus stream/stream
SQL> select sid,serial# from v$session where sid=dbms_support.myid;
select sid,serial# from v$session where sid=dbms_support.myid
                                            *
ERROR at line 1:
ORA-00904: "DBMS_SUPPORT"."MYID": invalid identifier

可以看到stream用户没有权限运行DBMS_SIPPORT包,可以通过下面的方法使普通用户也可以运行DBMS_SIPPORT包。

SQL> grant execute on dbms_support to stream;
Grant succeeded.
SQL> CREATE PUBLIC SYNONYM dbms_support FOR dbms_support;
Synonym created.

这样stream用户就可以使用DBMS_SUPPORT包了。

SQL> select sid,serial# from v$session where sid=dbms_support.mysid;
       SID    SERIAL#
---------- ----------
       143        165

下面演示下用SYS用户追踪stream用户运行的SQL,本实验仅演示level 12级别的追踪,其他级别的追踪不再演示。

SQL> exec dbms_support.start_trace_in_session(143,165,binds=>true,waits=>true);
PL/SQL procedure successfully completed.

此时,stream用户执行的SQL就会被记录下来,在追踪到需要追踪的SQL后,记得关闭SQL追踪,否则可能因为追踪时间过长而导致trace追踪文件太大。

SQL> exec dbms_support.stop_trace_in_session(143,165);
PL/SQL procedure successfully completed.

DBMS_SUPPORT包除了没有全局追踪的功能,其他和10046事件几乎一样,除了10046事件和DBMS_SUPPORT包,还有oradebug也可以追踪SQL,接下来我会分享下oradebug的学习笔记。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Essential PHP Security

Essential PHP Security

Chris Shiflett / O'Reilly Media / 2005-10-13 / USD 29.95

Being highly flexible in building dynamic, database-driven web applications makes the PHP programming language one of the most popular web development tools in use today. It also works beautifully wit......一起来看看 《Essential PHP Security》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具