关于Oracle数据库故障诊断基础架构

孤人 提交于 2021-02-12 09:37:18

本节包含有关Oracle数据库故障诊断基础结构的背景信息。它包含以下主题:

  • 故障诊断基础架构概述
  • 关于事件和问题
  • 故障诊断基础设施组件
  • 自动诊断信息库的结构,内容和位置

故障诊断基础架构概述


故障诊断基础设施有助于预防,检测,诊断和解决问题。特别针对的问题是严重错误,例如由代码错误,元数据损坏和客户数据损坏引起的错误。

发生严重错误时,会为其分配事件编号,并立即捕获错误的诊断数据(如跟踪文件)并用该编号标记。然后将数据存储在自动诊断信息库(ADR) - 一个基于文件的数据库外部的存储库 - 随后可以通过事件编号检索并分析数据。

故障诊断基础架构的目标如下:

  • 首次故障诊断
  • 预防问题
  • 检测到问题后限制损坏和中断
  • 减少问题诊断时间
  • 减少问题解决时间
  • 简化客户与Oracle支持的交互

实现这些目标的关键是以下技术:

  • 首次故障时自动捕获诊断数据--对于严重错误,首次故障时捕获错误信息的能力大大增加了快速解决问题的机会并缩短了停机时间。一个永远在线的基于内存的跟踪系统主动从许多数据库组件中收集诊断数据,并可帮助隔离问题的根本原因。这种主动诊断数据与飞机“黑匣子”飞行记录仪收集的数据相似。当检测到问题时,会生成警报,并激活故障诊断基础架构以捕获和存储诊断数据。数据存储在数据库之外的存储库中(因此在数据库关闭时可用),并且可以通过命令行实用程序和企业管理器轻松访问。
  • 标准化的跟踪格式--标准化跨所有数据库组件的跟踪格式,DBA和Oracle支持人员可以使用一套工具进行问题分析。问题更容易诊断,停机时间减少。
  • 健康检查--在检测到严重错误后,故障诊断基础架构可以运行一个或多个运行状况检查,以对关键错误执行更深入的分析。然后将健康检查结果添加到为错误收集的其他诊断数据。单独的健康检查会查找数据块损坏,撤销和重做损坏,数据字典损坏等等。作为DBA,您可以定期或根据需要手动调用这些健康检查。
  • 事件包装服务(IPS)和事件包--IPS使您能够自动并轻松地收集诊断数据 - 跟踪,转储,运行状况检查报告等 - 关键错误,并将数据打包到zip文件中,以便传输到Oracle支持。由于与关键错误相关的所有诊断数据都标有该错误的事件编号,因此您不必搜索跟踪文件和其他文件以确定分析所需的文件;事件打包服务会自动识别所需文件并将其添加到zip文件中。在创建zip文件之前,IPS首先将诊断数据收集到称为事件包(包)的中间逻辑结构中。包存储在自动诊断信息库中。如果您选择,则可以访问此中间逻辑结构,查看和修改其内容,随时添加或删除其他诊断数据,准备就绪后,从包中创建zip文件。完成这些步骤后,即可将zip文件上传到Oracle支持。
  • 数据恢复顾问--Data Recovery Advisor集成了数据库运行状况检查和RMAN,以显示数据损坏问题,评估每个问题的范围(关键,高优先级,低优先级),描述问题的影响,推荐修复选项,进行可行性检查客户选择的选项,并自动修复过程。
  • SQL测试用例生成器--对于许多与SQL有关的问题,获得可重复的测试用例是解决问题速度的重要因素。 SQL测试案例生成器可以自动完成收集尽可能多关于问题及其发生环境信息的困难和耗时的过程。在快速收集这些信息后,您可以将其上传到Oracle支持部门,以便支持人员轻松而准确地重现问题。

Oracle数据库性能调优指南以获取有关SQL Test Case Builder的更多信息

 关于事件和问题


