** Oracle Internal Events: **
** Introduction:( ** ** 简介 ) **
有四种类型的 Events:
Immediate dumps
Conditional dumps
Trace dumps
Events that change database behaviour
每一个事件都有一个号跟 Oracle 的错误信息是一样的 . 如 10046 和 ORA-10046
每一个事件都有一个 Level, 可以是以下 :
范围 1 到 10
位标 0x01 0x02 0x04 0x08 0x10
标识 0=off,1=on
ID 号 对象 ID(object id), 内存地址 (memory address)
要注意的是 ,Events 在每一个版本之间都有所改变 . 有一些存在的事件可能存在争议性或者已经不可用了 , 往往这些事件号会由新的事件所替代掉 . 也要注意在当前的版本中 message file 不一定可以反映出 Events.
很多 Events 都会影响数据库的行为 , 一些测试 Events 极有可能导致数据库 DOWN 掉 . 所以 , 在没有 Oracle Support 的前提下 , 最好不要在 PRO 系统上做 Events 操作 .DEV 系统上如果要做 Events 最好先做个数据库的全备份 .
** Enabling Events(Enable ** ** 事件 ) **
Events 可以在 Instance 一级 Enabled, 主要是在 INIT.ORA 文件中做操作 :
event=' _ event _ trace name context forever, level _ level _ ';
( 红色部分 : _ event _ 指事件号 . _ level _ 指定事件的级别 )
一次可以 Enable 多个事件 , 可以用以下两种方式 :
1. 用一个冒号隔开
event = "10248 trace name context forever, level 10:10249 trace name context forever, level 10"
2. 两个 Events 分开写
event= "10248 trace name context forever, level 10"
event="10249 trace name context forever, level 10"# 一些版本的 Oracle , event 要一样的大小写
Events 也可以在 Instance 一级用 ALTER SYSTEM 命令来 Enable:
ALTER SYSTEM SET EVENTS ' event trace name context forever, level level ';
在 Instance 一级用以下 Disable
ALTER SYSTEM SET EVENTS ' event trace name context off';
Events 也可以在 Session 一级用 ALTER SESSION 命令来 Enable:
ALTER SESSION SET EVENTS ' event trace name context forever, level level ';
在 Session 一级用以下命令 Disable:
ALTER SESSION SET EVENTS ' event trace name context off';
Events 在其他的 Session 用 ORADEBUG 来 Enable:
在一个 Process 中实现 Enable:
ORADEBUG EVENT event TRACE NAME CONTEXT FOREVER, LEVEL _level _
在某个进程中 Enable:
ORADEBUG SETORAPID 8(PID 进程号 )
ORADEBUG EVENT _ event _ TRACE NAME CONTEXT FOREVER, LEVEL _level _
以下命令 Disable:
ORADEBUG EVENT event TRACE NAME CONTEXT OFF
在 Session 中实现 Enable:
ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT FOREVER, LEVEL _level _
在 Session 中实现 Disable:
ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT OFF
Events 也可以用 DBMS_SYSTEM.SETEV 包来实现 Enable 和 Disable
( 在做之前要先从 V$session 视图中获得 SID 和 Serial#)
用以下方式 :EXECUTE DBMS_SYSTEM.SET_EV(SID,Serial#,event,level, '')
如 EXECUTE dbms_system.set_ev (9,29,10046,8,'');
要 Disable 则将 level 改为 0, 如 : EXECUTE dbms_system.set_ev (9,29,10046,0,'');
** Listing All Events:( ** ** 列出所有可用的 ** ** Events) **
大部分的 Events number 的范围都在 10000 到 10999. 可以用以下命令 Dump 出所有的信息
SET SERVEROUTPUT ON
DECLARE
err_msg VARCHAR2(120);
BEGIN
dbms_output.enable (1000000);
FOR err_num IN 10000..10999
LOOP
err_msg := SQLERRM (-err_num);
IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
dbms_output.put_line (err_msg);
END IF;
END LOOP;
END;
/
在 UNIX 系统下 message 文件在底下目录 $ORACLE_HOME/rdbms/mesg/oraus.msg
在 NT 系统下 message 文件在底下目录 $ORACLE_HOME/rdbms/mesg/oraus.msg
** Listing Enabled Events( ** ** 列出 ** ** Enabled Events) **
用以下命令列出在当前 Session 已经 Enabled Events:
SET SERVEROUTPUT ON
DECLARE
l_level NUMBER;
BEGIN
FOR l_event IN 10000..10999
LOOP
dbms_system.read_ev (l_event,l_level);
IF l_level > 0 THEN
dbms_output.put_line ('Event '||TO_CHAR (l_event)||
' is set at level '||TO_CHAR (l_level));
END IF;
END LOOP;
END;
/
常用 Events 的参考 :( 红色的为最常用的而且对 DBA 比较有用的 Events)
Event 10013 - Monitor Transaction Recovery------ 在 Startup 时跟踪事务恢复
ALTER SESSION SET EVENTS '10013 trace name context forever, level 1';
Event 10015 - Dump Undo Segment Headers---- 在事务恢复后做 Dump 回退段头信息
ALTER SESSION SET EVENTS '10015 trace name context forever, level 1';
Event 10032 - Dump Sort Statistics----Dump 排序的统计信息 ,level 10 是最详细的
ALTER SESSION SET EVENTS '10032 trace name context forever, level 10';
Event 10033 - Dump Sort Intermediate Run Statistics—level 10( 不明白 )
ALTER SESSION SET EVENTS '10033 trace name context forever, level 10';
Event 10045 - Trace Free List Management Operations— 跟踪 Freelist
ALTER SESSION SET EVENTS '10045 trace name context forever, level 1';
Event 10046 - Enable SQL Statement Trace--- 跟踪 SQL, 有执行计划 , 邦定变量和等待的统 计信息 ,level 12 最详细
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
级别 level 参考如下图 :
| |
** Level **
|
** Action **
---|---
1
|
Print SQL statements, execution plans and execution statistics
4
|
As level 1 plus bind variables
8
|
As level 1 plus wait statistics
12
|
As level 1 plus bind variables and wait statistics
Event 10053 - Dump Optimizer Decisions--- 在分析 SQL 语句时 ,Dump 出优化器所做的选择 , 级别 level 1 最详细
ALTER SESSION SET EVENTS '10053 trace name context forever, level 1';
参考 level:
** Level **
|
** Action **
---|---
1
|
Print statistics and computations
2
|
Print computations only
Event 10060 - Dump Predicates---( 参考 http://www.juliandyke.com/ )
Event 10065 - Restrict Library Cache Dump Output for State Object Dumps-( 参考 http://www.juliandyke.com/ )
Event 10079 - Dump SQLNet Statistics---Dump SQLNeT 的统计信息
ALTER SESSION SET EVENTS '10079 trace name context forever, level 2';
Event 10081 - Trace High Water Mark Changes— 跟踪 HWM 的改变
ALTER SESSION SET EVENTS '10081 trace name context forever, level 1';
Event 10104 - Dump Hash Join Statistics—Dump HASH JOIN 的统计信息 , 用 level 10
ALTER SESSION SET EVENTS '10104 trace name context forever, level 10';
Event 10128 - Dump Partition Pruning Information—Dump 分区表信息
ALTER SESSION SET EVENTS '10128 trace name context forever, level level ';
Level 参考
** Level **
|
** Action **
---|---
0x0001
|
Dump pruning descriptor for each partitioned object
0x0002
|
Dump partition iterators
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4