共计 5741 个字符,预计需要花费 15 分钟才能阅读完成。
这期内容当中丸趣 TV 小编将会给大家带来有关怎么理解 ORACLE 事件跟踪,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
ORACLE 事件跟踪
Oracle 跟踪文件分为三种类型:
1:警告日志文件。记录了数据库启动、运行、关闭时的活动情况。当数据库出现问题时,首先要查看该文件,文件名为 alert_sid.log
2:后台跟踪文件。记录了 oracle 后台进程的运行状况,名称为 sid_processname_processid.trc, 存储目录为 BACKGROUND_dump_dest
3:用户跟踪文件。记录了连接到数据库的用户进程的运行信息,名称为 SID_ORA_PROCESSID.TRC, 存储目录为 USER_DUMP_DEST.
在 oracle11g 中,这三种文件位于同一目录下:
跟踪事件
设置跟踪事件,会导致 oracle 将与该事件有关的信息转储到跟踪文件中。依据设置事件的方式,可以将跟踪事件分为 2 类:PROCESS-EVENT(通过初始化参数文件设置的事件)、SESSION-EVENT(通过 alter session set events 或者 alter system set events 设置的时间)。要使 PROCESS-EVENT 事件生效,必须重新启动数据库实例,PROCESS-EVENT 事件会影响连接到数据库的每一个用户进程。在参数文件中设置多个事件可以采用“:”分隔符,如 event= event1:event2:event3。也可以依次设置多个 event,如:
event= event1
event= event2
(注意,在 event1 和 event2 之间不要存在其他参数,否则只有最后的 event 即 event2 生效)。
对不同的跟踪事件,oracle 会产生不同的行为,根据行为的不同,我们大致可以将跟踪事件分为 4 类:
1. 转储 oracle 中的某部分内容,如数据块、控制文件内容等。转储活动会在收到跟踪事件命令的同时执行。这类事件不可以通过参数文件进行设置。
2. 跟踪错误信息。设置这类事件,oracle 会将特定错误的堆栈信息转储到跟踪文件中。
3. 更改 oracle 的执行路径。这类事件会影响 oracle 代码段的执行路径,例如 10269 事件,会促使 smon 进程停止对 free-space 的合并操作。
4. 跟踪进程的相关信息。例如 10046 事件和 10053 事件。该类事件会将进程上下文中的特定信息转储到跟踪文件中。
语法格式
alter system|session set events‘[eventnumber|immediate]trace nameeventname[forever][, level levelnumber] : …….’
通过: 符号,可以连续设置多个事件,也可以通过连续使用 alter session set events 来设置多个事件。
格式说明:eventnumber 指触发 dump 的事件号,事件号可以是 Oracle 错误号或 oralce 内部事件号,内部事件号在 10000 到 10999 之间,不能与 immediate 关键字同用;immediate 关键字表示命令发出后,立即将指定的结构 dump 到跟踪文件中,这个关键字只用在 alter session 语句中,并且不能与 eventnumber、forever 关键字同用。trace name 是关键字。eventname 指事件名称(见后面),即要进行 dump 的实际结构名。若 eventname 为 context,则指根据内部事件号进行跟踪。forever 关键字表示事件在实例或会话的周期内保持有效状态,不能与 immediate 同用。level 为事件级别关键字。但在 dump 错误栈 (errorstack) 时不存在级别。levelnumber 表示事件级别号,一般从 1 到 10,1 表示只 dump 结构头部信息,10 表示 dump 结构的所有信息。
对于 alter session 设置的事件,仅仅只对当前 session 有效。对于 alter system 设置的事件,除对当前 session 有效外,对新登录的 session 同样有效,但是对于 alter system 命令执行之前打开的 session 是无效的。
IMMEDIATE 相关的事件
一.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 为某个指定 block 的 rdba,该命令可以转储某个 block 在 buffer 中的所有版本。
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
若 n 为 subheap 的地址,转储的是 subheap 的摘要信息
若 n 为 subheap 的地址 +1,转储的则是 subheap 的内容
oracle 9.2.0 版本之后
Alter SESSION SET EVENTS immediate trace name heapdump_addr level n, addr m
其中 m 为 subheap 的地址
n 为 1 转储 subheap 的摘要,n 为 2 转储 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 为 block 的 rdba
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
object_id 可以从 select object_id from user_objects where object_name = 索引的名字 得到。
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;
详细内容请看:http://blog.csdn.net/yidian815/article/details/12568027
9).Loghist
Alter SESSION SET EVENTS immediate trace name loghist level n
n=1 dump 控制文件中最早和最迟的日志历史项
n 1 dump 2^n 个日志历史项
获取诊断事件号
大部分的诊断事件的数值都是在 10000 至 10999 范围内,使用如下的脚本可以查看到所有的诊断事件:
[sql]
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;
/
上述就是丸趣 TV 小编为大家分享的怎么理解 ORACLE 事件跟踪了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。