整理: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 waits 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