ITPub博客

首页 > Linux操作系统 > Linux操作系统 > event介绍

event介绍

原创 Linux操作系统 作者:thompsun 时间:2010-05-01 17:11:42 0 删除 编辑

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 level ’;   
    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 = “ trace name errorstack level ”;   
    2.alter session set events ‘ trace name errorstack level ’;
    3.在绑定一个进程以后,oradebug session_event trace name errorstack level ,这个命令对运行这个绑定的进程的session设置了这个event;而oradebug event trace name errorstack level ,这个命令是对当前绑定这个进程的session以及之后在进程上运行的session设置了这个session,因此这个命令在shared server模式中很有作用。

    举例如下:
    如当死锁发生的时候,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 = “ trace name context forever,level ”;
    如阻止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 = “ trace name context forever,level ”    
    2.alter session|system set events ‘ trace name context forever,level ’;

    如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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-01-11

  • 博文量
    96
  • 访问量
    276880