为了便于诊断和解决严重错误,故障诊断基础架构为Oracle数据库引入了两个概念:问题和事件。

问题是数据库实例,Oracle自动存储管理(Oracle ASM)实例或其他Oracle产品或组件中的严重错误。严重错误显示为内部错误(如ORA-00600)或其他严重错误(如ORA-07445(操作系统异常)或ORA-04031(共享池内存不足))。在ADR中追踪问题。每个问题都有一个问题密钥,它是描述问题的文本字符串。它包含一个错误代码(如ORA 600),在某些情况下还包含一个或多个错误参数。

事件是一个单一的问题。当多次出现问题(严重错误)时,会为每个事件创建一个事件。事件在自动诊断信息库(ADR)中进行时间戳记和跟踪。每个事件都通过数字事件ID进行标识,这在ADR中是唯一的。发生事件时,数据库:

  • 在警报日志中输入一个条目。
  • 向Oracle企业管理器(企业管理器)发送事件警报。
  • 以转储文件的形式(事件转储)收集有关事件的首次故障诊断数据。
  • 将事件标记为事件ID标记。
  • 将事件转储存储在为该事件创建的ADR子目录中。

诊断和解决严重错误通常以事件警报开始。事件警报显示在企业管理器数据库主页或Oracle自动存储管理主页上。数据库主页还会在其相关警报部分显示Oracle ASM实例或其他Oracle产品或组件中的任何重要警报。查看警报后,您可以使用企业管理器或ADRCI命令行实用程序查看问题及其相关事件。

以下部分提供有关事件和问题的更多信息:

  • 事故防洪
  • 整个拓扑中的相关问题

事故防洪

可以想象,一个问题可能会在短时间内产生几十个甚至几百个事件。这会产生太多的诊断数据,这会消耗ADR中的太多空间,并可能会减慢诊断和解决问题的工作量。出于这些原因,故障诊断基础设施在达到特定阈值后将洪水控制应用于事件发生。洪水控制事件是生成警报日志条目的事件,记录在ADR中,但不会生成事件转储。受洪水控制的事件提供了一种方法,告知您正在发生严重错误,而不会使系统超载以获得诊断数据。在使用企业管理器或ADRCI命令行实用程序查看事件时,您可以选择查看或隐藏受洪水控制的事件。

事故洪水控制的阈值水平是预先确定的,不能改变。它们定义如下:

  • 在一小时内发生同一问题密钥的五起事件后,此问题密钥的后续事件受到洪水控制。正常(非洪水控制)记录该问题密钥的事件将在下一小时再次开始。
  • 在一天内对同一问题密钥发生25次事件后,此问题密钥的后续事件受到洪水控制。正常记录该问题密钥的事件将在第二天再次开始。

另外,在一个小时内发生了50次针对相同问题密钥的事件,或者在同一天发生了250次针对相同问题密钥的事件后,此问题密钥的后续事件根本不会记录在ADR中。在这些情况下,数据库会向警报日志中写入一条消息,指出不会记录更多事件。只要此问题密钥的事件继续生成,此消息就会每10分钟添加到警报日志中,直到小时或一天过期。在小时或白天到期时,正常记录该问题密钥的事件再次开始。

整个拓扑中的相关问题

对于数据库实例中发现的任何问题,可诊断性框架可以在整个Oracle数据库安装的拓扑结构中识别相关问题。在单个实例环境中,可以在本地Oracle ASM实例中识别相关问题。在Oracle RAC环境中,可以在任何其他节点上的任何数据库实例或Oracle ASM实例中识别相关问题。在调查问题时,您可以查看和收集有关任何相关问题的信息。

如果问题在指定的时间段内发生或共享相同的执行上下文标识符,则问题与原始问题有关。执行上下文标识符(ECID)是用于通过Oracle软件堆栈标记和跟踪单个调用的全局唯一标识符,例如,调用Oracle融合中间件,然后调用Oracle数据库以检索数据。 ECID通常在中间层生成,并作为Oracle调用接口(OCI)属性传递到数据库。当单个调用在Oracle软件堆栈的多个层次上发生故障时,生成的问题将使用相同的ECID进行标记,以便将它们关联起来。然后您可以确定发生问题的层。

