Oracle跟踪文件

一、 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 
/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值