在11g之后,当使用查看当前用户的trc文件,可以直接使用v$diag_into视图来查看
SYS @ BIRD>select * from v$diag_info;
INST_ID NAME VALUE
---------- ---------------------- --------------------------------------------------
1 Diag Enabled TRUE
1 ADR Base /app/oracle
1 ADR Home /app/oracle/diag/rdbms/bird/BIRD
1 Diag Trace /app/oracle/diag/rdbms/bird/BIRD/trace
1 Diag Alert /app/oracle/diag/rdbms/bird/BIRD/alert
1 Diag Incident /app/oracle/diag/rdbms/bird/BIRD/incident
1 Diag Cdump /app/oracle/diag/rdbms/bird/BIRD/cdump
1 Health Monitor /app/oracle/diag/rdbms/bird/BIRD/hm
1 Default Trace File /app/oracle/diag/rdbms/bird/BIRD/trace/BIRD_ora_14
007.trc
1 Active Problem Count 0
1 Active Incident Count 0
其中输出项 Default Trace File这个值,是当前会话的trc跟踪文件
我们执行当前会话的trace事件时,则这文件可记录相应的信息
基本步骤思路:
1、设置pid或会话id
oradebug setmypid
oradebug setorapid 数据库pid
oradebug setospid os跟踪进程
2、设置trace文件大小
oradebu ulimit 无限制
3、查看tracefile_name
oradebug tracefile_name
4、设置事件
oradebug session_event 10046 trace name context forever ,level 4 启用会话级10046
oradebug event 10046 trace name context off 系统级
其它总结:
oradebug help 使用帮助
oradebug setmypid 跟踪当前会话
oradebug setsyspid pid 跟踪系统会话
oradebug dump systemstate 10 获取系统的状态
oradebug hanganalyze 10 分析系统hang的原因。都是生成到trace中,进一步分析原因。
跟踪生成ORA-00xxx的会话:
如跟踪造成这个ORA-000942/ORA-00952的会话,
oradebug event 942 trace name errorstack level 3
oradebug event 952 trace name errorstack level 3
alter system set events ‘942 trace name errorstack level 3’;
命令格式:
alter session set events '[eventnumber|immediate] trace name eventname [forever] [, level levelnumber]
eventnumber:事件号
immdediate: 立即跟踪,只在alter session语句中使用,并且不能与eventnumber和forever关键字使用
eventname : 事件名称 ,也就是要dump结构,有固定的关键词。 若是eventname为context时,则命令的首部需要使用事件号eventnumber进行跟踪
forever: 事件在实例 或 会话周期内有效,不能与immediate一起使用
level 事件关键字级别。 但是在dump错误堆栈时(errorstack),不存在级别这一说
levelnumber: 级别
级别说明如下:
当dump文件头时:
level 1 文件头的控制项
level 2 文件头的首选项
level10 完整的文件头,最为详细的内容
当使用10046事件的SQL trace时:
10046是基于SQL的跟踪,用来跟踪SQL
0
禁止调试事件
1
调试事件是激活的。针对每个被处理的数据库调用,给定如下信息:SQL语句、响应时间、服务时间
处理的行数、处理的行数、逻辑读数量、物理读与写的数量、执行计划以及一些额外信息
4
如果等级1,包括绑定变量的额外信息。主要是数据类型、精度以及每次执行时所用的值
8
同等级1,加上关于等待时间的细节信息。为了处理过程中的每个等待,提供如下信息:等待时间的名字、持续时间,以及一些额外的参数,可标明所等待的资源
12
同时启动等级4和等级8
dump buffes
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
控制文件
alter session set events ‘immediate trace name controlf level 2’;或
oradebug dump controlf 2
ALTER SESSION SET EVENTS ‘immediate trace name controlf level n’;
1 文件头信息
2 level 1 + 数据库信息 + 检查点信息
3 level 2 + 可重用节信息
10 level 3
数据文件 :
oradebug dump file_hdrs 10
alter session set events ‘immediate trace name file_hdrs level 10’;
ALTER SESSION SET EVENTS ‘immediate trace name file_hdrs level n’;
1 控制文件中的文件头信息
2 level 1 + 文件头信息
3 level 2 + 数据文件头信息
10 level 3
redo log文件
alter session set events ‘immediate trace name redohdr level 2’;
具体的level级别,见上面所述。
dump临时文件
alter system dump tempfile ‘/app/oracle/oradata/BIRD/temp01.dbf’ block 1;
数据文件
alter system dump datafile [
alter system dump datafile [
library cache:
alter session set events ‘immediate trace name library_cache level 10’;
heapdump:
alter session set events ‘immediate trace name library_cache level 10’;
row_cache:
alter session set events ‘immediate trace name row_cache level 1’;
process进程信息:
alter session set events ‘immediate trace name processsate level 10’;
undo header:
alter system dump undo header ‘_SYSSMU1$’;
通过oradebug开启
oradebug setorapid 156
oradebug unlimit
oradebug event 10046 trace name context forever level 8
oradebug tracefile_name
oradebug event 10046 trace name context off
全局跟踪事件:(配置参数文件)
event=“10046 trace name context forever, level 12”
通过alter session 追踪当前会话:
alter session set tracefile_identifier=‘10046’; 设置追踪符
alter session set events ‘10046 trace name context forever, level 12’; 开启
alter session set events ‘10046 trace name context off’; 关闭
通过dbms_monitor包进行10046事件跟踪:
begin
dbms_monitor.session_trace_enable(session_id => 122,
serial_num => 6734,
waits => true,
binds => false);
end;
关闭SQL跟踪
begin
dbms_monitor.session_trace_disable(session_id => 122, serial_num => 6734);
end;
通过SQL查询trace文件的位置:
select s.SID,
s.SERVER,
lower(case
when s.SERVER in ('DEDICATED', 'SHARED') then
i.INSTANCE_NAME || '_' || nvl(pp.SERVER_NAME, nvl(ss.NAME, 'ora')) || '_' ||
p.SPID || '.trc'
else
null
end) as trace_file_name
from v$instance i,
v$session s,
v$process p,
v$px_process pp,
v$shared_server ss
where s.PADDR = p.ADDR
and s.SID = pp.SID(+)
and s.PADDR = ss.PADDR(+)
and s.TYPE = 'USER'
and s.SID = 'your sid'
order by s.SID
查看当前会话的trace文件:
select d.value || '/' || lower(rtrim(i.instance, 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 t.instance
from v$thread t, v$parameter v
where v.name = 'thread'
and (v.value = 0 or t.thread# = to_number(v.value))) i,
(select value from v$parameter where name = 'user_dump_dest') d
通过tkprof格式化trc文件
tkprof *.trc *.txt
注:tkprof具体使用方法需要请看命令帮助选项。