故障诊断基础设施组件


以下是故障诊断基础架构的关键组件:

  • 自动诊断信息库(ADR)
  • 警报日志
  • 跟踪文件,转储和核心文件
  • 其他ADR内容
  • 企业管理器支持工作台
  • ADRCI命令行实用程序

自动诊断信息库(ADR)

ADR是一个基于文件的数据库诊断数据库,如跟踪,转储,警报日志,运行状况监控报告等。它具有跨多个实例和多个产品的统一目录结构。从版本11g开始,数据库,Oracle自动存储管理(Oracle ASM),侦听器和其他Oracle产品或组件将所有诊断数据存储在ADR中。每个产品的每个实例都将诊断数据存储在ADR内自己的主目录下。例如,在具有共享存储和Oracle ASM的Oracle Real Application Clusters环境中,每个数据库实例和每个Oracle ASM实例都有一个ADR主目录。 ADR的统一目录结构,跨产品和实例的一致诊断数据格式以及统一的工具集使客户和Oracle支持部门能够跨多个实例关联和分析诊断数据。

从Oracle数据库11g版开始,因为所有诊断数据(包括警报日志)都存储在ADR中,所以不建议使用初始化参数BACKGROUND_DUMP_DEST和USER_DUMP_DEST。它们由初始化参数DIAGNOSTIC_DEST替代,该参数标识ADR的位置。

 

自动诊断信息库的结构,内容和位置”以获取有关DIAGNOSTIC_DEST参数和ADR家庭的更多信息。

警报日志


警报日志是一个XML文件,它是数据库消息和错误的按时间顺序排列的日志。它存储在ADR中,并包含有关以下内容的消息:

  • 严重错误(事件)
  • 管理操作,例如启动或关闭数据库,恢复数据库,创建或删除表空间等
  • 自动刷新物化视图时出错
  • 其他数据库事件

您可以使用Enterprise Manager和ADRCI实用程序以文本格式查看警报日志(剥离XML标签)。为了向后兼容,ADR中还存储了警报日志的文本格式版本。但是,Oracle建议使用XML格式的版本对警报日志内容进行任何分析,因为文本格式是非结构化的,并且可能会从发布版本更改为发布版本

跟踪文件,转储和核心文件


 

跟踪文件,转储和核心文件包含用于调查问题的诊断数据。它们存储在ADR中。

跟踪文件

每个服务器和后台进程都可以写入关联的跟踪文件。跟踪文件在流程的整个生命周期中定期更新,并且可以包含有关流程环境,状态,活动和错误的信息。另外,当进程检测到严重错误时,它将有关错误的信息写入其跟踪文件。 SQL跟踪工具还创建跟踪文件,这些文件提供有关各个SQL语句的性能信息。您可以为会话或实例启用SQL跟踪。

跟踪文件名称是平台相关的。通常,数据库后台进程跟踪文件名包含Oracle SID,后台进程名称和操作系统进程号,而服务器进程跟踪文件名包含Oracle SID,字符串“ora”和操作系统进程号。文件扩展名是.trc。服务器进程跟踪文件名称的示例是orcl_ora_344.trc。跟踪文件有时会附带相应的跟踪图(.trm)文件,其中包含有关跟踪文件的结构信息并用于搜索和导航

 Oracle数据库包含可帮助您分析跟踪文件的工具。有关应用程序跟踪,SQL跟踪和跟踪工具的更多信息,请参阅Oracle数据库性能调整指南

 

转储

转储是特定类型的跟踪文件。转储通常是响应事件(如事件)的诊断数据的一次性输出,而跟踪往往是连续输出诊断数据。发生事件时,数据库会将一个或多个转储写入事件创建的事件目录。事件转储还包含文件名中的事件编号。

 

