首页 > Linux操作系统 > Linux操作系统 > Oracle10g的trace
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://fbirdzp.blogbus.com/logs/35144917.html
总结一下最近常用的oracle trace相关,以备以后使用!仅限于oracle10g版本session级别和sql语句的跟踪!
1.使用dbms包激活trace
.DBA用户可以使用oracle自带的dbms_system或是dbms_monitor包打开对指定session的跟踪。
使用dbms包打开会话级别的跟踪时,需要设定session_id, serial_num以及监控参数waits和bind来激活数据库的trace。
.普通数据库用户也可以使用dbms_session包激活当前session的跟踪,enable时不用再设置session_id等信息,也可以使用dbms_support进行其他session的跟踪。使用dbms包激活trace的语句如下:
----------------------------------------------------------------------------------------------------
使用dbms_system包激活trace
sql>desc dbms_system.set_sql_trace_in_session(sid => '##',serial# => '###',sql_trace => true);
使用dbms_monitor包激活trace
SQL> exec dbms_monitor.session_trace_enable(session_id => 1037,serial_num => 340,waits => true,binds => false);
使用dbms_session包激活trace
sql>exec dbms_session.session_trace_enable();
使用dbms_support包激活trace
sql>exec dbms_support.start_trace_in_session(sid=>xxx, serial#=>xxx, waits=>true, binds=>true);
结束trace,以dbms_monitor包为例
sql>exec dbms_monitor.session_trace_disable();
----------------------------------------------------------------------------------------------------
2. 10046 trace
10046 event在oracle调优诊断过程中使用的较多,长期从事oracle工作的人都会了解到这一块,所以关于10046 event在网上也比较泛滥。像偶这种水平一般的oracle测试人员,先熟练掌握怎么使用10046 trace,至于诊断调优的经验还是慢慢积累吧。
使用10046 trace需要注意的是:
---------------------------------------------------------------------------------------------------
打开session级别的10046 trace
sql>alter session set events '10046 trace name context forever, level 12' ;
关闭10046 trace
sql>alter session set events '10046 trace name context off';
---------------------------------------------------------------------------------------------------
另外需要注意的就是10046的级别了,有1、4、8、12这4个级别,级别越高收集的信息越多,当然消耗的资源也越大。
3.sql trace
会话级别跟踪sql语句,可以使用以下2种方式:
关闭当前session的sql trace,使用语句如下:
也可以在初始参数文件spfile或是pfile里定义sql_trace=true,启动数据库自动开始进行sql语句的跟踪,这样会牺牲一部分性能。
4.如何查看trace信息
如何查看跟踪的信息呢?
不论是使用dbms包还是10046 event,生成的trc文件都存放在user_dump_dest参数定义的路径下,默认存放在$ORACLE_BASE/admin/instance_name/udump/下。
Oracle提供了tkprof命令,将trc文件格式化为固定形式的文件。
有些时候我们需要在trc文件里取出我们跟踪的会话trace信息,则就要结合使用另一个oracle提供的系统级别命令trcsess。比如:
---------------------------------------------------------------------------------------------------
使用dbms_monitor包激活trace
SQL> exec dbms_monitor.session_trace_enable(session_id => 1037,serial_num => 340,waits => true,binds => false);
获取跟踪会话的trc文件,使用命令如下:
[dwtest1$]/oracle>trcsess utput=test.trc session=1037.340
使用tkprof命令进行格式化
[dwtest1$]/oracle>tkprof test.trc test.txt
注意:trcsess命令的session参数必须是session_id.serial_num形式
---------------------------------------------------------------------------------------------------
tkprof输出的文件格式非常规整,看起来也很方便,你可以看到跟踪会话里执行的sql语句,常见的统计信息,执行计划以及waits events等等,很方便很强大!对于问题sql或是等待事件的调优或诊断,简直是杀人越货之必备工具。
tkprof另外一个方便之处提供了众多的参数,你可以将trc文件按照你的需求生成报告,比如按照执行次数或是cpu time等排序。
详细参考:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/sqltrace.htm#i18143
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/386081/viewspace-557953/ ,如需转载,请注明出处,否则将追究法律责任。