oracle的诊断事件

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

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

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

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

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

Events参数说明:

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

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

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

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

注意事项

    Events在每一个版本之间都会有所改变。有一些存在的事件可能存在争议或者已经不可用了,往往这些事件号会有新的事件所替代掉。

    很多events都会影响数据库的行为,一些测试events极有可能导致数据库down机,所以,在没有oracle support的前提下,最好不要在product系统上做events操作。

Eanbling eventsenabled事件)

1,Events可以在instance一级enabled

a, 主要是在init.ora文件中操作:Event=’事件号 trace name context forever, level 事件的级别’;

b, 使用alter system命令: alter system set events ‘事件号 trace name context forever, level 事件的级别’;

c, 使用alter system命令disable事件: alter system set events ‘事件号 trace name context off’;

2,一次可以enable多个事件,可以用以下两种方式:

  a,用一个冒号隔开

    event =‘事件号 trace name context forever,level 事件级别: 事件号 trace name context forever,level 事件级别’;

  b, 两个events分开写

    event=‘事件号 trace name context forever,level 事件级别’;

    event=‘事件号 trace name context forever,level 事件级别’;

3, session级别使用alter session命令enabledisable事件

  a, 使用alter session启用: alter session set events ‘事件号 trace name context forever, level 事件的级别’;

  b, 使用alter session停用: alter session set events ‘事件号 trace name context off’;

4, 使用oradebug命令enabledisbale事件

  a,在一个process中实现enable oradebug event 事件号 trace name context forever,level 事件的级别

  b, 在某个进程中enable oradebug setorapid 8(pid进程号)

                         oradebug event 事件号 trace name context forever, level 事件的级别

  c,在某个进程中disable oradebug event 事件号 trace name context off

  d,在session中实现enable oradebug session_event 事件号 trace name context forever,level 事件的级别

  e,在session中实现disable oradebug session_event 事件号 trace name context off

5, 使用dbms_system.setev包来实现enabledisable(需要先从v$session视图中获得SIDserial#

  aenable execute dbms_system.set_ev(SID,Serial#,event,level,’’)

  b, disable:   execute dbms_system.set_ev(SID,Serial#,event,0)

列出所有可用的events

    大部分events number的范围都在1000010999.可以使用下面的命令dump出所有的events信息。

SET SERVEROUTPUT ON

 DECLARE

     err_msg VARCHAR2(120);

  BEGIN

    dbms_output.enable (1000000);

    FOR err_num IN 10000..10999

    LOOP

     err_msg := SQLERRM (-err_num);

     IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN

       dbms_output.put_line (err_msg);

     END IF;

    END LOOP ;

 END;

 /

UNIX系统下message文件在底下目录$ORACLE_HOME/rdbms/mesg/oraus.msg

NT系统下message文件在底下目录$ORACLE_HOME/rdbms/mesg/oraus.msg

列出当前session中已经enableevents

   

转储类事件

.Memory Dumps

1).Global Area
ALTER SESSION SET EVENTS ‘immediate trace name global_area level n’;
1
包含PGA
2
包含SGA
4
包含UGA
8
包含indrect memory

2).Library Cache
ALTER SESSION SET EVENTS ‘immediate trace name library_cache level n’;
1 library cache
统计信息
2
包含hash table histogram
3
包含object handle
4
包含object结构(Heap 0

3).Row Cache
ALTER SESSION SET EVENTS ‘immediate trace name row_cache level n’;
1 row cache
统计信息
2
包含hash table histogram
8
包含object结构

4).Buffers
ALTER SESSION SET EVENTS ‘immediate trace name buffers level n’;
1 buffer header
2 level 1 + block header
3 level 2 + block contents
4 level 1 + hash chain
5 level 2 + hash chain
6 level 3 + hash chain
8 level 4 + users/waiters
9 level 5 + users/waiters
10 level 6 + users/waiters

5).Buffer
ALTER SESSION SET EVENTS ‘immediate trace name buffer level n’;
n
为某个指定blockrdba,该命令可以转储某个blockbuffer中的所有版本。

6).Heap
ALTER SESSION SET EVENTS ‘immediate trace name heapdump level level’;
1 PGA
摘要
2 SGA
摘要
4 UGA
摘要
8 Current call(CGA)
摘要
16 User call(CGA)
摘要
32 Large call(LGA)
摘要
1025 PGA
内容
2050 SGA
内容
4100 UGA
内容
8200 Current call
内容
16400 User call
内容
32800 Large call
内容

