使用ORACLE诊断事件(1):打开事件跟踪的方法

原创 2004年06月30日 14:23:00

OracleRDBMS提供了多种的诊断工具,诊断事件(Event)是其中一种常用、好用的方法,它使DBA可以方便的转储数据库各种结构及跟踪特定事件的发生。使用这些事件也不是件很高深的学问,举例来说10046这个Event你也一定用过吧,如下的几篇文章我将围绕Event展开一些讨论,不对的地方大家就告诉我:qiuyb@21cn.com,本篇主要谈论一下打开诊断事件的方法。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

一、Event的通常格式及分类

 

1、  通常格式如下:

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

 

2、  Event分类

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

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

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

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

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

 

3、  Michael R. Ault总结了下表:

跟踪类别

事件名称

动作(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

 

4、 其它说明:

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

b. trace 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,

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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>oradebug setospid 4835    

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

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;

来查看

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

   SQL>create 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启动

   SQL>startup pfile=/.....

d.重新生成 SPFILE.

   SQL>create spfile from pfile;

   File created.

 

4、 常用的诊断事件有哪些,如何设置及功能如何?

这些我会在后后面的文章中提到。

 

文章参照文档:

1、Michael R.Ault写的"Using Oracle Events"这篇文章

2、Metalink的Note:168042.1 

 

(待续)

Oracle的10046事件跟踪简述

通常情况下,10046事件是不被推荐的,因为如果你面前需要处理的这个实例的性能是比较差的话,10046事件追踪,可能会让你的实例性能更加糟糕。通常情况下我们按照实际的业务情况获取一段时间的AWR报告就...
  • ziwen00
  • ziwen00
  • 2013年07月10日 00:29
  • 3658

Oracle 跟踪事件 set event

一、Oracle跟踪文件 Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动、关闭和运行期间后台进程的活动情况,如表空间创建、回滚段创建、某些alter命令、日志切换、错误消息...
  • tianlesoftware
  • tianlesoftware
  • 2009年12月10日 10:44
  • 12595

Oracle跟踪事件 -- set events

一、Oracle跟踪文件Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动、关闭和运行期间后台进程的活动情况,如表空间创建、回滚段创建、某些alter命令、日志切换、错误消息等...
  • hailang99
  • hailang99
  • 2007年10月12日 13:06
  • 2188

oracle 跟踪事件 set event

一、Oracle跟踪文件 Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动、关闭和运行期间后台进程的活动情况,如表空间创建、回滚段创建、某些alter命令、日志切换、错误消...
  • zhengwei125
  • zhengwei125
  • 2016年02月25日 18:11
  • 782

oracle EVENT事件

七. 设置Events事件 Events事件是Oracle的重要诊断工具及问题解决办法,很多时候需要通过Events设置来屏蔽或者更改Oracle的行为,下面我们来看一下怎样修改spfile,增加E...
  • huyangg
  • huyangg
  • 2012年11月25日 12:22
  • 772

用SQL Server事件探查器创建跟踪

SQL Server事件探查器(Profiler)可以帮助数据库管理员跟踪SQL Server数据库所执行的特定事件,监视数据库的行为;并将这些有价值的信息保存到文件或表,以便以后用来分析解决数据库出...
  • monmobear053
  • monmobear053
  • 2014年05月25日 15:34
  • 2036

SQL Sever 2005 事件跟踪器:保存死锁图形(图文)

l 使用SQL Server 2005事件跟踪器 保存Deadlock Graph事件 l Deadlock Graph事件以XML文件形式保存。 保存Deadlock Graph事件 1、在...
  • bobwu
  • bobwu
  • 2015年01月07日 20:52
  • 1591

ORACLE EVENT事件跟踪

设置10035事件 SQL> exec dbms_workload_repository.create_snapshot();   PL/SQL procedure successfully...
  • mchdba
  • mchdba
  • 2016年09月03日 05:58
  • 1386

oracle的诊断事件

诊断事件大体上可以分为四类: a.  转储类事件(immediate dumps):它们主要用于转储Oracle的一些结构,例如转储一下控制文件、数据文件头等内容。 b.  捕捉类事件(conditi...
  • 47522341
  • 47522341
  • 2008年11月14日 10:04
  • 945

ORACLE追踪应用执行sql语句——10046事件

介绍: Oracle的10046事件,可以跟踪应用程序所执行的SQL语句,并且得到其解析次数.执行次数,CPU使用时间等信息。这对我们分析、定位数据库性能问题是非常有用的。 10046event是or...
  • yongyong169
  • yongyong169
  • 2017年12月12日 11:25
  • 66
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用ORACLE诊断事件(1):打开事件跟踪的方法
举报原因:
原因补充:

(最多只允许输入30个字)