暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库的启动——Oracle 11g Automatic Diagnostic Repository新特性

原创 eygle 2019-12-26
1011

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

image.png
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每一个进步都是精心设计的,模块化、规范化正在被不断的加强。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论