7).Sub Heap
Oracle 9.0.1
版本之前
ALTER SESSION SET EVENTS ‘immediate trace name heapdump_addr level n’;
nsubheap的地址,转储的是subheap的摘要信息
nsubheap的地址+1,转储的则是subheap的内容
Oracle 9.2.0
版本之后
ALTER SESSION SET EVENTS ‘immediate trace name heapdump_addr level n, addr m’;
其中msubheap的地址
n
1转储subheap的摘要,n2转储subheap的内容

8) .Process State
ALTER SESSION SET EVENTS ‘immediate trace name processstate level n’;

9) .System State
ALTER SESSION SET EVENTS ‘immediate trace name systemstate level n’;

10).Error State
ALTER SESSION SET EVENTS ‘immediate trace name errorstack level n’;
0 Error stack
1 level 0 + function call stack
2 level 1 + process state
3 level 2 + context area
11).Hang Analysis
ALTER SESSION SET EVENTS ‘immediate trace name hanganalyze level n’;

12).Work Area
ALTER SESSION SET EVENTS ‘immediate trace name workareatab_dump level n’;
1 SGA
信息
2 Workarea Table
摘要信息
3 Workarea Table
详细信息

13).Latches
ALTER SESSION SET EVENTS ‘immediate trace name latches level n’;
1 latch
信息
2
统计信息

14).Events
ALTER SESSION SET EVENTS ‘immediate trace name events level n’;
1 session
2 process
3 system

15).Locks
ALTER SESSION SET EVENTS ‘immediate trace name locks level n’;

16).Shared Server Process
ALTER SESSION SET EVENTS ‘immediate trace name shared_server_state level n’;
n
取值为1~14

17).Background Messages
ALTER SESSION SET EVENTS ‘immediate trace name bg_messages level n’;
n
pid+1

.File Dumps

1).Block
Oracle 7
之前
ALTER SESSION SET EVENTS ‘immediate trace name blockdump level n’;
n
blockrdba
Oracle8
以后
ALTER SYSTEM DUMP DATAFILE file# BLOCK block#;
ALTER SYSTEM DUMP DATAFILE file#
BLOCK MIN minimum_block#
BLOCK MAX maximum_block#;

2).Tree Dump
ALTER SESSION SET EVENTS ‘immediate trace name treedump level n’;
n
object_id

3).Undo Segment Header
ALTER SYSTEM DUMP UNDO_HEADER ’segment_name’;

4).Undo for a Transaction
ALTER SYSTEM DUMP UNDO BLOCK ’segment_name’ XID xidusn xidslot xidsqn;

5).File Header
ALTER SESSION SET EVENTS ‘immediate trace name file_hdrs level n’;
1
控制文件中的文件头信息
2 level 1 +
文件头信息
3 level 2 +
数据文件头信息
10 level 3

6).Control file
ALTER SESSION SET EVENTS ‘immediate trace name controlf level n’;
1
文件头信息
2 level 1 +
数据库信息 + 检查点信息
3 level 2 +
可重用节信息
10 level 3

7).Redo log Header
ALTER SESSION SET EVENTS ‘immediate trace name redohdr level n’;
1
控制文件中的redo log信息
2 level 1 +
文件头信息
3 level 2 +
日志文件头信息
10 level 3

8).Redo log
ALTER SYSTEM DUMP LOGFILE ‘FileName’;
ALTER SYSTEM DUMP LOGFILE ‘FileName’
SCN MIN MinimumSCN
SCN MAX MaximumSCN
TIME MIN MinimumTime
TIME MAX MaximumTime
LAYER Layer
OPCODE Opcode
DBA MIN FileNumber . BlockNumber
DBA MAX FileNumber . BlockNumber
RBA MIN LogFileSequenceNumber . BlockNumber
RBA MAX LogFileSequenceNumber . BlockNumber;
其中time = (((((yyyy - 1988)) * 12 + mm - 1) * 31 + dd - 1) * 24 + hh) * 60 + mi) * 60 + ss;

9).Loghist
ALTER SESSION SET EVENTS ‘immediate trace name loghist level n’;
1 dump
控制文件中最早和最迟的日志历史项
1 dump 2^n
个日志历史项

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(oracle的诊断事件)