oracle internal_function,跟踪事件之——oracle internal setting oracle's events

oracle中的event根据它们的用途,可以分为如下四类,分别是:

1. immediate dump events

2. on-error dump events

3. change behavior events

4. trace events

这四类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

如下设置:

i) event=”[: ]…”

ii)event=””

event=””

………

多个event必须设置在一起,中间不能加入其它的参数

2、使用alter session|system set events命令

注意alter system set event和alter session set events,这两个event一个是复数一个是单数。同样,如果要取消某个event,可使用:

alter system reset event…

alter session reset 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;

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’;

下面对各类event的dump设置语法做一个总结,如下表(这个在上篇文章的图中已经表示的很清楚了):

viewspace-1056714

event内部工作原理

oracle是如何处理各种event的呢?或者说是按照什么顺利来处理那麽多的设置的event呢?请看下图:

viewspace-1056714

此图反应了oracle的执行event的内部顺序,从途中可以看到先执行session event,后执行process event。那么什么是session event,什么又是process event呢?

Pocess events are initialized at process startup with the “event” initialization parameter.即在parameter file中设置的那些event。

Session events are modified dynamically with an ALTER SESSION or ALTER SYSTEM command.即使用alter session 或者alter system设置的那些event。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值