ORACLE EVENTS

oracle 的事件可以分2种:1是等待事件,2诊断事件.我们在下面学习下ORACLE的诊断事件.
ORACLE 的诊断事件大概分成4个主要的类别
1 .Dump diagnostic information on request(即IMMEDIATE 转储事件)通常用来转储系统状态,进程状态,和文件头部等等(CONTROLF,REDOHDR,FILE_HDRS)
alter session set events 'immediate trace name controlf level 10';(通常IMMEDIATE 用ALTER SESSION 来执行,这类事件不能放到INIT.ORA中,就算设置此参数也不会生效)
ORADEBUG SETMYPID
ORADEBUG DUMP CONTROLF 10
2 . Dump diagnostic information when an error occurs(即ON ERROR转储事件)
alter system set events '4031 trace name errorstack level 1'; 当发生ORA-04031的时候系统会把错误的堆栈DUMP出来.一般等级为3个等级,1级错误堆栈和函数调用堆栈.2级级别1加上进程状态.3级在级别2上加上了上下文区域.当然我们通常是在INIT.ORA中设置EVENT='***'
3. Change database behavior(即是改变数据库的行为)
EVENT='10269 TRACE NAME CONTEXT FOREVER'次时间就是禁止PMON 对空间空间的合并
4. Produce trace diagnostics as the database runs(即PROCESS TRACE 获得额外的信息)
EXEC DBMS_SYSTEM.EV(142,7,10046,10,'');
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER LEVEL 12';

EVENT的语法:
{:}*
::=
::= "trace"|"debugger"|"crash"
::= {,}*

For "trace" action:
::= {;}*
::= "name"
{,}*
::= ""|"off"|
"after times"|
"forever"|
"lifetime "|
"level "|
"type "
::= "increment"|"decrement"|"constant"

从以上语法不难看出
如果我们开启一个EVENTS
alter system set events '4031 trace name errorstack level 1';
可以通过
alter system set events '4031 trace name errorstack off;
来关闭他.
如何设置EVENT 呢?
有4种方法
1.在PFILE或SPFILE 中指定 EVENT 参数
例如:ALTER SYSTEM SET EVNT='60 TRACE NAME ERRORSTACK' SCOPE=SPFILE;
2.通过ALTER SESSION/SYSTEM 来设定
例如:ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL 10'
ALTER SYSTEM SET EVNETS '604 TRACE NAME ERRORSTACK'
3.通过DBMS_SYSTEM.SET_EV 这个存储过程
例如:EXEC DBMS_SYSTEM.SET_EV(142,7,10046,10,'')
4.通过ORADEBUG 工具设置
例如:ORADEBUG SETMYPID
ORADEBUG UNLIMIT
ORADEBUG DUMP CONTROLF 10

如果你想设置多个EVENT呢?
有2种方法
1.在PFILE 中指定EVENT时候 可以连续设置2个EVENT 参数(2个EVENT 必须上下在一起 如果分开第一个EVENT 将失效)
例如:EVENT='10015 TRACE NAME CONTEXT FOREVER'
EVENT='10046 TRACE NAME CONTEXT FOREVER ,LEVEL 10'
必须2个连在一起.
2.在EVENT 中 每个EVENT 用:隔离.
例如:EVENT='10015 TRACE NAME CONTEXT FOREVER:10046 TRACE NAME CONTEXT FOREVER ,LEVEL 10'

在使用DBMS_SYSTEM.SET_EV时候有几点注意下.
DBMS_SYSTEM.SET_EV(SID,SERIAL#,EVENT,LEVEL,ACTION)
LEVEL 是在是指DUMP的等级,如果是在BLOCK DUMP 的时候是指DBA
ACTION 是在TRACE NAME(65535 EVENT 时候指定此参数如CONTROLF,SYSTEMSTATE,PROCESSSTATE.

我们如何来查看1个SESSEN开了那些EVENT呢?
DBMS_SYSTEM.READ_EV
来查看
declare
event_level number;
begin
for i in 10000..10999 loop
dbms_system.read_ev(i,event_level);
if event_level>0 then
dbms_output.put_line('EVENT '||to_char(i)||' set at level '||to_char(event_level));
end if;
end loop;
end;
/
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8188536/viewspace-1027546/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8188536/viewspace-1027546/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值