数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle跟蹤文件与跟蹤事件


发布日期:2020年01月03日
 
Oracle跟蹤文件与跟蹤事件

[Q]如果设置自动跟蹤

[A]用system登录

执行$ORACLE_HOME/rdbms/admin/utlxplansql创建计划表

执行$ORACLE_HOME/sqlplus/admin/plustrcesql创建plustrace角色

如果想计划表让每个用户都能使用

SQL>create public synonym plan_table for plan_table;

SQL> grant all on plan_table to public;

如果想让自动跟蹤的角色让每个用户都能使用

SQL> grant plustrace to public;

通过如下语句开启/停止跟蹤

SET AUTOTRACE ON |OFF

| ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN

[Q]如果跟蹤自己的会话或者是别人的会话

[A]跟蹤自己的会话很简单

Alter session set sql_trace true|false

Or

Exec dbms_sessionset_sql_trace(TRUE);

如果跟蹤别人的会话需要调用一个包

exec dbms_systemset_sql_trace_in_session(sidserial#true|false)

跟蹤的信息在user_dump_dest 目录下可以找到或通过如下脚本获得文件名称(适用于Win环境如果是unix需要做一定修改)

SELECT pvalue||||pvalue||_ora_||pspid||ora filename

FROM

v$process p

v$session s

v$parameter p

v$parameter p

WHERE pname = user_dump_dest

AND pname = db_name

AND paddr = spaddr

AND saudsid = USERENV (SESSIONID)

最后可以通过Tkprof来解析跟蹤文件

Tkprof 原文件 目标文件 sys=n

[Q]怎么设置整个数据库系统跟蹤

[A]其实文档上的alter system set sql_trace=true是不成功的

但是可以通过设置事件来完成这个工作作用相等

alter system set events

trace name context foreverlevel ;

如果关闭跟蹤可以用如下语句

alter system set events

trace name context off;

其中的level 与上面的都是跟蹤级别

level 跟蹤SQL语句等于sql_trace=true

level 包括变量的详细信息

level 包括等待事件

level 包括绑定变量与等待事件

Oracle跟蹤文件

Oracle跟蹤文件分为三种类型一种是后台报警日志文件记录数据库在启动关闭和运行期间后台进程的活动情况如表空间创建回滚段创建某些alter命令日志切换错误消息等在数据库出现故障时应首先查看该文件但文件中的信息与任何错误状态没有必然的联系后台报警日志文件保存BACKGROUND_DUMP_DEST参数指定的目录中文件格式为SIDALRTLOG另一种类型是DBWRLGWRSMON等后台进程创建的后台跟蹤文件后台跟蹤文件根据后台进程运行情况产生后台跟蹤文件也保存在BACKGROUND_DUMP_DEST参数指定的目录中文件格式为siddbwrtrcsidsmontrc等还有一种类型是由连接到Oracle的用户进程(Server Processes)生成的用户跟蹤文件这些文件仅在用户会话期间遇到错误时产生此外用户可以通过执行oracle跟蹤事件(见后面)来生成该类文件用户跟蹤文件保存在USER_DUMP_DEST参数指定的目录中文件格式为oraxxxxxtrcxxxxx为创建文件的进程号(或线程号)

Oracle跟蹤事件

Oracle提供了一类命令可以将Oracle各类内部结构中所包含的信息转储(dump)到跟蹤文件中以便用户能根据文件内容来解决各种故障设置跟蹤事件有两种方法一种是在initora文件中设置事件这样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内部事件号内部事件号在之间不能与immediate关键字同用

immediate关键字表示命令发出后立即将指定的结构dump到跟蹤文件中这个关键字只用在alter session语句中并且不能与 eventnumberforever关键字同用

trace name 是关键字

eventname指事件名称(见后面)即要进行dump的实际结构名若eventname为context则指根据内部事件号进行跟蹤

forever关键字表示事件在实例或会话的周期内保持有效状态不能与immediate同用

level为事件级别关键字但在dump错误栈(errorstack)时不存在级别

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

buffers事件dump SGA缓沖区中的db buffer结构

alter session set events \immediate trace name buffers level \; 表示dump缓沖区的头部

blockdump事件dump数据文件索引文件回滚段文件结构

alter session set events \immediate trace name blockdump level \; 表示dump块地址为的数据块

在Oracle 以后该命令已改为

alter system dump datafile block ; 表示dump数据文件号为中的第个数据块

controlf事件dump控制文件结构

alter session set events \immediate trace name controlf level \; 表示dump控制文件的所有内容

locks事件dump LCK进程的锁信息

alter session set events \immediate trace name locks level \;

redohdr事件dump redo日志的头部信息

alter session set events \immediate trace name redohdr level \; 表示dump redo日志头部的控制文件项

alter session set events \immediate trace name redohdr level \; 表示dump redo日志的通用文件头

alter session set events \immediate trace name redohdr level \; 表示dump redo日志的完整文件头

注意redo日志的内容dump可以采用下面的语句:

alter system dump logfile \logfilename\;

loghist事件dump控制文件中的日志历史项

alter session set events \immediate trace name loghist level \; 表示只dump最早和最迟的日志历史项

levelnumber大于等于表示的levelnumber次方个日志历史项

alter session set events \immediate trace name loghist level \; 表示dump 个日志历史项

file_hdrs事件dump 所有数据文件的头部信息

alter session set events \immediate trace name file_hdrs level \; 表示dump 所有数据文件头部的控制文件项

alter session set events \immediate trace name file_hdrs level \; 表示dump 所有数据文件的通用文件头

alter session set events \immediate trace name file_hdrs level \; 表示dump 所有数据文件的完整文件头

errorstack事件dump 错误栈信息通常Oracle发生错误时前台进程将得到一条错误信息但某些情况下得不到错误信息可以

采用这种方式得到Oracle错误

alter session set events \ trace name errorstack forever\; 表示当出现错误时dump 错误栈和进程栈

systemstate事件dump所有系统状态和进程状态

alter session set events \immediate trace name systemstate level \; 表示dump 所有系统状态和进程状态

coalesec事件dump指定表空间中的自由区间

levelnumber以十六进制表示时两个高位字节表示自由区间数目两个低位字节表示表空间号x表示dump系统表空间中的

个自由区间转换成十进制就是

alter session set events \immediate trace name coalesec level \;

processsate事件dump进程状态

alter session set events \immediate trace name processsate level \;

library_cache事件dump library cache信息

alter session set events \immediate trace name library_cache level \;

heapdump事件dump PGASGAUGA中的信息

alter session set events \immediate trace name heapdump level \;

row_cache事件dump数据字典缓沖区中的信息

alter session set events \immediate trace name row_cache level \;

内部事件号

用于监视事务恢复

转储UNDO SEGMENT头部

event = trace name context forever

用于给出会话期间的登陆信息

用于给出会话期间的注销信息

转储排序的统计信息

转储排序增长的统计信息

跟蹤Freelist管理操作

跟蹤SQL语句

alter session set events \ trace name context forever level \; 跟蹤SQL语句并显示绑定变量

alter session set events \ trace name context forever level \; 跟蹤SQL语句并显示等待事件

转储优化策略

模拟redo日志中的创建和清除错误

阻止SMON进程在启动时清除临时段

转储 SQL*NET统计信息

转储高水标记变化

转储Hash连接统计信息

转储分区休整信息

转储一致性读信息

转储一致性读中Undo应用

允许在控制文件中模拟错误

触发数据块检查事件

event = trace name context forever level

触发索引检查事件

模拟在写控制文件后崩溃

模拟在控制文件中的写错误

levelnumber从表示产生错误的块号大于等于则每个控制文件将出错

模拟在控制文件中的读错误

转储Undo头部变化

转储Undo变化

转储索引的分隔与删除

转储基于字典管理的区间的变化

模拟在数据文件上的I/O错误

设置在全表扫描时忽略损坏的数据块

alter session set events \ trace name context off\; 关闭会话期间的数据块检查

event = trace name context forever level 对任何进程读入SGA的数据块进行检查

将设置为软损坏(DBMS_REPAIR包设置或DB_BLOCK_CHECKING为TRUE时设置)的数据块dump到跟蹤文件

用于内存堆检查

alter session set events \ trace name context forever level \;

转储远程SQL执行

跟蹤PMON进程

跟蹤dispatch进程

跟蹤MTS进程

模拟写数据文件头部错误

模拟写redo日志文件错误

允许连接时存在内存洩漏

alter session set events \ trace name context forever level \; 允许存在个字节的内存洩漏

转储共享游标

模拟控制文件头部损坏

模拟控制文件打开错误

模拟归档出错

调试直接路径机制

跟蹤SMON进程

跟蹤位图索引的创建

跟蹤enqueues

跟蹤全局enqueues

跟蹤RAC的buffer cache

跟蹤对位图索引的访问

跟蹤位图索引合并操作

跟蹤位图索引OR操作

跟蹤位图索引AND操作

跟蹤位图索引MINUS操作

跟蹤位图索引向ROWID的转化

跟蹤位图索引的压缩与解压

跟蹤位图索引的修改

跟蹤游标声明

跟蹤PL/SQL执行

转储PL/SQL执行统计信息

最后要说明的是由于版本不同以上语法可能有些变化但大多数还是可用的

               

上一篇:在Linux下的Oracle 用脚本建库实录

下一篇:关于ORACLE的权限赋予问题