oracle数据库文件转储和trace跟踪整理

跟踪文件

在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事件时,则这文件可记录相应的信息

使用oradebug跟踪

基本步骤思路:
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或alter system设置trace事件进行事件跟踪

命令格式:
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

常用dump命令

控制文件
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 [|] block 导出一个数据块
alter system dump datafile [|] block min block max 导出连续的多个数据块

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$’;

10046事件 SQL 跟踪详解

通过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具体使用方法需要请看命令帮助选项。

你可能感兴趣的:(database)