全面介绍Oracle的诊断事件

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

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

【 tulaoshi.com - 编程语言 】

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

    一、Event的通常格式及分类 

    1、 通常格式如下:

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

   2、 Event分类

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

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

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

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

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

    3、 说明:

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

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

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

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

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

  跟踪类别

  事件名称

  动作 (Action)

  Name

  跟踪项目

  范围限定

  转储类事件

  immediate

  Trace

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

  name

  blockdump

  redohdr

  file_hdrs

  controlf

  systemstate

  Level block#

  Level 10

  Level 10

  Level 10

  Level 10

  捕捉类事件

  Error number

  Trace

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

  name

  Error stack

  processstate

  Heapdump

  Foreve

  Off

  Level nr

  改变执行途径类事件

  Even code corresponding to path

  Trace

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

  name

  Context

  Forever or

  Level 10

  跟踪类事件

  10046

  Trace

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

  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.

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

延伸阅读
Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后。 Android的Touch事件处理分3个层面:Activity层,ViewGroup层,View层。 首先说一下Touch事件处理的几条基本规则。 如果在某个层级没有处理ACTION_DOWN事件,那么该层就再也收不到后续的Touch事件了直到下一次ACTION_DOWN事件。 说明: a.某个层级没有处...
标签: 怀孕
胎儿生长受限(intrauterine fetal growth re-striction, FGR)临床定义为:由于病理原因造成的出生体重低于同孕龄、同性别胎儿平均体重的两个标准差或第10百分位数,或孕37周后胎儿出生体重小于2500g;实质上是胎儿的生长没有达到他们遗传的全部潜能。FGR与死胎、新生儿死亡和围产期新生儿病率及远期影响(脑瘫及成人疾病)相关。FGR的发病与...
随着计算机的普及以及网络的发展,数据库已经不再仅仅是那些程序员所专有的话题。而Oracle数据库更是凭借其性能卓越,操作方便灵活的特点,在数据库的市场中已经占据了一席之地。 但是同样随着网络技术的不断进步,数据信息的不断增加,数据安全已经不再是以前的“老生长谈”,也更不是以前书本上那些“可望不可及”的条条框框。 ...
1、应用开发(Application Development) SQL*Plus E:OracleOra81BINSQLPLUSW.EXE 2、数据库管理(Database Administration) Database Configuration Assistant 数据库配置助手:创建、配置、删除数据库 DBA Studio 将多个数据库工具并入一个应用程序中。DBA Studio 管理以下对象: 例 程:包括启动...
为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突。为了解决这个问题,大多数数据库用的方法就是数据的锁定。 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁。什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把...

经验教程

247

收藏

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