event的分类和dump
oracle中的event根据它们的用途,可以分为如下四类,分别是:
1.immediate dump
2.on-error dump
3.change behavior
4.trace
这四类event,分别对应下面四种不同的用途:
1.dump diagnostic information on request
2.dump diagnostic information when an error occurs
3.change database behavior
4.produce trace diagnostics as the database runs
那么,如何设置这四类event呢?或者说如果dump这四类event呢?可以有四种方法来dump:
1.在parameter file中使用event initialization parameter
2.alter session|system set events
3.sys.dbms_system.set_ev()
4.oradebug
下面来分别解释一下这四类event。
immediate dumps
这类event都是根据要求随时dump相应的内容到一个trace file中。常见的immediate dumps包括有:文件头部的dump(如controlf,redohdr,file_hdrs),系统状态的dump(systemstate),进程的状态的dump(processtate)。
这类dump,很显然不能在parameter file中使用event initialization parameter。其他三种方法都可以使用,其中alter session最常用:
1.alter session set events ‘immediate trace name
2.oradebug dump
3.sys.dbms_system.set_ev(sid,serial#,65535,
这里的
举例如下:
1.alter session set events ‘immediate trace name controlf level 10’;
2.execute sys.dbms_system.set_ev(7,10,65535,10,’controlf’);
3.oradebug setospid 4081;
4.oradebug dump controlf 10;
on-error dumps
这类dump和immdiate dumps很类似,只不过它发生的时间是前面的错误event发生的时候。event name就是oracle的ORA-nnn错误代码,如死锁的错误代码是ORA-00060
常见的一种on-error dump是dump出出错时候的进程的调用栈,trace name是errorstack。下面我就对这种常见的on-error dump的level说明一下:
level description
0 error stack only
1 error stack and function call stack (if implemented)
2 as 1 plus process state
3 as 2 plus the context area (all cursors and current cursor highlighted).
这类event该如何dump能,它可以使用下面的三种方法:
1.在parameter file中设置event = “
2.alter session set events ‘
3.在绑定一个进程以后,oradebug session_event
举例如下:
如当死锁发生的时候,dump出的调用栈信息的event是:
1.在parameter file中设置event = “60 trace name errorstack level 1”;这样每当死锁发生的时候,它的相关信息就被dump到相应的trace file中。
2.alter session set events ‘60 trace name errorstack level 1’;
3.> oradebug setospid 4018;
> oradebug unlimit;
> oradebug dump errorstack 1;
change behavior. dumps
当这类事件发生的时候,你可以通过dump做如下的操作:
1.change the oracle server’s behavior
2.enable hidden features
3.work around problems
4.perform. specialized tuning
这类事件的dump设置一般都是在parameter file中设置:
event = “
如阻止SMON合并空闲空间事件如下设置:
event = “10269 trace name context forever,level 10”。
trace events dumps
这类event的dump,就是dump出event的trace内容,方便解决与跟踪问题。这类event的常用的dump设置方法是在parameter file中或者使用alter session:
1.event = “
2.alter session|system set events ‘
如alter session set events ‘10046 trace name context forever,level 12’;
检查设置了errorstack事件的方式:
SQL> alter session set events '942 trace name errorstack level 3';
会话已更改。
SQL> alter session set events '10046 trace name context forever,level 12';
会话已更改。
SQL> oradebug setmypid
已处理的语句
SQL> oradebug eventdump session;
10046 trace name CONTEXT level 12, forever
942 trace name ERRORSTACK level 3
SQL> set serveroutput on size 60000
SQL> begin
2 declare event_level number;
3 begin
4 for i in 1000..10999 loop
5 sys.dbms_system.read_ev(i,event_level) ;
6 if (event_level > 0) then
7 dbms_output.put_line('Event '||to_char(i)||' set at level '||to_char(event_level)) ;
8 end if ;
9 end loop ;
10 end ;
11 end ;
12 /
Event 10046 set at level 12
PL/SQL 过程已成功完成。
SQL> alter session set events '942 trace name context off';
会话已更改。
SQL> alter session set events '10046 trace name context off';
会话已更改。
SQL> oradebug eventdump session;
已处理的语句
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11134237/viewspace-661755/ ,如需转载,请注明出处,否则将追究法律责任。