诊断文件简介
- 为了方便Oracle管理员维护和诊断Oracle系统,Oracle 11g引入了自动诊断资料库(ADR)。
- ADR是一个基于文件的资料库,其中存储了数据库的诊断数据,这些数据包括如追踪、卸载的事件、报警日志和健康监督报告等。
- ADR对于安装的多个Oracle实例和多个Oracle产品具有一个统一的目录结构,而且存储在任何数据库之外。因此,在数据库关闭情况下ADR仍然可以访问以进行问题的诊断。
DIAGNOSTIC_DEST参数
- Oracle 11g使用这个参数取代早期版本中的三个参数USER_DUMP_DEST、BACKGROUND_DUMP_DEST、CORE_DUMP_DEST。
- 从Oracle 11g开始,所有追踪信息存放的默认位置都由该参数定义。
- ADR的位置也是由该参数所设定的。
--通过DIAGNOSTIC_DESC参数查看ADR的根目录。
show parameter diagnostic_dest
- Oracle 11g会产生两个报警文件:一个是文本格式的,一个是XML格式的。
- Oracle 11g不再区分前台和后台追踪文件,都存放在 A D R H O M E / t r a c e 目 录 中 ; 致 命 的 错 误 ( c r i t i c a l e r r o r ) 信 息 则 是 存 放 在 ADR_HOME/trace目录中;致命的错误(critical error)信息 则是存放在 ADRHOME/trace目录中;致命的错误(criticalerror)信息则是存放在ADR_HOME/incident目录中。
--通过v$diag_info视图查看ADR目录结构的细节。
select name, value from v$diag_info;
- Diag Trace:为存放文本格式的报警文件和前台或后台进程追踪文件的位置。
- Diag Alert:为存放XML格式的报警文件的位置。
- Default Trace File:为存放会话的追踪文件的路径,SQL追踪文件也存在此地。
利用诊断文件来监督实例
- 诊断文件是一种获取数据库信息的重要工具。
- 它包含了数据库系统运行过程中所遇到的重大事件的有关信息,被用来解决实例所遇到的问题,帮助在日常工作中更好地管理数据库。
- 有3种常见的诊断文件:
报警文件(Alert log file)
后台进程追踪文件(Background trace files)
用户进程追踪文件(User trace files)
报警文件
- 报警文件中包含数据库日常操作的信息,存放在由BACKGROUND_DUMP_DEST参数所定义的目录下,一般命名为alert_.log。
- 该文件必须由数据库管理员来管理。
- 作为一名合格的数据库管理员,应该要每天查看报警文件,以获取数据库的诊断或出错信息。一般从下往上查看,也可以利用报警文件的提示到追踪文件中查找更详细的信息。
--查看报警文件的存储位置
show parameter background_dump_dest
--或者
select value from v$parameter
where name = 'background_dump_dest';
-
报警文件中记录的信息包括:
数据库启动或关闭的时间;
所有非默认初始化参数;
LGWR正在写的日志序列号;
日志的切换信息;
所执行的ALTER语句;
创建的表空间和还原段等。其中,每一记录项都有与之相关的时间戳。
-
查看报警文件的内容示例。
1、首先,以DBA用户依次执行下列语句,修改表空间状态。
alter tablespace users read only;
alter tablespace users read write;
2、然后,打开报警文件,移动到文件末尾查看该文件记录的内容。
后台进程追踪文件
- 后台进程追踪文件记录由任何一个后台进程(如LGWR、SMON等)所探测到的错误。
- 这些文件是当一个后台进程遇到错误时才创建,它们可被用来进行诊断和排错,同报警文件存放在同一个目录中,也存放在由 BACKGROUND_DUMP_DEST参数定义的目录下。
- 其大小由 MAX_DUMP_FILE_SIZE参数来定义,默认为UNLIMITED。
用户进程追踪文件
- 用户进程追踪文件是由用户进程创建,也可以由服务器进程产生。它们包含了用来追踪SQL语句的统计信息和用户的错误信息。
- 这些文件是当一个用户(进程)遇到用户会话错误时创建的,存放在由 USER_DUMP_DEST参数来定义的目录下。
- 其大小由 MAX_DUMP_FILE_SIZE参数来定义,默认为UNLIMITED。
- 如果想让Oracle服务器产生用户追踪文件,需要修改Oracle的一个参数:SQL_TRACE。
- 该参数是一个动态参数,既可以在会话一级修改,也可以在实例一级修改。
开启或终止用户进程追踪
- 会话级(Session level)
--开启用户(进程)追踪:
ALTER SESSION SET SQL_TRACE = TRUE;
--终止用户 (进程)追踪:
ALTER SESSION SET SQL_TRACE = FALSE;
- 实例级(Instance level)
--开启用户(进程)追踪可以通过在初始化参数文件中修改SQL_TRACE参数值来实现:
SQL_TRACE = TRUE
建议:
尽量不要在实例一级开启用户(进程)追踪。
即使在会话一级开启用户(进程)追踪,等追踪结束后也应尽快关闭追踪。