全面介绍Oracle的诊断事件

2016-02-19 14:50 2 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的全面介绍Oracle的诊断事件,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

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

    一、Event的通常格式及分类 

    1、 通常格式如下:

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   2、 Event分类

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

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

    3、 说明:

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

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

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

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

  跟踪类别

  事件名称

  动作 (Action)

  Name

  跟踪项目

  范围限定

  转储类事件

  immediate

  Trace

  name

  blockdump

  redohdr

  file_hdrs

  controlf

  systemstate

  Level block#

  Level 10

  Level 10

  Level 10

  Level 10

  捕捉类事件

  Error number

  Trace

  name

  Error stack

  processstate

  Heapdump

  Foreve

  Off

  Level nr

  改变执行途径类事件

  Even code corresponding to path

  Trace

  name

  Context

  Forever or

  Level 10

  跟踪类事件

  10046

  Trace

  name

  Context

  Forever

  Level n

  off

    二、说一说设置的问题了

  可以在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

  SQLselect username, sid, serial#, paddr from v$session where username='qiuyb';

  USERNAME SID SERIAL# PADDR

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

  HRB3 265 910 C000000084435AD8

  SQLSELECT ADDR,PID,SPID FROM V$PROCESS WHERE ADDR= C000000084435AD8';

  ADDR PID SPID

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

  C000000084435AD8 91 4835

  b. 设置事件,以10046为例

  sqlplus /nolog

  SQLconnect / as sysdba;

  SQLoradebug setospid 4835

  SQLoradebug unlimit   --不限制转储文件的大小

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

  SQL oradebug event 10046 trace name context off --关闭跟踪

  注意不要用oradug去跟踪oracle的smon,pmon等几个进程,操作不当可能会杀掉这几个后台进和引起宕库。

    三、你可能的问题  

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

  回答:

  a. 如果你的事件是在init.ora中设置的可以用

  SQLshow parameter event;

  来查看

  b. Michael R.Ault给的SQL

  serveroutput on size 1000000

  declare

  event_level number;

  begin

  for i 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 name context forever, level 12' scope=spfile;

  重启一下就生效了。

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

  回答:

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

  a.由spfile生成pfile

  SQLcreate pfile from spfile;

  File created.

  b.编辑pfile以修正错误

  Change... *.event='10046 trace name conetxt forever, level 12'

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

  c.用pfile启动

  SQLstartup pfile=/.....

  d.重新生成 SPFILE.

  SQLcreate spfile from pfile;

  File created.

来源:http://www.tulaoshi.com/n/20160219/1608111.html

延伸阅读
Oracle数据安全面面观 作者:づ★sl战神     随着计算机的普及以及网络的发展,数据库已经不再仅仅是那些程序员所专有的话题。而Oracle数据库更是凭借其性能卓越,操作方便灵活的特点,在数据库的市场中已经占据了一席之地。但是同样随着网络技术的不断进步,数据信息的不断增加,数据安全已经不再是...
标签: 怀孕
胎儿生长受限(intrauterine fetal growth re-striction, FGR)临床定义为:由于病理原因造成的出生体重低于同孕龄、同性别胎儿平均体重的两个标准差或第10百分位数,或孕37周后胎儿出生体重小于2500g;实质上是胎儿的生长没有达到他们遗传的全部潜能。FGR与死胎、新生儿死亡和围产期新生儿病率及远期影响(脑瘫及成人疾病)相关。FGR的发病与...
随着计算机的普及以及网络的发展,数据库已经不再仅仅是那些程序员所专有的话题。而Oracle数据库更是凭借其性能卓越,操作方便灵活的特点,在数据库的市场中已经占据了一席之地。 但是同样随着网络技术的不断进步,数据信息的不断增加,数据安全已经不再是以前的“老生长谈”,也更不是以前书本上那些“可望不可及”的条条框框。 ...
为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突。为了解决这个问题,大多数数据库用的方法就是数据的锁定。 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁。什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把...
COM 中的典型方案是让客户端对象实例化服务器对象,然后调用这些对象。然而,没有一种特殊机制的话,这些服务器对象将很难转向并回调到客户端对象。COM 连接点便提供了这种特殊机制,实现了服务器和客户端之间的双向通信。使用连接点,服务器能够在服务器上发生某些事件时调用客户端。 原理如下图: 有了连接点,服务器可通过定义一...

经验教程

285

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部