oracle 跟踪文件

跟踪文件能提供调试信息。服务器遇到问题时,它会生成一个包含大量诊断信息的跟踪文件。

Oracle数据库是一个允许充分测量的软件,可测量指的是在数据库内核中存在着大量的调试代码,数据库的这种测量反应在以下几个方面。

Ø V$视图:大多数V$视图都包含调试信息。V$WAITSTAT,V$SESSION_EVENT还有许多其他的V$视图的存在就是为了让我们知道内核内部到底发生了什么。

Ø 审计命令:利用这个命令能制定数据库要记录哪些事件以便日后分析。

Ø 资源管理器(DBMS_RESOURCE_MANAGER):这个特性允许对数据库中的资源(CPU,IO)实现微管理。正是因为oracle能访问描述资源使用情况的所有运行时统计信息,所以才可能有资源管理器。

Ø Oracle事件:基于oracle事件,能让oracle生成所需的跟踪或诊断信息。

Ø DBMS_TRACE:这是一个PL/SQL引擎中的工具,它会全面的记录存储过程的调用树,所产生的异常,以及遇到的错误。

Ø 数据库事件触发器:这些触发器(如ON SERVERERROR)允许你监控和记录你觉得意外或非正常的情况。

Ø SQL_TRACE/DBMS_MONITOR:这个工具用于查看具体的sql、等待事件以及通过运行应用生成的其他与性能有关的诊断信息。


启动sql跟踪的方式如下

session级别开启sql跟踪

Alter session set sql_trace =true;可以对当前session打开sql跟踪

SQL> alter session set sql_trace=true;

Session altered.

SQL> select count(*) from user_objects;

  COUNT(*)
----------
     30850

SQL> alter session set sql_trace=false;

Session altered.

SQL> show parameter dump_dest;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      d:\oracle\diag\rdbms\orcl\orcl
                                                 \trace
core_dump_dest                       string      d:\oracle\diag\rdbms\orcl\orcl
                                                 \cdump
user_dump_dest                       string      d:\oracle\diag\rdbms\orcl\orcl
                                                 \trace

如果使用专用服务器连接则是在user_dump_dest指定的目录中产生跟踪文件

如果使用共享服务器连接则是在background_dump_dest参数指定的目录中生成跟踪文件

 命名约定

跟踪文件的第一部分是ORACLE_SID,第二部只有一个ora,第三部分是专用服务器的进程ID,可以从V$PROCESS中得到。

select c.value || '\' || d.instance_name || '_ora_' || a.spid || '.trc' trace
  from v$process a, v$session b, v$parameter c, v$instance d
 where a.addr = b.paddr
   and b.audsid = userenv('sessionid')
   and c.name = 'user_dump_dest'
TRACE
--------------------------------------------------
d:\oracle\diag\rdbms\orcl\orcl\trace\orcl_ora_3512.trc

oracle11g中也可以通过查看v$diag_info视图来查看跟踪文件位置以及当前会话的跟踪文件名

with home
as
(
select value home from v$diag_info where name = 'ADR Home'
)
select name,
       case
         when value <> home.home then
          replace(value, home.home, '$home$')
         else
          value
       end value
  from v$diag_info, home

 NAME                      VALUE
------------------------- -------------------------
Diag Enabled              TRUE
ADR Base                  d:\oracle
ADR Home                  d:\oracle\diag\rdbms\orcl\orcl
Diag Trace                $home$\trace
Diag Alert                $home$\alert
Diag Incident            $home$\incident
Diag Cdump                 $home$\cdump
Health Monitor            $home$\hm
Default Trace File        $home$\trace\orcl_ora_3512.trc
Active Problem Count      0

Active Incident Count     0

11 rows selected.


其中DIAG_TRACE是跟踪文件的位置

Default trace file 是当前会话跟踪文件的名字

生成的跟踪文件时很难读懂的

需要用tkprof 来格式化这个trace文件

例如

