诊断事件设置

语法:

<set_events>::=ALTER {SYSTEM | SESSION} SET EVENTS (<event_definition>[:...n]);

<event_definition> ::= <event_name> TRACE <trace_spec>[,...n]

[OFF | FOREVER | LIFETIME seconds | AFTER t TIMES]

[LEVEL n]

<event_name> ::= {IMMEDIATE | eventnumber}

<trace_spec> ::= NAME {CONTEXT | tracename}

图例:

<set_events>

../../../../../_images/image190.png

<event_definition>

../../../../../_images/image237.png

<event_name>

../../../../../_images/image339.png

<trace_spec>

../../../../../_images/image430.png

参数:

IMMEDIATE:

立即将指定转储对象转储到跟踪文件中,不能与OFF、CONTEXT、FOREVER等同用。

eventnumber:

事件号,可以是错误号或内部事件号。内部事件列表如下所示

内部事件号 含义
10053 优化器状态跟踪
10046 SQL执行跟踪
10033 排序跟踪
10103 Hash跟踪
10104 Hash连接跟踪
10210 数据块检查跟踪
10224 索引页面分裂/删除跟踪
10852 加锁跟踪
10250 堆内存分配
10880 网络通信协议信息跟踪

tracename:

转储的对象名。非立即转储的转储对象不能为控制文件信息转储、数据文件头转储、日志文件头转储、段信息转储和索引页面信息转储。

tracename 含义
controlf 控制文件信息转储
file_hdrs 数据文件头转储
redohdr 日志文件头转储
segdump 段信息转储
treedump 索引页面信息转储
buffers Buffer信息转储
spc_cache SPC缓存信息转储
heapdump 堆内存信息转储
latches Latch信息转储
errorstack 错误栈转储
leaksegs 泄漏段转储
drop_segment 泄漏段删除

CONTEXT:

根据内部事件号转储相关信息。错误号的诊断对象不能为CONTEXT。

OFF:

关闭诊断事件,不能与LEVEL n同用。

FOREVER:

表示事件在实例或会话的周期内保持有效状态

t:

诊断事件有效的次数

seconds:

指定诊断事件的生命期

n:

指定事件级别号或转储目标,转储级别默认为1,转储级别号为多个转储级别号的叠加。比如转储级别为7(级别1+级别2+级别4)则同时转储级别1、级别2和级别4对应的转储内容; 不能与OFF同用。

示例:

诊断事件状态查看:

Select * from V$DiagEvents;

用于查看当前所有已设置的session级和system级诊断事件。

配置参数

系统级诊断事件设置,通过:可设置多个诊断事件

EVENT = "eventnumber trace name tracename [forever,] [level n] : ......"

ENABLE_TIME_STAT:

是否开启运行时诊断的时间统计,包括SQL算子和等待事件的时间统计,可设置为true或false,默认为true。

关闭后表现:关闭后 V$SESSION_WAIT 、V$SQLSTAT 、V$SQL_PLAN_STATISTICS 等视图将不再显式时间相关信息。

参数 ENABLE_TIME_STAT 或 ENABLE_SQL_TRACE 任意一个开启时,可以通过动态视图 V$SESSION_LONGOPS 查看长时操作。