整理:fenng
日期:24-oct-2004
出处:http://www.dbanotes.net
版本:0.9
dbms_support是oracle提供的一个软件包。供内部支持人员使用以更有效地跟踪sql。这个包没有正式的说明文件,默认情况下,系统不安装这个包。如果需要使用的话,需进行单独设置。在你的$oracle_home/rdbms/admin/目录下应该存在dbmssupp.sql,prvtsupp.plb这两个文件。
sql> connect / as sysdba connected.sql> @$oracle_home/rdbms/admin/dbmssupp.sqlpackage created.package body created.sql>
如果要其他用户也可以使用这个包,可以考虑提交如下授权操作(public可以替换为具体的用户)并创建同义词:
sql> grant execute on dbms_support to public;grant succeeded.sql> create public synonym dbms_support for dbms_support;
dbms_support的结构并不复杂:
sql> desc dbms_supportfunction mysid returns numberfunction package_version returns varchar2procedure start_trace argument name type in/out default? ------------------------------ ----------------------- ------ -------- waits boolean in default binds boolean in defaultprocedure start_trace_in_session argument name type in/out default? ------------------------------ ----------------------- ------ -------- sid number in serial number in waits boolean in default binds boolean in defaultprocedure stop_traceprocedure stop_trace_in_session argument name type in/out default? ------------------------------ ----------------------- ------ -------- sid number in serial number insql>
其中通过mysid可以获得当前会话(session)的sid(以及serial#):
sql> select sys.dbms_support.mysid from dual; mysid---------- 25sql> sql>select sid, serial# from v$session where sid = dbms_support.mysid; sid serial#---------- ---------- 25 4328sql>
通过package_version可以得到软件包所能支持的最低的pl/sql的版本:
sql> select dbms_support.package_version 2 from dual;package_version--------------------------------------------------------------------dbms_support version 1.0 (17-aug-1998) - requires oracle 7.2 - 8.0.5
如何激活sql跟踪? start_trace有两个参数:waits和binds。其中waits默认为true,binds默认为false。如果简单的提交:
sql>execute dbms_support.start_trace;
则默认激活10046事件,level 1。也即等同于:
sql>alter session set events '10046 trace name context forever, level 1';
如果提交:
sql>execute dbms_support.start_trace (binds=>true);
则激活10046事件,level 4。等同于:
sql>alter session set events '10046 trace name context forever, level 4';
如果提交:
sql>execute dbms_support.start_trace (waits=>true);
则激活10046事件,level 8。等同于:
sql>alter session set events '10046 trace name context forever, level 8';
停止跟踪提交:
sql>execute dbms_support.stop_trace;
start_trace_in_session有四个参数,可参考上面describe的输出。如果要跟踪其他用户的会话,就要用上它了。以上面的输出举例(需要sid和serial#):
sql>execute dbms_support.start_trace_in_session (25, 4328, waits->true,binds=>true,);
上面这条命令和以下语句起到同样功能:
sql>execute dbms_system.set_ev (25, 4328, 10046, 4, 8);
停止跟踪提交:
sql>execute dbms_support.stop_trace_in_session (25, 4328);
其他问题
这个包从oracle rdbms 7.2 开始就有提供。但在某些版本/平台上可能不存在。
注:各个level的基本解释:
level 0 = no statistics generated level 1 = standard trace output including parsing, executes and fetches plus more. level 2 = same as level 1. level 4 = same as level 1 but includes bind information level 8 = same as level 1 but includes wait's information level 12 = same as level 1 but includes binds and waits
参考信息
metalink - http://metalink.oracle.com ( note 62294.1 )
本文作者fenng,某美资公司dba,业余时间混迹于各数据库相关的技术论坛且乐此不疲。目前关注如何利用oracle数据库有效地构建企业应用。对oracle tuning、troubleshooting有一点研究。
个人技术站点:http://www.dbanotes.net/ 。可以通过电子邮件 dbanotes@gmail.com 联系到他。 原文出处http://www.dbanotes.net/oracle/oracle_dbms_support.htm
回首页
all articles (by fenng) are licensed under a creative commons license.
i would welcome any feedback. please send questions, comments or corrections to dbanotes@gmail.com
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器