核心文件

核心文件包含内存转储,采用全二进制,端口特定的格式。核心文件名包括字符串“core”和操作系统进程ID。核心文件仅适用于Oracle支持工程师。在所有平台上都找不到核心文件。

 

其他ADR内容


 

除了前面部分提到的文件外,ADR还包含健康状况监控报告,数据修复记录,SQL测试用例,事件包等。这些组件在本章稍后介绍。

 

企业管理器支持工作台


 

企业管理器支持工作台(支持工作台)是一种工具,可让您调查,报告并在某些情况下修复问题(严重错误),所有这些都使用易于使用的图形界面。 Support Workbench为您提供了一种自助服务方式,可以收集首次故障诊断数据,获取支持请求编号,并以最短的时间和最短的时间将诊断数据上载到Oracle支持,从而缩短上载时间,解决问题。 Support Workbench还建议并提供对Oracle顾问的简便访问,帮助您修复与SQL相关的问题,数据损坏问题等。

 

ADRCI命令行实用程序


ADR命令解释器(ADRCI)是一款实用程序,可让您在命令行环境中调查问题,查看运行状况检查报告并打包首次失败的诊断数据。然后您可以将该软件包上传到Oracle支持。 ADRCI还使您能够查看ADR中的跟踪文件的名称,并查看带有和不带内容过滤的剥离的XML标签的警报日志。

 

自动诊断信息库的结构,内容和位置


自动诊断信息库(ADR)是存储在数据库之外的目录结构。因此,它可用于数据库关闭时的问题诊断。

ADR根目录被称为ADR基础。它的位置由DIAGNOSTIC_DEST初始化参数设置。如果省略此参数或将其保留为空,则数据库在启动时设置DIAGNOSTIC_DEST,如下所示:

  • 如果设置了环境变量ORACLE_BASE,则将DIAGNOSTIC_DEST设置为由ORACLE_BASE指定的目录。
  • 如果未设置环境变量ORACLE_BASE,则将DIAGNOSTIC_DEST设置为ORACLE_HOME / log。

在ADR基础内,可以有多个ADR家庭,每个ADR家庭都是特定Oracle产品或组件的特定实例的所有诊断数据的根目录 - 跟踪,转储,警报日志等等。例如,在具有Oracle ASM的Oracle Real Application Clusters环境中,每个数据库实例,Oracle ASM实例和侦听器都有一个ADR主目录。

ADR家庭驻留在根据产品或组件类型命名的ADR基础子目录中。图9-1说明了这些顶层子目录

Figure 9-1 Product/Component Type Subdirectories in the ADR

根据您的配置,可能会在ADR中创建其他子目录。某些产品会自动清除来自ADR的过期诊断数据。对于其他产品,您可以定期使用ADRCI实用程序PURGE命令来清除过期的诊断数据。

 每个ADR家的位置由以下路径给出,该路径从ADR基本目录开始:

diag/product_type/product_id/instance_id

作为示例,表9-1列出了Oracle数据库实例的各种路径组件的值。

Table 9-1 ADR Home Path Components for Oracle Database

Path Component Value for Oracle Database
product_type rdbms
product_id DB_UNIQUE_NAME
instance_id SID

例如,对于SID和数据库唯一名称均等于orclbi的数据库,ADR主目录位于以下位置:

ADR_base/diag/rdbms/orclbi/orclbi/

同样,单实例环境中Oracle ASM实例的ADR主路径将为:

ADR_base/diag/asm/+asm/+asm/

ADR主目录子目录

在每个ADR主目录中包含包含诊断数据的子目录。表9-2列出了其中一些子目录及其内容。

Table 9-2 ADR Home Subdirectories

