XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx

上传人:b****5 文档编号:11568966 上传时间:2023-03-19 格式:DOCX 页数:29 大小:33.14KB
下载 相关 举报
XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx_第1页
第1页 / 共29页
XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx_第2页
第2页 / 共29页
XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx_第3页
第3页 / 共29页
XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx_第4页
第4页 / 共29页
XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx

《XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx》由会员分享,可在线阅读,更多相关《XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx(29页珍藏版)》请在冰豆网上搜索。

XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号.docx

XXXX1012Oracle数据库诊断事件详解如何获取所有内部事件号

XXXX1012-Oracle数据库诊断事件详解(如何获取所有内部事件号)

什么是Oracle数据库的诊断事件呢?

简而言之的来说Oracle的诊断事件确实是Oracle数据库中用于实现一些专门功用的类别,一样要紧用于实现以下几个方面的功用:

Ø改变Oracle数据库的行为

Ø启用收集Oracle数据库的跟踪或者调试信息

Ø启用对Oracle数据库的额外的错误检测

4[]5r/Rd\0

一、Oracle数据库诊断事件简介ITPUB个人空间

K$~g,raNVkeC'G

什么是Oracle数据库的诊断事件呢?

简而言之的来说Oracle的诊断事件确实是Oracle数据库中用于实现一些专门功用的类别,一样要紧用于实现以下几个方面的功用:

pL8z%I6?

&dj

Z$Z3F0Ø改变Oracle数据库的行为

uR.|5d;\+_V\4f*OUD0Ø启用收集Oracle数据库的跟踪或者调试信息ITPUB个人空间,\�].A%ct8mh4b

Ø启用对Oracle数据库的额外的错误检测

如何去设置Oracle数据库的各种诊断事件呢?

我们第一来给设置诊断事件下一个简单的定义,确实是让Oracle数据库产生跟踪信息日志文件。

设置诊断事件有如下的四种方法:

ITPUB个人空间t\]@"])R$l}

Ø在INIT或者SPFILE初始化文件中设置ITPUB个人空间sv}8O[N}y`1S6K

这种设置的诊断事件差不多上针关于整个实例的:

ITPUB个人空间X:

O/A4a|s&y

event='eventtracenamecontextforever,levellevel';ITPUB个人空间ZJy+x�F!

A

假如需要设置多个诊断事件,能够通过以下两种方法:

ITPUB个人空间gX|)O,Q*H

方法一:

使用冒号分隔开两个诊断事件

A'n

j}8F0event="10248tracenamecontextforever,level10:

10249tracenamecontextforever,level10"

4@+NQ@c7l0mO-p0方法二:

使用连续的行设置诊断事件ITPUB个人空间vA,[d

W@;A5E!

ZW

event="10248tracenamecontextforever,level10"ITPUB个人空间!

BQ

vmGm

event="10249tracenamecontextforever,level10"ITPUB个人空间p#|W(I/nQC0F,afYz

Ø在当前SQL会话中设置

'N8l#q*@SBT"}&F0针对整个实例的诊断事件的设置:

%?

k�EX.?

zHn0ALTERSYSTEMSETEVENTS'eventtracenamecontextforever,levellevel';ITPUB个人空间@"W2Ez*y3A5U

~

禁用设置的诊断事件:

ITPUB个人空间4dwbn\FSr

ALTERSYSTEMSETEVENTS'eventtracenamecontextoff';

fM-s6T

I6nY0针对当前会话的诊断事件的设置:

_5{1}Kt!

v"r0ALTERSESSIONSETEVENTS'eventtracenamecontextforever,levellevel';ITPUB个人空间z:

`y)s&TJ

禁用设置的诊断事件:

$QZZ"\~q0ALTERSESSIONSETEVENTS'eventtracenamecontextoff';ITPUB个人空间T4y;l;BU8[b|

Ø在另外一个SQL会话中使用DBMS_SYSTEM.SETEV储备过程设置ITPUB个人空间c9k:

h%ox.H.KF

EXECUTEsys.dbms_system.set_ev(sid,serial#,,,'')ITPUB个人空间'k&G#mIQ

其中的SID,SERIAL#差不多上从视图V$SESSION中获得的。

G4tMunk

Q)S0Ø在另外一个会话中使用debug工具设置

}cRD5T7J&JW0对一个进程设置诊断事件:

8}%Tv}&qC�Q/R+\3g4B#x"R0ORADEBUGEVENTeventTRACENAMECONTEXTFOREVER,LEVELlevelITPUB个人空间%nN-j;h!

cbL$?

禁用设置的诊断事件:

ITPUB个人空间iTI

M3hf

ORADEBUGEVENTeventTRACENAMECONTEXTOFFITPUB个人空间&hs/o\w$B9wYM\

对一个会话设置诊断事件:

ITPUB个人空间@x"z*WR

