Oracle中打开10046 Trace的各种方法 .
2013-10-29 17:02
29 查看
10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracle内部执行系统解析、调用、等待、绑定变量等详细的trace信息,对于分析系统的性能有着非常重要的作用。
设置10046事件的不同级别能得到不同详细程度的trace信息,下面就列出各个不同级别的对应作用:
等级1的10046 trace被视为是普通的SQL Trace,而等级4、等级8以及等级12则被称为Extended SQL Trace,Extended SQL Trace里面包括了最有用的WAIT信息,因此在实际中也是用的最多的。
与SQL Trace相关的参数
在打开10046时间的SQL Trace之前,要先设置好下面几个参数。
timed_statistics 这个参数决定了是否收集与时间相关的统计信息,如果这个参数为FALSE的话,那么SQL Trace的结果基本没有多大的用处,默认情况下这个参数设置为TRUE。
max_dump_file_size dump文件的大小,也就是决定是否限制SQL Trace文件的大小,在一个很忙的系统上面做SQL Trace的话可能会生成很多的信息,因此最好在会话级别将这个参数设置成unlimited。
tracefile_identifier 给Trace文件设置识别字符串,这是个非常有用的参数,设置一个易读的字串能更快的找到Trace文件。
要在当前会话修改上述参数很简单,只要使用下面的命令即可:
当然,这些参数可以在系统级别修改的,也可以加载init文件中或是spfile中,让系统启动时自动做全局设置。
要是在系统运行时动态的修改别的会话的这些参数就需要借助DBMS_SYSTEM这个包了,设置方法如下:
注意,Oracle并没有提供一个set_string_param_in_session的函数在dbms_system包中,因此tracefile_identifier是无法在别的会话中修改的(至少我到现在没有找到一个可以设置的方法)。
10046 Trace启动方法
得到PID之后就可以使用oradebug工具了,注意需要使用sysdba登陆到数据库:
另一个方法是使用SET_EV过程,当然这个过程不仅仅用来设置10046事件,还能设置所有的其他的事件,使用方法为:
使用例子:
设置10046事件的不同级别能得到不同详细程度的trace信息,下面就列出各个不同级别的对应作用:
等级 | 二进制 | 作用 |
---|---|---|
0 | 0000 | 无输出 |
1 | 0001 | 输出 ****,APPNAME(应用程序名),PARSING IN CURSOR,PARSE ERROR(SQL解析),EXEC(执行),FETCH(获取数据),UNMAP,SORT UNMAP(排序,临时段),ERROR,STAT(执行计划),XCTEND(事务)等行 |
2 | 0011 | 与等级1完全一样 |
4 | 0101 | 包括等级1的输出,加上BIND行(绑定变量信息) |
8 | 1001 | 包括等级1的输出,加上WAIT行(等待事件信息) |
12 | 1101 | 输出等级1、等级4以及等级8的所有信息 |
与SQL Trace相关的参数
在打开10046时间的SQL Trace之前,要先设置好下面几个参数。
timed_statistics 这个参数决定了是否收集与时间相关的统计信息,如果这个参数为FALSE的话,那么SQL Trace的结果基本没有多大的用处,默认情况下这个参数设置为TRUE。
max_dump_file_size dump文件的大小,也就是决定是否限制SQL Trace文件的大小,在一个很忙的系统上面做SQL Trace的话可能会生成很多的信息,因此最好在会话级别将这个参数设置成unlimited。
tracefile_identifier 给Trace文件设置识别字符串,这是个非常有用的参数,设置一个易读的字串能更快的找到Trace文件。
要在当前会话修改上述参数很简单,只要使用下面的命令即可:
要是在系统运行时动态的修改别的会话的这些参数就需要借助DBMS_SYSTEM这个包了,设置方法如下:
10046 Trace启动方法
开启当前会话的10046 Trace
使用sql_trace参数
sql_trace应该是简单快捷的开启Trace的方法了,不过通过sql_trace只能开启级别为1的Trace,而无法开启其他更高级的Trace。使用set event开启Trace
使用set event打开10046事件Trace是最常用的了。开启其他会话的10046 Trace
使用登陆触发器开启Trace
我们可以通过编写登陆触发器来开启10046 Trace,使用这种方法开启Trace的代码和开启当前会话的是一样的,不同的就是这些开启代码是包含在一个after logon触发器里面的。使用oradebug工具
使用oradebug工具必须要知道所要处理的进程的OS进程PID,OS PID可以使用下面的语句得到:使用DBMS_SYSTEM包
DBMS_SYSTEM包提供了两个开启10046 Trace的方法,一个是使用SET_SQL_TRACE_IN_SESSION过程,不过使用这个过程的效果和sql_trace是一样的:相关文章推荐
- Oracle 删除用户和表空间////Oracle创建删除用户、角色、表空间、导入导出、...命令总结/////Oracle数据库创建表空间及为用户指定表空间
- Oracle CASE WHEN 用法介绍
- Orapwd 初步认识
- 删除oracle数据库用户的dba权限(当出现同一用户DBA可以登录,normal不能登录)“无法对SYS拥有的对象创建触发器”
- Oracle 用户、对象权限、系统权限
- Unable to obtain network interface list from Oracle ClusterwarePRCT-1011 : Failed to run "oifcfg". D
- oracle的表连接hash join、nested loop join
- ORACLE 数据库设计 多对多关系
- 老白Oracle数据库性能优化实务-视频分享
- Oracle 11G r2 Rac修改IP
- 如何卸载Oracle数据库
- Oracle用户的单张表的读写权限控制
- Oracle常用SQL(DDL)命令
- Oracle 使用exp&imp备份恢复数据库空问题
- Oracle PatchSet 11.2.0.4 最终版本发布
- 如何检查oracle的归档空间是否满了?
- 使用logmnr方法找回被误删除Oracle的数据的脚本
- oracle命令大全
- Oracle 查看表空间使用率 SQL 脚本
- oracle时间格式问题(查询)