OracleDatabase11g:面向管理员的新增功能12-2OracleDatabase11g:面向管理员的新增功能12-3OracleDatabase11gR1故障管理故障可诊断性基础结构的目标如下:•预防性地检测问题•检测到问题后,限制损坏和中断•减少问题诊断时间•减少问题解决时间•简化客户与Oracle技术支持之间的互动OracleDatabase11g:面向管理员的新增功能12-4简化诊断:自动诊断工作流通过一个始终处于打开状态的内存中跟踪工具,数据库组件可以在严重错误故障第一次出现时捕获诊断数据。系统将自动维护一个称为“自动诊断资料档案库”的特殊资料档案库,以保存有关严重错误事件的诊断信息。此信息可用于创建要发送到Oracle支持服务以进行调查的意外事件程序包。下面是一个可能的诊断会话工作流:1.意外事件导致EnterpriseManager(EM)中出现预警。2.DBA可通过EM的“Alert(预警)”页查看此预警。3.DBA可以细化到意外事件和问题的详细资料。4.DBA或Oracle支持服务可以决定或要求将信息打包并通过MetaLink发送到Oracle支持服务。DBA可以将文件添加到自动打包的数据中。OracleDatabase11g:面向管理员的新增功能12-5自动诊断资料档案库(ADR)ADR是一个基于文件的资料档案库,用于存放数据库诊断数据(如跟踪、意外事件转储和程序包、预警日志、健康状况监视器报告、核心转储等)。它对存储在任何数据库外的多个实例和多种产品使用一个统一的目录结构。因此,可用于数据库关闭时的问题诊断。从OracleDatabase11gR1开始,数据库、自动存储管理(ASM)、集群就绪服务(CRS)和其它Oracle产品或组件将所有诊断数据都存储在ADR中。每种产品的每个实例都将诊断数据存储在自己的ADR主目录下。例如,在具有共享存储和ASM的RealApplicationClusters环境中,每个数据库实例和每个ASM实例在ADR中都有一个主目录。ADR的统一目录结构对各种产品和实例使用一致的诊断数据格式,而且还有一组统一的工具,使客户和Oracle技术支持可以相互关联并分析多个实例的诊断数据。从OracleDatabase11gR1开始,将忽略传统的…_DUMP_DEST初始化参数。ADR根目录又称为ADR基目录,其位置由DIAGNOSTIC_DEST初始化参数设定。如果省略此参数或将其保留为空,数据库将在启动时按如下方式设置DIAGNOSTIC_DEST:如果已设置了环境变量ORACLE_BASE,则将DIAGNOSTIC_DEST设置为$ORACLE_BASE。如果未设置环境变量ORACLE_BASE,则将DIAGNOSTIC_DEST设置为$ORACLE_HOME/log。OracleDatabase11g:面向管理员的新增功能12-6自动诊断资料档案库(ADR)(续)ADR基目录中可以包含多个ADR主目录,其中每个ADR主目录都是一个根目录,用于存放特定Oracle产品或组件的特定实例的全部诊断数据。前一张幻灯片的图形中显示了数据库的ADR主目录位置。另外,还生成了两个预警文件。一个是文本形式的预警文件(与早期版本OracleDB使用的预警文件非常相似),位于各个ADR主目录的TRACE目录下。还有一个符合XML标准的预警消息文件,存储在ADR主目录内的ALERT子目录下。可使用EnterpriseManager和ADRCI实用程序查看文本格式的预警日志(已删除了XML标记)。此幻灯片中的图形显示了ADR主目录的目录结构。INCIDENT目录包含多个子目录,每个子目录均以特定意外事件命名,并且仅包含与该意外事件相关的转储。HM目录包含由健康状况监视器生成的检查器运行报告。还有一个METADATA目录,其中包含资料档案库自身的重要文件。可以将此目录比作数据库字典。可使用ADRCI查询此字典。ADR命令解释器(ADRCI)是一个实用程序,可用于执行支持工作台允许的所有任务(但是仅限于在命令行环境中)。使用ADRCI实用程序,您还可以查看ADR中跟踪文件的名称以及删除了XML标记、具有和不具有内容筛选功能的预警日志。此外,还可以使用V$DIAG_INFO列出一些重要的ADR位置。OracleDatabase11g:面向管理员的新增功能12-7ADRCI:ADR命令行工具ADRCI是一个命令行工具,包含在OracleDatabase版本11g中引入的故障可诊断性基础结构中。使用ADRCI,您可以:•查看自动诊断资料档案库(ADR)中的诊断数据。•将意外事件和问题信息打包成zip文件,以传输到Oracle技术支持。此操作是使用称为意外事件打包服务(IPS)的服务完成的。ADRCI具有丰富的命令集,可在交互模式下使用,也可以在脚本中使用。此外,ADRCI还可以使用与SQL*Plus执行SQL脚本和PL/SQL命令相同的方式执行ADRCI命令脚本。由于未打算保护ADR中数据的安全,所以没有必要登录到ADRCI。ADR数据仅受对ADR目录的操作系统权限保护。打包和以其它方式管理诊断数据的最简单方法是使用OracleEnterpriseManager的支持工作台。ADRCI提供了一个可代替支持工作台大部分功能的命令行,并添加了一些功能,如列出和查询跟踪文件。本幻灯片示例显示了一个ADRCI会话,该会话中列出了存储在ADR中的所有打开的意外事件。注:有关ADRCI的详细信息,请参阅《Oracle数据库实用程序》指南。OracleDatabase11g:面向管理员的新增功能12-8V$DIAG_INFOV$DIAG_INFO视图列出了所有重要的ADR位置:•ADRBase:ADR基目录的路径•ADRHome:当前数据库实例的ADR主目录的路径•DiagTrace:文本预警日志和后台/前台进程跟踪文件的位置•DiagAlert:XML版本的预警日志的位置•…•DefaultTraceFile:会话的跟踪文件的路径。SQL跟踪文件将写入到这里。OracleDatabase11g:面向管理员的新增功能12-9诊断跟踪的位置本幻灯片中显示的表说明了既存在于OracleDatabase10g又存在于OracleDatabase11g中的不同类跟踪数据和转储。对于OracleDatabase11g,前台和后台跟踪文件之间没有什么区别。这两种类型的文件都会放入$ADR_HOME/trace目录中。所有非意外事件跟踪都存储在TRACE子目录中。以前的版本会将严重错误信息转储到相应的进程跟踪文件而不是意外事件转储,这就是新旧版本之间的主要区别。从OracleDatabase11g开始,意外事件转储将存放到独立于正常进程跟踪文件的文件中。注:跟踪和转储之间的主要区别在于,跟踪是较为连续的输出(如打开SQL跟踪时),而转储是为了响应事件(如意外事件)而进行的一次性输出。另外,核心是特定于端口的二进制内存转储。在本幻灯片中,$ADR_HOME用于表示ADR主目录,但是,不存在名为ADR_HOME的正式环境变量。OracleDatabase11g:面向管理员的新增功能12-10使用EnterpriseManager查看预警日志可以使用EnterpriseManager或ADRCI实用程序通过文本编辑器查看预警日志。要使用EnterpriseManager查看预警日志,请执行以下操作:1.访问EnterpriseManager中的数据库主页。2.在“RelatedLinks(相关链接)”下,单击“AlertLogContents(预警日志内容)”。此时会显示“ViewAlertLogContents(查看预警日志内容)”页。3.选择要查看的条目编号,然后单击“Go(开始)”。OracleDatabase11g:面向管理员的新增功能12-11使用ADRCI查看预警日志还可以使用ADRCI查看预警日志文件的内容。可以选择更改当前的ADR主目录。使用SHOWHOMES命令列出所有ADR主目录,然后使用SETHOMEPATH命令更改当前的ADR主目录。请确保已正确设置了操作系统环境变量(如ORACLE_HOME),然后在操作系统命令提示符下输入以下命令:adrci。该实用程序会启动,并显示如幻灯片中所示的提示符。然后,使用SHOWALERT命令。要限制输出,可以使用–TAIL选项查看最近的记录。这将显示预警日志的最后部分(大约20到30条消息),然后等待更多消息进入预警日志中。这些刚刚进入到预警日志的消息也会显示出来。使用此命令,可以对预警日志进行实时监视。按CTRL-C可停止等待并返回到ADRCI提示符处。如果需要,还可以指定要打印的行数。还可以过滤SHOWALERT命令的输出,如该幻灯片中示例底部所示,您希望只显示包含字符串ORA-600的预警日志消息。注:ADRCI允许您将输出假脱机到文件中,与在SQL*Plus中使用的方法非常相似。OracleDatabase11g:面向管理员的新增功能12-12问题和意外事件为了简化严重错误的诊断和解决过程,故障可诊断性基础结构对OracleDB引入了两个概念:问题和意外事件。•问题是指数据库中的严重错误。ADR将对问题进行跟踪。每个问题都由唯一的问题ID标识,并具有问题关键字,问题关键字是描述问题的属性集。问题关键字中包括ORA错误编号、错误参数值和其它信息。下面是一个可能的严重错误列表:-所有内部错误-ORA-60x错误-所有系统非法访问-(SEGV、SIGBUS)-ORA-4020(库对象上出现死锁)、ORA-8103(对象不再存在)、ORA-1410(ROWID无效)、ORA-1578(数据块已损坏)、ORA-29740(节点逐出)、ORA-255(未装载数据库)、ORA-376(此时无法读取文件)、ORA-4030(进程内存不足)、ORA-4031(无法分配更多字节的共享内存)、ORA-355(更改号次序混乱)、ORA-356(更改说明中的长度不一致)、ORA-353(日志损坏)、ORA-7445(操作系统异常)•意外事件是指出现一次的问题。如果问题出现多次(这种情况较常见),则每次出现时都会创建一个意外事件。ADR将对意外事件进行跟踪。每个意外事件都由数字意外事件ID标识,此ID在一个ADR主目录中是唯一的。OracleDatabase11g:面向管理员的新增功能12-13问题和意外事件(续)如果发生意外事件,数据库会在预警日志中创建一个条目,收集关于该意外事件的诊断数据(堆栈跟踪、进程状态转储和其它重要数据结构转储),使用意外事件ID标记诊断数据,然后将数据存储在为该意外事件创建的ADR子目录中。每个意外事件均具有问题关键字,并映射到一个问题。如果两个意外事件的问题关键字相匹配,则认为它们的根本原因相同。如果大量会话都出现相同的严重错误,则会迅速创建很多诊断信息,此时多于一定数量的意外事件的诊断信息是不必要的。因此,ADR提供了涌进控制,以便在给定时间间隔内仅转储一定数量的属于同一问题的意外事件。请注意,受到涌进控制的意外事件仍然会生成意外事件,它们只是跳过转储操作。默认情况下,对于某个给定问题每小时只允许五个转储。可以将问题视为具有相同故障现象的一组意外事件。引入此概念的主要原因是为了使用户能够更轻松地管理自己系统中的错误。例如,一个出现20次的故障现象将仅报告给Oracle一次。您通常需要管理问题而不是意外事件,可使用IPS将问题打包发送到Oracle技术支持。如果出现严重错误,系统会自动创建最常见的意外事件,但是,您也可以通过EM支持工作台提供的GUI手动创建意外事件。当希望报告的问题不带有在Oracle代码中引发的严重错误时,一般会手动创建意外事件。随着时间的推移,ADR中会累积越来越多的意外事件。使用保留策略,可以指定诊断数据的保留时间。ADR意外事件由两个不同的策略控制:•意外事件元数据保留策略控制元数据的保留时间。此策略的默认设置为一年。•意