ORADEBUGSESSION_EVENTeventTRACENAMECONTEXTFOREVER,LEVELlevel

0Xs;}qyb\0禁用设置的诊断事件:

)nnf4ct}r0ORADEBUGSESSION_EVENTeventTRACENAMECONTEXTOFF

注:

在Oracle8i以上的版本中,是使用sysdba权限的用户登陆sqlplus后执行ORADEBUG命令;在Oracle7.3/8.0的版本中,是使用internal用户登陆svrmgrl后执行ORADEBUG命令;在更早的Oracle版本中使用ORADBX(ORAMBX在VMS系统上)。

因为oradebug承诺在另外的会话中设置诊断事件,如此就能够跟踪一些平常不太trace的会话,例如对export工具的诊断。

诊断事件能够分成会话级的诊断事件和进程级的诊断事件,进程级的诊断事件是能够在INIT初始化参数文件中设定,会话级的诊断事件那么能够使用"altersession..."或者"altersystem..."命令来设定。

Oracle数据库在检测诊断事件的时候差不多上先检测会话级的诊断事件,然后再检测进程级的诊断事件。

关于设置Oracle数据库的诊断事件都必须遵循一定的语法,例如在会话级别上设置诊断事件能够按照以下的语法来设置:

;[)JKk4Yt0altersessionsetevents'10181tracenamecontextforever,level1000';ITPUB个人空间7uD4q*s;y6q

而同样的诊断事件在INIT初始化参数文件中就应该按照以下语法设置:

4NS,@@`zCr9k0event="10181tracenamecontextforever,level1000"ITPUB个人空间y$rz6J"z*^"Z|'\e

在INIT初始化参数文件中设置诊断事件的时候,一样来说最好在诊断事件后加上相关的注释,注释的内容一样来说应该包括诊断事件的作用、什么缘故要使用那个诊断事件以及设置诊断事件的时刻。

ITPUB个人空间&L"s.n2eT9Rr?

N"x-X2^#k

下面那个图是关于设置诊断事件的语法表:

ITPUB个人空间#D8V8M-v,Tbbx

JOE*M!

i*pj0诊断事件规定的语法为:

ITPUB个人空间f"^D_@)FwB

{:

}*

'qo

h0VX%\0EventName:

它代表关联事件的符号名或者是一个事件号。

假如是immediate,代表是一个赶忙无条件的诊断事件,不用去等待任何人公布它;也能够是指定的Oracle错误号码,还能够是具体的事件名。

RvI_#ie4?

\4UP0Action:

分为和。

ActionKeyWord的值能够是trace、debugger、crash,而qualifiers的语法那么是依靠于具体的Action。

ITPUB个人空间qe2ft:

T,P

Ø当为crash的时候,语法为:

ITPUB个人空间}y2||

nY)_?

S;f_

""(默认为空)|"off"(在等待事件中禁用crash)|"aftertimes"(发生此事件N次后crash)

N/uhi;As0Ø当为debugger的时候,语法为:

rO6O)Nx{!

G0""(默认为空)|"off"(在等待事件中禁用debugger)|"aftertimes"(发生此事件N次后debugger)|"forever"(一旦开始debugger,以后每次发生事件时都要debugger)|"lifetime"(一旦开始debugger,以后N次发生事件时都要debugger,然后在此诊断事件中禁用debugger)

b#[DXH'rH0Ø当为trace的时候,语法为:

L7m�WA4T&q5sH0"name"{,}*ITPUB个人空间

K6A8VkT9p

TraceName:

是关联内部trace号的符号名。

其中,context是一种专门的tracename,它可不能去调用调试dump操作,然而却会返回给发起诊断事件者是否context跟踪被激活,跟踪是什么级别的。

跟踪的级别是指dump程序内部使用来操纵dump出来详细信息的级别,通常来说,级别越高,dump出来的信息就会越详细,最低级别是1。

All是另外一种专门的tracename,它意味着通过"ksdtradv"宏在编译的时候声明所有的tracenames。

假如在诊断事件中关联余外一个以上的trace,至少有一个应该是context,相应的,诊断事件中最后一个关联的动作将返回跟踪的级别,而且在不同的调用中诊断事件号最好唯独。

ITPUB个人空间!

{

@4VpL2kW

tracequalifier的语法为:

ITPUB个人空间,tz;K-LR}*B4D

Wq

""(默认为空)|"off"(在等待事件中禁用那个trace)|"aftertimes"(发生此事件N次后开始trace)|"forever"(一旦激活trace,以后每次发生事件时都要trace)|"lifetime"(一旦开始trace,以后N次成功发生事件时都要trace,然后在此诊断事件中禁用trace)|"level"(当trace第一次被激活,设置初始化级别为N,之后激活的trace的级别那么由tracetype来决定)|"type"(如何修改以后激活的trace的级别)

l6H�Rv2e7wR\^0tracetype:

ITPUB个人空间F2E2m

Hq*i;]}

"increment"升高级别直至最高

xvCqg9_2Q0"decrement"降低级别到0同时禁用

VfQ

I

h?

+C0"constant"保持级别不变ITPUB个人空间x

\K(bLmJ$bh:

i

此外,关于trace的指定,假如设置诊断事件是immediate,那么意味着trace将可不能等待诊断事件,在tracequalifier中只需要设置trace的级别,lifetime默认为1。

关于设置诊断事件,Oracle数据库提供了四个跟踪信息的类别能够供我们来使用:

ITPUB个人空间1ij5Cle

U"hW)hm1G

Ø类别一:

DumpSomethingITPUB个人空间�t7Mud�w9l!

Z-h

那个类别的Trace文件是无条件赶忙生成的,一样差不多上dump出Oracle数据库的数据,例如查看重做日志文件的头或者是查看操纵文件中的内容等。

这类的诊断事件是不能够在INIT或者SPFILE的初始化参数文件中指定的。

ITPUB个人空间Kc&kh&PfWX

B

Ø类别二:

TraponError

3C/d

LNw~-^sqO0那个类别的诊断事件是让Oracle每次生成一个errorstack的错误信息的trace文件。

!

r1d

M8r;Ve�d0Ø类别三:

ChangeexecutionpathITPUB个人空间IF]

d�A(T[

那个类别的诊断事件要紧是用于修改某些代码段的可执行路径。

例如,设置诊断事件10269就能够让Oracle数据库的后台SMON进程不再进行自由空间的重组的操作。

:

P\2Q5cb9I[.r0Ø类别四:

TracesomethingITPUB个人空间l]9CFZ

J&vv

那个类别的诊断事件要紧是用于某种专门的目的而需要猎取相应的trace信息,例如对sql调优。

最常见的诊断事件10046确实是让Oracle数据库去跟踪每条执行的sql语句的访问路径。

ITPUB个人空间H:

g�x/T*||[

每种类别的诊断事件都有一种或者多种级别,级别有以下四种表现形式:

ITPUB个人空间P#W_{dF*uJ

ØRange,例如从1到10ITPUB个人空间%~;p!

kPu5K:

W)_:

]Q&bY

Øbitmask例如0x010x020x040x080x10

+ok�d_Tk{0Øflag例如0代表off,1代表onITPUB个人空间7r

Xpn�_#\$u&F

k

Øidentifier例如objectid,memoryaddress等等

在设置使用各种诊断事件的时候,有一些事项是需要注意的:

Z;L/}8Tmz!

GC`|0Ø确定使用的诊断事件关于当前的Oracle数据库版本是合法的:

因为关于不同版本的Oracle数据库来说,诊断事件的含义和用法都有所不同。

ITPUB个人空间}8e*_R0J

Ø确定使用的诊断事件承诺设定的级别,在专门多时候设定的级别不同是会阻碍到诊断事件所代表的行为的。

.MwSJq$ue&z8u

?

0Ø在INITSID.ORA文件中设置的任何诊断事件,假如Oracle数据库需要升级,一定要提早注释或者取消。

ITPUB个人空间

C+W}&j'pr9W

ITPUB个人空间[#@HC7p1C`

大部分的诊断事件的数值差不多上在10000至10999范畴内,使用如下的脚本能够查看到所有的诊断事件:

ITPUB个人空间Q

};m

qguM

s

w1D

SETSERVEROUTPUTON

9N^&l

k0ZIo0DECLAREITPUB个人空间U,P&R

O:

M\

err_msgVARCHAR2(120);

T-s!

I&_�h0S0iq#V"H0BEGINITPUB个人空间)I*s!

Ef4j3i

n"_u-|

dbms_output.enable(1000000);ITPUB个人空间1O%BL*u2Ck~1^

FORerr_numIN10000..10999ITPUB个人空间*m`WYHvLmS

LOOP

#hn8t.QZO-O0err_msg:

=SQLERRM(-err_num);

p~CJf.N&y0IFerr_msgNOTLIKE'%Message'||err_num||'notfound%'THEN

.Gd?

*V2_,`K)R)l/}0dbms_output.put_line(err_msg);ITPUB个人空间'b|L1F6u.i

ENDIF;

Fm8q#w7\UX3X+_0ENDLOOP;

HC%f*N)oAX0END;

OO8w7~y}MOq%h0/ITPUB个人空间

Y6?

4|^%C6SX+`#U

在UNIX系统中,能够在$ORACLE_HOME/rdbms/mesg/oraus.msg那个文件中找到所有的诊断事件的名称和定义。

使用如下脚本能够输出所有的详细的诊断事件的信息:

ITPUB个人空间%_5Acu/r[`P

event=10000

*WA%q%a'y