Subdirectory Name Contents
alert XML格式的警报日志
cdump 核心文件
incident 多个子目录,其中每个子目录都为特定事件命名,每个子目录包含仅与该事件有关的转储
trace 后台和服务器进程跟踪文件,SQL跟踪文件以及文本格式的警报日志
(others) ADR home的其他子目录存储事件包,健康监控报告和其他信息

Figure 9-2 ADR Directory Structure for a Database Instance

 

 ADR在Oracle Real Application Clusters环境中运行

在Oracle Real Application Clusters(Oracle RAC)环境中,每个节点可以拥有基于自己的本地存储的ADR,或者可以将ADR基础设置为共享存储上的某个位置。您可以使用ADRCI查看单个报告上所有实例的聚合诊断数据。

 ADR在Oracle客户端中

Oracle客户端的每次安装都包含一个ADR,用于与任何Oracle Client组件中的关键故障相关的诊断数据。 ADRCI实用程序随Oracle客户端一起安装,因此您可以检查诊断数据并打包,以便将其上传到Oracle支持。

 使用V $ DIAG_INFO视图查看ADR位置

V $ DIAG_INFO视图列出了当前Oracle数据库实例的所有重要ADR位置。

SELECT * FROM V$DIAG_INFO;

INST_ID NAME                  VALUE
------- --------------------- -------------------------------------------------------------
      1 Diag Enabled          TRUE
      1 ADR Base              /u01/oracle
      1 ADR Home              /u01/oracle/diag/rdbms/orclbi/orclbi
      1 Diag Trace            /u01/oracle/diag/rdbms/orclbi/orclbi/trace
      1 Diag Alert            /u01/oracle/diag/rdbms/orclbi/orclbi/alert
      1 Diag Incident         /u01/oracle/diag/rdbms/orclbi/orclbi/incident
      1 Diag Cdump            /u01/oracle/diag/rdbms/orclbi/orclbi/cdump
      1 Health Monitor        /u01/oracle/diag/rdbms/orclbi/orclbi/hm
      1 Default Trace File    /u01/oracle/diag/rdbms/orclbi/orclbi/trace/orcl_ora_22769.trc
      1 Active Problem Count  8
      1 Active Incident Count 20

 

下表描述了此视图显示的一些信息

Table 9-3 Data in the V$DIAG_INFO View

Name Description
ADR Base ADR基地的路径
ADR Home 当前数据库实例的ADR主目录路径
Diag Trace 后台进程跟踪文件,服务器进程跟踪文件,SQL跟踪文件以及警报日志的文本格式版本的位置
Diag Alert 警报日志的XML格式版本的位置
Default Trace File 当前会话的跟踪文件的路径

使用V $ DIAG_CRITICAL_ERROR视图查看严重错误

V $ DIAG_CRITICAL_ERROR视图列出了当前Oracle数据库版本中指定为严重错误的所有非内部错误。该视图不会列出内部错误,因为内部错误总是被指定为严重错误。

以下示例显示了Oracle Database 11g第2版(11.2.0.2)中的V $ DIAG_CRITICAL_ERROR视图的输出:

SELECT * FROM V$DIAG_CRITICAL_ERROR;

FACILITY   ERROR
---------- ----------------------------------------------------------------
ORA        7445
ORA        4030
ORA        4031
ORA        29740
ORA        255
ORA        355
ORA        356
ORA        239
ORA        240
ORA        494
ORA        3137
ORA        227
ORA        353
ORA        1578
ORA        32701
ORA        32703
ORA        29770
ORA        29771
ORA        445
ORA        25319
OCI        3106
OCI        3113
OCI        3135

 

Table 9-4 Data in the V$DIAG_CRITICAL_ERROR View

Column Description
FACILITY 可以报​​告错误的工具,如Oracle数据库(ORA)或Oracle调用接口(OCI)
ERROR 错误号

 

有关内部错误的更多信息,请参阅“关于事件和问题

 

参考资料


https://docs.oracle.com/cd/E11882_01/server.112/e25494/diag.htm#ADMIN11257

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!