一、故障自动诊断概述
  Oracle故障诊断有助于预防,检测,诊断和解决问题。特别针对的问题是诸如由代码错误,元数据损坏和客户数据损坏引起的重大错误。
  当数据库发生严重错误时,Oracle为其分配一个事件号码,立即捕获并标记该错误的诊断数据(如跟踪文件)。然后将数据存储在数据库外部的自动诊断存储库(ADR,一个基于文件的存储库中),随后可以通过事件编号检索数据并对其进行分析。
  二、故障自动诊断的目标
  第一时间发现及故障诊断
  预防故障
  检测到问题后限制损坏和尽可能减少中断
  减少问题诊断时间
  减少问题解决时间
  简化与Oracle Support交互
  三、故障自动诊断使用到的关键技术
  首次故障时自动捕获诊断数据
  对于严重错误,首次故障时捕获错误信息的能力大大增加了快速解决问题并减少停机时间的机会。始终在线的基于内存的跟踪系统主动从多个数据库组件收集诊断数据,并可帮助隔离问题的根本原因。这种主动诊断数据类似于飞机“黑匣子”飞行记录仪收集的数据。当检测到问题时,会生成警报并激活故障诊断基础架构以捕获和存储诊断数据。数据存储在数据库外部的存储库中(因此数据库关闭时可用),并且可以通过命令行实用程序和企业管理器轻松访问。
  标准化跟踪格式
  在所有数据库组件中标准化跟踪格式使DBA和Oracle支持人员能够使用一组工具进行问题分析。问题更容易诊断,从而缩短停机时间。
  健康检查
  在检测到关键错误后,故障诊断基础设施可以运行一次或多次运行状况检查,以对关键错误进行更深入的分析。然后将健康检查结果添加到为错误收集的其他诊断数据。以及可以单独地健康检查如查找数据块损坏,撤消和重做损坏,数据字典损坏等。作为DBA,您可以定期或根据需要手动调用这些运行状况检查。
  事件包装服务(IPS)和事件包
  IPS使您能够自动轻松地收集诊断数据跟踪,转储,运行状况检查报告和更多关于严重错误的信息,并将数据打包到压缩文件中以传输到Oracle技术支持。由于与关键错误相关的所有诊断数据都标记有该错误的事件编号,因此您无需搜索跟踪文件和其他文件来确定分析所需的文件; 事件打包服务自动识别所需的文件,并将其添加到zip文件。在创建zip文件之前,IPS首先将诊断数据收集到称为事件包(包)的中间逻辑结构中。软件包存储在自动诊断存储库中。可以选择,访问这些逻辑结构,查看和修改其内容,随时添加或删除其他诊断数据,准备好后,从包中创建zip文件。完成这些步骤后,可以将zip文件上传到Oracle Support。
  数据恢复顾问
  数据恢复顾问整合了数据库运行状况检查和RMAN以显示数据损坏问题,评估每个问题(关键,高优先级,低优先级)的程度,描述问题的影响,建议修复选项,进行可行性检查客户选择的选项,并自动修复过程。
  SQL测试用例生成器
  对于许多SQL相关的问题,获得可重现的测试用例是问题解决速度的重要因素。SQL测试案例构建器可以自动化一些困难和耗时的过程,尽可能收集有关问题及其发生环境的信息。快速收集这些信息后,您可以将其上传到Oracle Support,以便支持人员轻松准确地重现问题。
  四、自动故障诊断的核心组件
  1、自动诊断存储库(ADR)
  ADR是对数据库诊断进行诊断,将其诊断结果以文件形式保存的的存储仓库,如跟踪,事件转储包,警报日志,健康监视器报告,核心转储等。它有一个统一的目录结构,可跨多个实例和多个产品,存储在任何数据库外部。因此,即使数据库关闭,已产生的诊断文件可用于问题诊断。从Oracle Database 11g R1开始,数据库,自动存储管理(ASM),集群绪服务(CRS)和其他Oracle产品或组件存储所有诊断数据到ADR。每个产品的每个实例存储其自身ADR家目录下的诊断数据目录。例如,在具有共享存储和ASM的Real Application Clusters环境中,每个数据库实例和每个ASM实例在ADR内都有一个主目录。 ADR统一的目录结构,跨产品和实例的一致的诊断数据格式,以及统一的工具集使客户和Oracle支持人员能够跨多个实例关联和分析诊断数据。ADR根目录被称为ADR基础目录。它的位置由DIAGNOSTIC_DEST设置初始化参数。如果此参数被省略或保留为null,则数据库将按如下方式设置DIAGNOSTIC_DEST:如果环境变量ORACLE_BASE已设置,DIAGNOSTIC_DEST设置为 $ ORACLE_BASE。如果环境变量ORACLE_BASE未设置,DIAGNOSTIC_DEST设置为 $ ORACLE_HOME/log。
  注意:
  从第11g Oracle数据库开始,因为包括警报日志在内的所有诊断数据都存储在ADR中,初始化参数BACKGROUND_DUMP_DEST并USER_DUMP_DEST已被弃用。它们由初始化参数替代DIAGNOSTIC_DEST,用于标识ADR的位置。
  下图为自动诊断存储仓库图,展示了ADR概览及相关路径

  
SQL> select * from v$version;
  BANNER
  --------------------------------------------------------------------------------
  Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  SQL> show parameter diag;   --查看ADR基目录
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- ------------------------------
  diagnostic_dest                      string      /app/oracle/ora11g
  SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,
    2  '645746311' QQ from dual;
  AUTHOR  BLOG                         QQ
  ------- ---------------------------- ---------
  Leshami http://blog.csdn.net/leshami 645746311
  SQL> select * from v$diag_info;    --查看完整的ADR相关路径
     INST_ID NAME                   VALUE
  ---------- ---------------------- ----------------------------------------------------------------------
           1 Diag Enabled           TRUE
           1 ADR Base               /app/oracle/ora11g
           1 ADR Home               /app/oracle/ora11g/diag/rdbms/ora11g/ora11g
           1 Diag Trace             /app/oracle/ora11g/diag/rdbms/ora11g/ora11g/trace
           1 Diag Alert             /app/oracle/ora11g/diag/rdbms/ora11g/ora11g/alert
           1 Diag Incident          /app/oracle/ora11g/diag/rdbms/ora11g/ora11g/incident
           1 Diag Cdump             /app/oracle/ora11g/diag/rdbms/ora11g/ora11g/cdump
           1 Health Monitor         /app/oracle/ora11g/diag/rdbms/ora11g/ora11g/hm
           1 Default Trace File     /app/oracle/ora11g/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_13535.trc
           1 Active Problem Count   1
           1 Active Incident Count  5