IT技术博客大学习 共学习 共进步

dump oracle events开始篇“event定义”

ilonng 2009-10-12 10:06:12 浏览 3,902 次

我们经常会发现某些人会问如下面的这些问题:

“这个oracle块里面到底是怎么存这些数据的?”

“死锁发生的时候,我怎么知道是哪几个对象发生的死锁?”

“oracle是怎么执行这个操作的?”

“oracle的library cache是什么个样子?”

……

这个时候,可能就有人会如下的回答这样的问题:

“你dump一下这个块吧!”

“你可以设置60事件跟踪一下吧。”

“你做一个10046事件跟踪一下吧。”

“你可以dump一下内存的library cache啊。”

……

    等等如上问题,其实都只是需要dump某个oracle的event的问题。dump是一个动词,它代表一种操作,说的简单一点,拿内存举例,就是原封不动的把某一片内存给展现出来;拿跟踪举例,就是它原始的展示了oracle处理某个问题的过程等等。很显然,各位这里就有几个关键问题出现了。第一当然就是event,它是什么样子的?一共有哪些event?知道了这些event过后,那么第二我们就会问,如果来dump这些oracle的event?再之后就是,dump出来的东西以后,我们怎么来看懂这些东西?或者说这些东西是什么个含义?本文会回答第一和第二个问题,至于第三个问题,各位看官需要进程研究metalink,相信会有不少收获的。

    首先,我们就来说说event,它是什么样子的?

 

   event的定义

    event的定义很简单,可以简单的如下面这个图表示:

即event = event_name + action。这里分别来解释一下它的两个组成要素。

首先,这里的event name是一个event的名字或者是event的代码。如果event name不是“immediate”,那么oracle解析器会在event name table中找到这个event。关于immediate event,它是一个特殊的event,它显示一个立即的无条件的event,它不会等待其他人去提交它而立即执行。

其次,这里的action是什么样子呢?如下:

也就是说action是由一个action keyword和一个或者多个qualifier(值)组成。于是,我也需要来解释一下这两个部分。

这里的action keyword是如下三个值:

crash:它会引起一个oracle crash,一般是为了测试recovery的时候才用它。

debugger:调用一个系统的debugger。(invokes a system debugger if any)

trace:is context specific or named context-independent ones。

因此,我们不打算讨论crash和debugger的情况,这两个值一般是oracle的核心开发人员使用。我们这里只讨论trace的情况。

当action keyword是“trace”的时候,这里的qulifier的可如下指定:

这里有必要解释一下,它就是你需要dump的“某个对象”的“trace id”,或者就是你想要做的“某种trace”。如你想dump内存中的library cache,就是想看看内存中library cache的trace,那么这里的就是“library_cache”。

英文的表达是这样的: is a symbolic name associated with an internal trace id that is used to associate a trace with a (context-independent) debug dump operation。

这里的“context”,你可以理解成它是一种特殊的,顾名思义,他是dump“内容”。

这里的3个trace qualifiers含义分别是:

“forever”:表示这个trace一旦设定,每当这个event发生的时候,就激活这个trace。

“off”:表示对这个event关闭这个trace。

“level ”:当event发生的时候,你想要trace的级别,每个trace的级别的取值是都是不一样的,它一个非负整数。通常情况下,它的值越大,就会有更多的内容显示,但是如果你是做某个块的dump,这里的level就是data block address(dba)。

综上所述,event可大概的如下表示为:

event_name CRASH    ....

event_name DEBUGGER ....

event_name TRACE    NAME trace_name|CONTEXT  [ FOREVER|OFF|LEVEL ]

这个里面“|”表示“或者”,“[]”表示出现一次或者多次。

    上面已经清楚的介绍了event的结构,回答了event是什么?它是什么样子?的问题。

那么在oracle中一共有哪些event呢?oracle中的event有很多个,具体有哪些,在unix或者类unix系统中,可在文件“$ORACLE_HOME/rdbms/mesg/oraus.msg”中查看。在大体上面,event可以分为四类,,并且如何来设置这四类event呢?下面就来说说这个问题。

 

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

未完待续……

请看下篇:dump oracle events中间篇“event的分类与dump”

建议继续学习

  1. Java heap dump触发和分析 (阅读 8,143)
  2. dump oracle events中间篇“event的分类与dump” (阅读 4,263)
  3. 从dump文件中抽取部分库表 (阅读 3,501)
  4. Android安全–一次简单的脱壳Dump dex实践 (阅读 3,381)
  5. dump oracle events过渡篇“events知多少” (阅读 2,900)
  6. oracle跟踪事件(dump)总结 (阅读 2,880)
  7. core dump磁盘报警问题排查过程 (阅读 2,221)