Oracle 10046事件
2016-06-22 16:57
507 查看
10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.10046事件可以设置以下四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 加上绑定值(bind values)
8 - Level 1 + 等待事件跟踪
12 - Level 1 + Level 4 + Level 8
类似sql_trace,10046事件可以在全局设置,也可以在session级设置。
1. 在全局设置
在参数文件中增加:
event="10046 trace name context forever,level 12"
此设置对所有用户的所有进程生效、包括后台进程.
2. 对当前session设置
通过alter session的方式修改,需要alter session的系统权限:
SQL> alter session set events '10046 trace name context forever';
SQL> alter session set events '10046 trace name context forever, level 8';
SQL> alter session set events '10046 trace name context off';
为了最大限度的利用跟踪文件,应该打开计时标志,通过参数TIMED_STATISTICTS=TRUE进行设置,这样可以对每个SQL语句的执行时间等进行记录,这个功能对系统性能的负担很小。打开会话的计时信息:
SQL> alter session set timed_statistics = true ;
打开数据库系统的计时信息
SQL> alter system set timed_statistics = true ;
默认是true,timed_statistics must be TRUE when statistics_level is not BASIC
3. 对其他用户session设置
通过DBMS_SYSTEM.SET_EV系统包来实现:
先查询获得需要跟踪的session信息(sid,serial#,10046事件,Level,username等),然后执行跟踪:
SQL> exec dbms_system.set_ev(9,737,10046,8,'scott');
结束跟踪:
SQL> exec dbms_system.set_ev(9,737,10046,0,'scott');
4.获取跟踪文件
以上生成的跟踪文件位于user_dump_dest目录中,位置及文件名可以通过以下SQL查询获得:
SQL> select d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from ( select p.spid from sys.v$mystat m,sys.v$session s,sys.v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,( select t.instance from sys.v$thread t,sys.v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value)))
i, ( select value from sys.v$parameter where name = 'user_dump_dest') d;
5.使用TKPROF读取跟踪文件
ORACLE生成的跟踪文件阅读起来很困难(也就是易读性很差),通常可用TKPROF工具查看,TKPROF <trace file> <output file>
通过设置tkprof的关键字[EXPLAIN = <username/password>],也可以在跟踪文件中增加SQL语句的执行计划:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 加上绑定值(bind values)
8 - Level 1 + 等待事件跟踪
12 - Level 1 + Level 4 + Level 8
类似sql_trace,10046事件可以在全局设置,也可以在session级设置。
1. 在全局设置
在参数文件中增加:
event="10046 trace name context forever,level 12"
此设置对所有用户的所有进程生效、包括后台进程.
2. 对当前session设置
通过alter session的方式修改,需要alter session的系统权限:
SQL> alter session set events '10046 trace name context forever';
SQL> alter session set events '10046 trace name context forever, level 8';
SQL> alter session set events '10046 trace name context off';
为了最大限度的利用跟踪文件,应该打开计时标志,通过参数TIMED_STATISTICTS=TRUE进行设置,这样可以对每个SQL语句的执行时间等进行记录,这个功能对系统性能的负担很小。打开会话的计时信息:
SQL> alter session set timed_statistics = true ;
打开数据库系统的计时信息
SQL> alter system set timed_statistics = true ;
默认是true,timed_statistics must be TRUE when statistics_level is not BASIC
3. 对其他用户session设置
通过DBMS_SYSTEM.SET_EV系统包来实现:
先查询获得需要跟踪的session信息(sid,serial#,10046事件,Level,username等),然后执行跟踪:
SQL> exec dbms_system.set_ev(9,737,10046,8,'scott');
结束跟踪:
SQL> exec dbms_system.set_ev(9,737,10046,0,'scott');
4.获取跟踪文件
以上生成的跟踪文件位于user_dump_dest目录中,位置及文件名可以通过以下SQL查询获得:
SQL> select d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from ( select p.spid from sys.v$mystat m,sys.v$session s,sys.v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,( select t.instance from sys.v$thread t,sys.v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value)))
i, ( select value from sys.v$parameter where name = 'user_dump_dest') d;
5.使用TKPROF读取跟踪文件
ORACLE生成的跟踪文件阅读起来很困难(也就是易读性很差),通常可用TKPROF工具查看,TKPROF <trace file> <output file>
通过设置tkprof的关键字[EXPLAIN = <username/password>],也可以在跟踪文件中增加SQL语句的执行计划:
相关文章推荐
- oracle regexp_instr
- Oracle SQL Profile指定执行计划
- Oracle STA的使用
- Oracle数据库对象简介
- Oracle 12c单机数据库干净卸载
- 查看ORACLE 数据库及表信息
- Oracle Real Application Clusters 11g R2 新特性之SCAN -- 基础篇
- Oracle RAC root.sh 报错 Timed out waiting for the CRS stack to start 解决方法—--范例篇
- 数据库插入触发器 sql->oracle
- Oracle 11gR2 ASM备份/恢复metadata示例
- Oracle 11gR1/R2 PSU安装参考
- Linux 下Oracle 数据文件被物理误删除的恢复
- 常见Oracle错误之ORA-01102错误
- Oracle 12c Study之--Installer Oracle
- Oracle 12c Study之--Installer Oracle
- oracle sql jpa
- Oracle Logminer数据库日志分析详解
- oracle限制用户连接数
- Oracle行转列
- Oracle 和 SqlServer 的区别