Table of Contents
- 1. 简介
- 2. 查看dump文件
- 3. 格式说明
-
4. dump结构
-
4.1. Memory Dumps
- 4.1.1. Global Area
- 4.1.2. Library Cache
- 4.1.3. Row Cache
- 4.1.4. Buffers
- 4.1.5. block Buffer version
- 4.1.6. Heap
- 4.1.7. Sub Heap
- 4.1.8. Process State
- 4.1.9. System State
- 4.1.10. Error State
- 4.1.11. Hang Analysis
- 4.1.12. Work Area
- 4.1.13. Latches
- 4.1.14. Events
- 4.1.15. Locks
- 4.1.16. Shared Process
- 4.1.17. Background Messages
- 4.2. File Dumps
-
4.1. Memory Dumps
- 5. dump error或者更改数据库行为
1 简介
Oracle 为了方便分析问题,针对每个进程,每个错误信息都设置了相对应的追踪事件(events). 这些events, 可以将相关的内存堆栈信息以及执行过程进行追踪并输出到文件,以便在出现问题时进行分析。
事件的设置有两种层次: 实例层次(system) 和 会话层次(session).
实例层次的设置是通过参数文件来实现的(alter system set 最终也是写到参数文件)。 设置方法如下:
-- 参数文件 EVENT="[eventnumber|immediate] trace name eventname [forever,] [level levelnumber] : .......' -- 命令行 alter system set events='[eventnumber|immediate] trace name eventname [forever,] [level levelnumber] : .....'
会话层次的设置是通过修改内存来实现的(alter session set 其实是动态修改内存)。 设置格式如下:
alter session set events'[eventnumber|immediate] trace name eventname [forever] [, level levelnumber] :.......'
命令行里的格式基本一致。同时指定多个事件时,使用冒号进行分隔。
2 查看dump文件
大概是从11G 为分界线,11G 及之前的版本,用户主动生成的trace 文件是保存在 user_dump_dest 参数指向的路径中的。 而从12C 开始,该文件则是与alert 日志保存在同一路径中。
2.1 CDB或者12C之后
SELECT '$ORACLE_BASE/diag/rdbms/'||d.value||'/'||i.instance_name||'/trace/'||
p.spid || '.trc' trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1
AND s.sid = m.sid
AND p.addr = s.paddr) p,
(SELECT instance_name FROM v$instance) i,
(SELECT VALUE FROM v$parameter WHERE NAME = 'db_name') d;
2.2 非CDB 或者11G
SELECT d.value || '/' || lower(rtrim(i.instance_name, chr(0))) || '_ora_' ||
p.spid || '.trc' trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1
AND s.sid = m.sid
AND p.addr = s.paddr) p,
(SELECT instance_name FROM v$instance) i,
(SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d;
3 格式说明
4 dump结构
eventname 根据Oracle数据库结构,分为几个大类,比如内存,文件。
4.1 Memory Dumps
4.1.1 Global Area
-
语句
ALTER SESSION SET EVENTS 'immediate trace name global_area level n';
-
- 1 包含PGA
- 2 包含SGA
- 4 包含UGA
- 8 包含indrect memory
4.1.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)
4.1.3 Row Cache
-
语句
ALTER SESSION SET EVENTS 'immediate trace name row_cache level n';
- 1 row cache统计信息 2 包含hash table histogram 8 包含object结构
4.1.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
4.1.5 block Buffer version
-
语句
ALTER SESSION SET EVENTS 'immediate trace name buffer level n';
- n为某个指定block的rdba,该命令可以转储某个block在buffer中的所有版本。
4.1.6 Heap
-
语句
ALTER SESSION SET EVENTS 'immediate trace name heapdump level n';
-
- 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内容
-
语句
ALTER SESSION SET EVENTS 'immediate trace name heapdump_addr level n, addr m';
- level ::其中m为subheap的地址,n为1转储subheap的摘要,n为2转储subheap的内容
4.1.8 Process State
-
语句
ALTER SESSION SET EVENTS 'immediate trace name processstate level n';
- 一般设置为10.
4.1.9 System State
-
语句
ALTER SESSION SET EVENTS 'immediate trace name systemstate level n';
-
- 2: dump (不包括lock element)
- 10: dump
- 11: dump + global cache of RAC
- 256: short stack (函数堆栈)
- 258: 256+2 –>short stack +dump(不包括lock element)
- 266: 256+10 –>short stack+ dump
- 267: 256+11 –>short stack+ dump + global cache of RAC
level 11和 267会 dump global cache, 会生成较大的trace 文件,一般情况下不推荐。一般情况下,如果进程不是太多,推荐用266,因为这样可以dump出来进程的函数堆栈,可以用来分析进程在执行什么操作。但是生成short stack比较耗时,如果进程非常多,比如2000个进程,那么可能耗时30分钟以上。这种情况下,可以生成level 10 或者 level 258, level 258 比 level 10会多收集short short stack, 但比level 10少收集一些lock element data.
另外对于RAC系统,请关注Bug 11800959 - A SYSTEMSTATE dump with level >= 10 in RAC dumps huge BUSY GLOBAL CACHE ELEMENTS - can hang/crash instances (Doc ID 11800959.8)。这个Bug在11.2.0.3上被修复,对于<=11.2.0.2的RAC,当系统中的lock element 很多的时候,如果执行level 10、266或者 267的systemstate dump时,可能会导致数据库hang或者crash,这种情况下可以采用level 258。
4.1.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
4.1.11 Hang Analysis
ALTER SESSION SET EVENTS 'immediate trace name hanganalyze level n';
- level
-
- 1-2 只有hanganalyze输出,不dump任何进程
- 3 Level2+Dump出在IN_HANG状态的进程
- 4 Level3+Dump出在等待链里面的blockers(状态为LEAF/LEAF_NW/IGN_DMP)
- 5 Level4+Dump出所有在等待链中的进程(状态为NLEAF)
- 10 dump 所有进程(IGN 状态)
4.1.12 Work Area
-
语句
alter SESSION SET EVENTS 'immediate trace name workareatab_dump level n';
-
- 1 SGA信息
- 2 Workarea Table摘要信息
- 3 Workarea Table详细信息
4.1.13 Latches
-
语句
ALTER SESSION SET EVENTS 'immediate trace name latches level n';
-
- 1 latch信息
- 2 统计信息
4.1.14 Events
-
语句
ALTER SESSION SET EVENTS 'immediate trace name events level n';
-
- 1 session
- 2 process
- 3 system
4.1.15 Locks
ALTER SESSION SET EVENTS 'immediate trace name locks level n';
4.1.16 Shared Process
-
语句
ALTER SESSION SET EVENTS 'immediate trace name shared_server_state level n';
- n取值为1~14
4.1.17 Background Messages
-
语句
ALTER SESSION SET EVENTS 'immediate trace name bg_messages level n';
- n为pid+1