oracle诊断事件

OracleRDBMS提供了多种的诊断工具,诊断事件(Event)是其中一种常用、好用的方法,它使DBA可以方便的转储数据库各种结构及跟踪特定事件的发生.

一、Event的通常格式及分类

 1通常格式如下:

 EVENT="<事件名称><动作><跟踪项目><范围限定>"

2Event分类

诊断事件大体上可以分为四类:

a转储类事件:它们主要用于转储Oracle的一些结构,例如转储一下控制文件、数据文件头等内容。

      b捕捉类事件:它们用于捕捉一些Error事件的发生,例如捕捉一下ORA-04031发生时一些Rdbms信息,以判断是Bug还是其它原因引起的这方面的问题。

      c改变执行途径类事件:它们用于改主一些Oracle内部代码的执行途径,例如设置10269将会使Smon进程不去合并那些Free的空间。 

d跟踪类事件:这们用于获取一些跟踪信息以用于Sql调优等方面,最典型的便是10046了,将会对Sql进行跟踪。 

3说明

a如果immediate放在第一个说明是无条件事件,即命令发出即转储到跟踪文件。 

btrace name位于第二、三项,除它们外的其它限定词是供Oracle内部开发组用的。

c  level通常位于1-10之间(10046有时用到12)10意味着转储事件所有的信息。例如当转储控制文件时,level1表示转储控制文件头,而level 10表明转储控制文件全部内容。 

d转储所生成的trace文件在user_dump_dest初始化参数指定的位置。 

二、说一说设置的问题了

可以在init.ora中设置所需的事件,这将对所有会话期打开的会话进行跟踪,也可以用alter session set event 等方法设置事件跟踪,这将打开正在进行会话的事件跟踪。 

1、init.ora中设置跟踪事件的方法

a.    语法EVENT=”event 

语法|,level n|event 语法|,level n|…” 

b举例 

event=”10231 trace name context forever,level 10’ 

c可以这样设置多个事件: 

EVENT="\ 10231 trace name context forever, level 10:\ 10232 trace name context forever, level 10"  

2通过Alter session/system set events这种方法, 举个例子大家就明白了

Example: 

Alter session set events ‘immediate trace name controlf level 10’;  

Alter session set events ‘immediate trace name blockdump level 112511416’; 

(*) 

oracle8x及之上的版本也有这样的语句:  Alter system dump datafile 13 block 15;

实现的功能与(*)是类似的。

3使用DBMS_SYSTEM.SET_EV的方法 

a过和定义如下 

DBMS_SYSTEM.SET_EV( SI Binary_integer, SE Binary_integer, EV Binary_integer, LE Binary_integer, NM Binary_integer);  

SI  v$session中的sid 

SE:v$session中的serial# 

EV:要设置的事件 

LE:要设置事件的级别NM:名称 

b举个例子,以10046为例 

SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid,serial#,10046,12,'') 

4使用Oradebug来设置诊断事件的方法 

同样举个例子大家就明白了: 

a.找到spid 

SQL>select username, sid, serial#, paddr from v$session where username='qiuyb'; 

USERNAME  SID  SERIAL#  PADDR 

------------------------------------------------------- 

HRB3  265   910  C000000084435AD8 

SQL>SELECT ADDR,PID,SPID FROM V$PROCESS WHERE ADDR= C000000084435AD8'; 

ADDR   PID     SPID 

------------------------------------------ 

C000000084435AD8 91  4835 

 b设置事件,以10046为例 

sqlplus /nolog 

SQL>connect / as sysdba;

 

SQL>oradebugsetospid 4835      

SQL>oradebugunlimit  --不限制转储文件的大小 

SQL>oradebug event 10046 trace name context forever,level 12 --设置事件进行sql跟踪   

SQL>oradebug event 10046 trace name context off --关闭跟踪  注意不要用oradug去跟踪oraclesmon,pmon等几个进程,操作不当可能会杀掉这几个后台进和引起宕库。  

三、你可能的问题   

1、 我如何知道在系统中设置了哪些event?

回答: 

a. 如果你的事件是在init.ora中设置的可以用 SQL>show parameter event;来查看 

bMichael R.Ault给的SQL serveroutput on size 1000000declare  event_level number; begin fori in 10000..10999 loop sys.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;/   

2、 在oracle9i中使用spfile的那种如何设置诊断事件呢?

回答: 

简单,Alter system命令就可以完成 alter system set event='10046 trace namecontext forever, level 12' scope=spfile; 重启一下就生效了。   

3、坏了,我的9i设置完诊断事件,起不来了,报ORA-02194错怎么办?

回答: 

那你一定是在使用Alter system时把某一项写错了,比如把context写成了conetxt了,可以做如下的解决:

a.由spfile生成pfile    S

SQL>createpfile from spfile;    

Filecreated.   

b.编辑pfile以修正错误 

Change... *.event='10046 trace name conetxtforever, level 12'    -to-      *.event='10046 trace name context forever, level 12' 

c.用pfile启动     

SQL>startuppfile=/..... 

d.重新生成 SPFILE.     

SQL>createspfile from pfile;    

Filecreated.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值