D:\oracle\diag\rdbms\orcl\orcl\trace>Tkprof orcl_ora_3512.trc orcl_ora_3512.txt


有的时候我们需要跟踪其他session的行为,这个时候可以使用DBMS_SYSTEM.set_sql_trace_in_session 来实现

首先得到要监控session的sid和serial#
SQL> select sid,serial# from v$session where username='SCOTT';

SID    SERIAL#
---------- ----------
68         56

SQL> exec dbms_system.set_sql_trace_in_session(sid=>68,serial#=>56,sql_trace=>true);

PL/SQL procedure successfully completed.

SQL> exec dbms_system.set_sql_trace_in_session(sid=>68,serial#=>56,sql_trace=>false);

PL/SQL procedure successfully completed.

除了set sql_trace的方式之外,也可以通过跟踪事件10046来生成跟踪文件

在初始化参数文件init%oracle_sid%.ora中设置

Event="eventnumber trace name eventname [forever,] [level levelnumber]:......"

eventnumber指触发dump的事件号,事件号可以是Oracle错误号(出现相应错误时跟踪指定的事件)或oralce内部事件号,内部事件号在1000010999之间 

例如

EVENT = "10046 trace name context forever, level 8"

或者在全局或会话中设置

alter system|session set events ‘[eventnumber|immediate] trace name eventname [forever] [, level levelnumber] : …….’ 

SQL> alter session set events '10046 trace name context forever,level 12';

10046 levelnumber事件说明
10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
10046事件可以设置以下四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 加上绑定值(bind values)
8 - Level 1 + 等待事件跟踪
12 - Level 1 + Level 4 + Level 8 

levelnumber表示事件级别号,一般从1101表示只dump结构头部信息,10表示dump结构的所有信息。

eventname 事件名,如下所述
1buffers事件:dump SGA缓冲区中的db buffer结构
alter session set events ‘immediate trace name buffers level 1′; –表示dump缓冲区的头部。
2blockdump事件: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个数据块。
3controlf事件:dump控制文件结构
alter session set events ‘immediate trace name controlf level 10′; –表示dump控制文件的所有内容。
4locks事件:dump LCK进程的锁信息
alter session set events ‘immediate trace name locks level 5′;
5redohdr事件: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’;
6loghist事件:dump控制文件中的日志历史项
alter session set events ‘immediate trace name loghist level 1′; –表示只dump最早和最迟的日志历史项。
levelnumber大于等于2时,表示2levelnumber次方个日志历史项。
alter session set events ‘immediate trace name loghist level 4′; –表示dump 16个日志历史项。
7file_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所有数据文件的完整文件头。
8errorstack事件:dump错误栈信息,通常Oracle发生错误时前台进程将得到一条错误信息,但某些情况下得不到错误信息,可以采用这种方式得到Oracle错误。
alter session set events ‘604 trace name errorstack forever’; –表示当出现604错误时,dump错误栈和进程栈。
9systemstate事件:dump所有系统状态和进程状态
alter session set events ‘immediate trace name systemstate level 10′; –表示dump所有系统状态和进程状态。
10coalesec事件:dump指定表空间中的自由区间
levelnumber以十六进制表示时,两个高位字节表示自由区间数目,两个低位字节表示表空间号,如0×00050000表示dump系统表空间中的5个自由区间,转换成十进制就是327680,即:
alter session set events ‘immediate trace name coalesec level 327680′;
11processsate事件:dump进程状态
alter session set events ‘immediate trace name processsate level 10′;
12library_cache事件:dump library cache信息
alter session set events ‘immediate trace name library_cache level 10′;
13heapdump事件:dump PGASGAUGA中的信息
alter session set events ‘immediate trace name heapdump level 1′;
14row_cache事件:dump数据字典缓冲区中的信息
alter session set events ‘immediate trace name row_cache level 1′; 


*eventname部分转载自网络




你可能感兴趣的:(oracle,sql,数据库,session,服务器,oracle11g)