P�[$m!

U0while[$event-ne10999]

]}

pc;ZrEkbr0doITPUB个人空间gov4Z4C"~

event=`expr$event+1`

2v/\*K5Km0O8N0oerrora$eventITPUB个人空间,[#Va4Z0Av%^^$V

done

使用如下脚本能够检查当前会话中设置了哪些诊断事件:

W%Y/BMG:

i@0SETSERVEROUTPUTON

i-?

HF_r@~P0DECLAREITPUB个人空间~&gmC)L)g#k

l_levelNUMBER;ITPUB个人空间FZ7[2A&z

Lw

BEGINITPUB个人空间$Sko

E"BI

FORl_eventIN10000..10999ITPUB个人空间9a6sVsT,r7u

F

LOOP

!

h0Bn^l)B({0dbms_system.read_ev(l_event,l_level);

9g1T,pA*d3C0IFl_level>0THEN

ca,O+]%xE0dbms_output.put_line('Event'||TO_CHAR(l_event)||

*d%Gp0r0],DP0'issetatlevel'||TO_CHAR(l_level));

r-WQ$aqk6YC0ENDIF;ITPUB个人空间y)b!

{MU,Q

ENDLOOP;ITPUB个人空间]1EkU@-d,XYh2R9m

END;ITPUB个人空间k#v0f�Z#s2J;RB

/

 

大部分的诊断事件的数值差不多上在10000至10999范畴内,使用如下的脚本能够查看到所有的诊断事件:

SETSERVEROUTPUTON

DECLARE

err_msgVARCHAR2(120);

BEGIN

dbms_output.enable(1000000);

FORerr_numIN10000..10999

LOOP

err_msg:

=SQLERRM(-err_num);

IFerr_msgNOTLIKE'%Message'||err_num||'notfound%'THEN

dbms_output.put_line(err_msg);

ENDIF;

ENDLOOP;

END;

/

ORA-10000:

controlfiledebugevent,name'control_file'

ORA-10001:

controlfilecrashevent1

ORA-10002:

controlfilecrashevent2

ORA-10003:

controlfilecrashevent3

ORA-10004:

blockrecoverytesting-internalerror

ORA-10005:

tracelatchoperationsfordebugging

ORA-10006:

blockrecoverytesting-externalerror

ORA-10007:

logswitchdebugcrashafternewlogselect,thread

ORA-10008:

logswitchdebugcrashafternewlogheaderwrite,thread

ORA-10009:

logswitchdebugcrashafteroldlogheaderwrite,thread

ORA-10010:

BeginTransaction

ORA-10011:

EndTransaction

ORA-10012:

AbortTransaction

ORA-10013:

InstanceRecovery

ORA-10014:

RollBacktoSavePoint

ORA-10015:

UndoSegmentRecovery

ORA-10016:

UndoSegmentextend

ORA-10017:

UndoSegmentWrap

ORA-10018:

DataSegmentCreate

ORA-10020:

partiallinkrestoredtolinkedlist(KSG)

ORA-10021:

KSTeventtotracecontrolfileheaderwritesandreads

ORA-10022:

tracektsgsp

ORA-10023:

CreateSaveUndoSegment

ORA-10024:

WritetoSaveUndo

ORA-10026:

ApplySaveUndo

ORA-10027:

SpecifyDeadlockTraceInformationtobeDumped

ORA-10028:

Dumptraceinformationduringlock/resourcelatchcleanup

ORA-10029:

sessionlogon(KSU)

ORA-10030:

sessionlogoff(KSU)

ORA-10031:

sortdebugevent(S*)

ORA-10032:

sortstatistics(SOR*)

ORA-10033:

sortruninformation(SRD*/SRS*)

ORA-10035:

Writeparsefailurestoalertlogfile

ORA-10036:

createremoterowsource(QKANET)

ORA-10037:

allocateremoterowsource(QKARWS)

ORA-10038:

dumprowsourcetree(QBADRV)

ORA-10039:

typechecking(OPITCA)

ORA-10041:

dumpundorecordsskipped

ORA-10043:

checkconsistencyofowner/waiter/converterlistsinKSQ

ORA-10044:

freelistundooperations

ORA-10045:

freelistupdateoperations-ktsrsp,ktsunl

ORA-10046:

enableSQLstatementtiming

ORA-10047:

traceswitchingofsessions

ORA-10048:

Undosegmentshrink

ORA-10049:

protectlibrarycachememoryheaps

ORA-10050:

snipertrace

ORA-10051:

traceOPIcalls

ORA-10052:

don'tcleanupobj$

ORA-10053:

CBOEnableoptimizertrace

ORA-10056:

dumpanalyzestats(kdg)

ORA-10057:

suppressfilenamesinerrormessages

ORA-10058:

usetablescancostintab$.spare1

ORA-10059:

simulateer

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1