ADR是Oracle一个重要新特性的一角,这个新特性就是故障诊断基础架构-Fault Diagnosability Infrastructure(简称FDI)。

I
一直以来,当用户的数据库出现故障以后,向Oracle请求协助时,反复繁杂的交互与数据收集折磨了无数的用户,而这一工作又是不可缺少的。Oracle也一直试图简化这些工作,提高故障的分析和解决效率。现在新引入的FDI就是来完成这一使命的。
这一架构用来收集和管理诊断数据,通常的诊断数据包括:
- 跟踪文件-trace files
- 转储文件-dumps
- 内核转储文件-core files
- 其他诊断数据等
FDI的一个核心组件就是ADR,左图是一个ADR目录所包含的内容结构,我们看到Oracle将数据库所有的日志等文件进行了归类汇总集合到ADR架构之下。
FDI的引入目的在于更快速的问题诊断与解决、更少的用户交互以及减少和缩减故障的影响。
实现这一架构设想的一项技术是:第一时间自动诊断数据捕获- Automatic capture of diagnostic data upon first failure。当故障出现时,能够第一时间收集到故障信息对于问题的诊断与解决都是至关重要的,Oracle通过一直打开的(always-on)基于内存的(memory-base)的跟踪系统进行信息收集,这是发现问题根源的有利保障。
当数据库故障、错误出现并被检测到时,故障诊断架构就被激活收集诊断数据,并且将数据库不同组件记录的相关数据收集并存储到数据库之外的诊断库中。这一诊断原理非常类似飞机飞行中的"黑匣子(Black Box)",Oracle因此也将FDI称为Oracle数据库的黑匣子,通过这个黑匣子的引入,Oracle希望能够收集到完善完整的数据用于故障诊断。
配合FDI的另外一项技术是事件打包服务-Incident packaging service (IPS)。同一次错误或故障相关的数据可能很多,包括traces, dumps, health check reports以及其他数据,手工收集和整理这些数据曾经是用户必需完成的工作,现在IPS服务帮助我们自动打包压缩这些数据。用户需要做的就是将这些打包数据传输给技术支持即可。
一个Incident package是一个代表一个或多个问题的逻辑结构,缺省情况下一个问题的第一次和最后三次信息被包含在package中。为了能够生成物理Package,你还需要对逻辑结构进行实体化,这一工作可以通过ADRCI进行。
在ADRCI下,通过show incident命令可以显示数据库当前记录的Incident:
[oracle@localhost ~]$ adrci
ADRCI: Release 11.1.0.6.0 - Beta on Mon Aug 4 11:55:09 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
ADR base = "/opt/oracle"
adrci> show incident;
ADR Home = /opt/oracle/diag/rdbms/11gtest/11gtest:
*************************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
-------------------- ----------------------------- ----------------------------------
14601 ORA 7445 [qerfxGCol()+3553] 2008-08-01 16:20:46.067780 +08:00
14545 ORA 7445 [qerfxGCol()+3553] 2008-08-01 16:21:23.318532 +08:00
2 rows fetched
注意当前数据库记录了两次INCIDENT,通过具体的INCIDENT_ID可以查看更为详细的信息:
adrci> show incident -mode DETAIL -p "incident_id=14601";
ADR Home = /opt/oracle/diag/rdbms/11gtest/11gtest:
**********************************************************************
**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
INCIDENT_ID 14601
STATUS ready
CREATE_TIME 2008-08-01 16:20:46.067780 +08:00
PROBLEM_ID 1
CLOSE_TIME <NULL>
FLOOD_CONTROLLED none
ERROR_FACILITY ORA
ERROR_NUMBER 7445
ERROR_ARG1 qerfxGCol()+3553
ERROR_ARG2 SIGBUS
ERROR_ARG3 ADDR:0x20800000
ERROR_ARG4 PC:0xE4A0E09
ERROR_ARG5 Non-existent physical address
ERROR_ARG6 <NULL>
ERROR_ARG7 <NULL>
ERROR_ARG8 <NULL>
SIGNALLING_COMPONENT SQL_Execution
SIGNALLING_SUBCOMPONENT <NULL>
SUSPECT_COMPONENT <NULL>
SUSPECT_SUBCOMPONENT <NULL>
ECID <NULL>
IMPACTS 0
PROBLEM_KEY ORA 7445 [qerfxGCol()+3553]
FIRST_INCIDENT 14601
FIRSTINC_TIME 2008-08-01 16:20:46.067780 +08:00
LAST_INCIDENT 14545
LASTINC_TIME 2008-08-01 16:21:23.318532 +08:00
IMPACT1 0
IMPACT2 0
IMPACT3 0
IMPACT4 0
KEY_NAME PQ
KEY_VALUE (16777216, 1217578841)
KEY_NAME Client ProcId
KEY_VALUE oracle@localhost.localdomain (TNS V1-V3).6813_3086902976
KEY_NAME SID
KEY_VALUE 133.809
KEY_NAME ProcId
KEY_VALUE 25.34
OWNER_ID 1
INCIDENT_FILE /opt/oracle/diag/rdbms/11gtest/11gtest/trace/11gtest_ora_6813.trc
OWNER_ID 1
INCIDENT_FILE /opt/oracle/diag/rdbms/11gtest/11gtest/incident/incdir_14601/11gtest_ora_6813_i14601.trc
1 rows fetched
在相应的目录下,可以找到异常事件的跟踪信息:
[oracle@localhost incdir_14601]$ pwd
/opt/oracle/diag/rdbms/11gtest/11gtest/incident/incdir_14601
[oracle@localhost incdir_14601]$ ls -l
total 2140
-rw-r----- 1 oracle dba 2118047 Aug 1 16:20 11gtest_ora_6813_i14601.trc
-rw-r----- 1 oracle dba 50332 Aug 1 16:20 11gtest_ora_6813_i14601.trm
使用如下命令可以为14601号Incident创建逻辑Package:
adrci> set homepath diag/rdbms/11gtest/11gtest
adrci> ips create package incident 14601
Created package 1 based on incident id 14601, correlation level typical
进一步的可以通过如下命令生成Incident的物理Package,现在这个物理包就是需要发送出去用于技术支持进行诊断所需的文件:
adrci> ips generate package 1 in /opt/oracle/diag
Generated package 1 in file /opt/oracle/diag/ORA7445qe_20080804120317_COM_1.zip, mode complete
如果想了解Oracle自动收集了哪些文件,可以解压缩一下这个压缩包来查看。
我们看到,FDI实际上又是一系列自动化服务的增强,这些增强旨在更快的问题分析诊断、更少的用户交互,从而实现更高的可用性。自动化是Oracle一直坚持不懈的方向。
以下是FDI的几项关键组件:
- Automatic Diagnostic Repository (ADR)
- Alert Log
- Trace Files, Dumps, and Core Files
- Other ADR Contents
- Enterprise Manager Support Workbench
- ADRCI Command-Line Utility
从FRA到ADR以及FDI,可以看到Oracle每一个进步都是精心设计的,模块化、规范化正在被不断的加强。




