一、
Oracle
跟踪文件
Oracle
跟踪文件分
为
三
种类
型,一
种
是后台
报
警日志文件,
记录
数据
库
在启
动
、
关闭
和运行期
间
后台
进
程的活
动
情况
,
如表空
间创
建、回
滚
段
创
建、某些
alter
命令、日志切
换
、
错误
消息等。在数据
库
出
现
故障
时
,
应
首先
查
看
该
文件,但文件中的信息与任何
错误
状
态
没有必然的
联
系。后台
报
警日志文件保存
BACKGROUND_DUMP_DEST
参数指定的目
录
中,文件格式
为
SIDALRT.LOG
。另一
种类
型是
DBWR
、
LGWR
、
SMON
等后台
进
程
创
建的后台跟踪文件。后台跟踪文件根据后台
进
程运行情况
产
生,后台跟踪文件也保存在
BACKGROUND_DUMP_DEST
参数指定的目
录
中,文件格式
为
siddbwr.trc
、
sidsmon.trc
等。
还
有一
种类
型是由
连
接到
Oracle
的用
户进
程
(Server Processes)
生成的用
户
跟踪文件。
这
些文件
仅
在用
户
会
话
期
间
遇到
错误时产
生。此外,用
户
可以通
过执
行
oracle
跟踪事件(
见
后面)来生成
该类
文件,用
户
跟踪文件保存在
USER_DUMP_DEST
参数指定的目
录
中,文件格式
为
oraxxxxx.trc
,
xxxxx
为创
建文件的
进
程号(或
线
程号)。
二、
Oracle
跟踪事件
Oracle
提供了一
类
命令,可以将
Oracle
各
类
内部
结
构中所包含的信息
转储
(dump)
到跟踪文件中,以便用
户
能根据文件内容来解决各
种
故障。
设
置跟踪事件有两
种
方法,一
种
是在
init.ora
文件中
设
置事件,
这样
open
数据
库
后,将影响到所有的会
话
。
设
置格式如下:
EVENT="eventnumber trace name eventname [forever,] [level levelnumber] : ......."
通
过
:
符号,可以
连续设
置多个事件,也可以通
过连续
使用
event
来
设
置多个事件。
另一
种
方法是在会
话过
程中使用alter session set events命令,只
对
当前会
话
有影响。
设
置格式如下:
alter session set events '[eventnumber|immediate] trace name eventname [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
结
构的所有信息。
1、buffers事件:dump SGA
缓
冲区中的db buffer
结
构
alter session set events 'immediate trace name buffers level 1'; --表示dump
缓
冲区的
头
部。
2、blockdump事件:dump数据文件、索引文件、回
滚
段文件
结
构
alter session set events 'immediate trace name blockdump level 66666'; --表示dump
块
地址
为
6666
的数据
块
。
在Oracle 8以后
该
命令已改
为
:
alter system dump datafile 11 block 9; --表示dump数据文件号
为
11
中的第9个数据
块
。
3、controlf事件:dump控制文件
结
构
alter session set events 'immediate trace name controlf level 10'; --表示dump控制文件的所有内容。
4、locks事件:dump LCK
进
程的
锁
信息
alter session set events 'immediate trace name locks level 5';
5、redohdr事件:dump redo日志的
头
部信息
alter session set events 'immediate trace name redohdr level 1'; --表示dump redo日志
头
部的控制文件
项
。
alter session set events 'immediate trace name redohdr level 2'; --表示dump redo日志的通用文件
头
。
alter session set events 'immediate trace name redohdr level 10'; --表示dump redo日志的完整文件
头
。
注意:redo日志的内容dump可以采用下面的
语
句:
alter system dump logfile 'logfilename';
6、loghist事件:dump控制文件中的日志
历
史
项
alter session set events 'immediate trace name loghist level 1'; --
表示只dump最早和最
迟
的日志
历
史
项
。
levelnumber大于等于2
时
,表示2的levelnumber次方个日志
历
史
项
。
alter session set events 'immediate trace name loghist level 4'; --表示dump 16个日志
历
史
项
。
7、file_hdrs事件:dump 所有数据文件的
头
部信息
alter session set events 'immediate trace name file_hdrs level 1'; --表示dump 所有数据文件
头
部的控制文件
项
。
alter session set events 'immediate trace name file_hdrs level 2'; --表示dump 所有数据文件的通用文件
头
。
alter session set events 'immediate trace name file_hdrs level 10'; --表示dump 所有数据文件的完整文件
头
。
8
、
errorstack
事件:
dump
错误栈
信息,通常
Oracle
发
生
错误时
前台
进
程将得到一条
错误
信息,但某些情况下得不到
错误
信息,可以采用
这种
方式得到
Oracle
错误
。
alter session set events '604 trace name errorstack forever'; --
表示当出
现
604
错误时
,dump
错误栈
和
进
程
栈
。
9、systemstate事件:dump所有系
统
状
态
和
进
程状
态
alter session set events 'immediate trace name systemstate level 10'; --
表示dump 所有系
统
状
态
和
进
程状
态
。
10、coalesec事件:dump指定表空
间
中的自由区
间
levelnumber
以十六
进
制表示
时
,两个高位字
节
表示自由区
间
数目,两个低位字
节
表示表空
间
号,如0x00050000表示dump系
统
表空
间
中的5个自由区
间
,
转换
成十
进
制就是327680,即:
alter session set events 'immediate trace name coalesec level 327680';
11、processsate事件:dump
进
程状
态
alter session set events 'immediate trace name processsate level 10';
12
、library_cache事件:dump library cache信息
alter session set events 'immediate trace name library_cache level 10';
13、heapdump事件:dump PGA、SGA、UGA中的信息
alter session set events 'immediate trace name heapdump level 1';
14、row_cache事件:dump数据字典
缓
冲区中的信息
alter session set events 'immediate trace name row_cache level 1';
三、内部事件号
1、10013:用于
监视
事
务
恢
复
2
、10015:
转储
UNDO SEGMENT
头
部
event = "10015 trace name context forever"
3、10029:用于
给
出会
话
期
间
的登
陆
信息
4、10030:用于
给
出会
话
期
间
的注
销
信息
5、10032:
转储
排序的
统计
信息
6、10033:
转储
排序增
长
的
统计
信息
7、10045:跟踪Freelist管理操作
8、10046:跟踪SQL
语
句
alter session set events '10046 trace name context forever, level 4'; --跟踪SQL
语
句并
显
示
绑
定
变
量
alter session set events '10046 trace name context forever, level 8'; --跟踪SQL
语
句并
显
示等待事件
9、10053:
转储优
化策略
10、10059:模
拟
redo
日志中的
创
建和清除
错误
11
、10061:阻止SMON
进
程在启
动时
清除
临时
段
12、10079:
转储
SQL*NET
统计
信息
13、10081:
转储
高水
标记变
化
14、10104:
转储
Hash
连
接
统计
信息
15、10128:
转储
分区休整信息
16、10200:
转储
一致性
读
信息
17、10201:
转储
一致性
读
中Undo
应
用
18、10209:允
许
在控制文件中模
拟错误
19
、10210:触
发
数据
块检查
事件
event = "10210 trace name context forever, level 10"
20、10211:触
发
索引
检查
事件
21、10213:模
拟
在写控制文件后崩
溃
22
、10214:模
拟
在控制文件中的写
错误
levelnumber
从1-9表示
产
生
错误
的
块
号,大于等于10
则每
个控制文件将出
错
23
、10215:模
拟
在控制文件中的
读错误
24
、10220:
转储
Undo
头
部
变
化
25、10221;
转储
Undo
变
化
26、10224:
转储
索引的分隔与
删
除
27、10225:
转储
基于字典管理的区
间
的
变
化
28、10229:模
拟
在数据文件上的I/O
错误
29
、10231:
设
置在全表
扫
描
时
忽略
损
坏的数据
块
alter session set events '10231 trace name context off'; --
关闭
会
话
期
间
的数据
块检查
event = "10231 trace name context forever, level 10" --
对
任何
进
程
读
入SGA的数据
块进
行
检查
30
、10232:将
设
置
为软损
坏(DBMS_REPAIR包
设
置或DB_BLOCK_CHECKING
为
TRUE
时设
置)的数据
块
dump
到跟踪文件
31、10235:用于内存堆
检查
alter session set events '10235 trace name context forever, level 1';
32
、10241:
转储远
程SQL
执
行
33、10246:跟踪PMON
进
程
34、10248:跟踪dispatch
进
程
35、10249:跟踪MTS
进
程
36、10252:模
拟
写数据文件
头
部
错误
37
、10253:模
拟
写redo日志文件
错误
38
、10262:允
许连
接
时
存在内存泄漏
alter session set events '10262 trace name context forever, level 300'; -- 允
许
存在300个字
节
的内存泄漏
39、10270:
转储
共享游
标
40
、10285:模
拟
控制文件
头
部
损
坏
41、10286:模
拟
控制文件打
开错误
42
、10287:模
拟归
档出
错
43
、10357:
调试
直接路径机制
44、10500:跟踪SMON
进
程
45、10608:跟踪位
图
索引的
创
建
46、10704:跟踪enqueues
47、10706:跟踪全局enqueues
48、10708:跟踪RAC的buffer cache
49、10710:跟踪
对
位
图
索引的
访问
50
、10711:跟踪位
图
索引合并操作
51、10712:跟踪位
图
索引OR操作
52、10713:跟踪位
图
索引AND操作
53、10714:跟踪位
图
索引MINUS操作
54、10715:跟踪位
图
索引向ROWID的
转
化
55、10716:跟踪位
图
索引的
压缩
与解
压
56
、10719:跟踪位
图
索引的修改
57、10731:跟踪游
标
声明
58、10928:跟踪PL/SQL
执
行
59、10938:
转储
PL/SQL
执
行
统计
信息
最后要
说
明的是,由于版本不同以上
语
法可能有些
变
化,但大多数
还
是可用的。
附完整的跟踪事件列表,event No.10000 to 10999
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;
/
1.select sid,serial#,username,osuser,machine from v$session;
查询
session
的sid,serial#
2.exec dbms_system.set_sql_trace_in_session(141,6,true);
开
始跟踪
3.exec dbms_system.set_sql_trace_in_session(141,6,true) 停止跟踪
4.tkprof *.trc *.txt
1.select sid,serial#,username,osuser,machine from v$session;
查询
session
的sid,serial#
2.exec dbms_system.set_sql_trace_in_session(141,6,true);
开
始跟踪
3.exec dbms_system.set_sql_trace_in_session(141,6,true) 停止跟踪
4.tkprof *.trc *.txt
5.
查
看文件
6.get trace file name
select
d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from
( select p.spid
from sys.v$mystat m,sys.v$session s,sys.v$process p
where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
( select t.instance from sys.v$thread t,sys.v$parameter v
where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,
( select value from sys.v$parameter where name = 'user_dump_dest') d
/