ADR的结构和位置

R的结构和位置

ADR提供很大诊断帮助的方式之一是总是对问题诊断可用,因为它位于数据库之外。因此,在一
个数据库崩溃之后,你可以访问ADR,不会有什么障碍。数据库默认创建ADR--唯一需要确定的是它的位置。用新的初始化参数diagnostic_dest指定ADR的根目录,如下所示:

 

ADR的这个根目录称为ADR基目录。即使你省略了diagnostic_dest初始化参数,Oracle也会创建一个ADR。在这样的情况下,数据库将在以下某个位置创建ADR:

如果你设置了ORACLE_BASE环境变量,则diagnostic_dest的默认值被设置为同样的目录;

如果你没有设置ORACLE_BASE环境变量,Oracle将默认设置diagnostic_dest参数值为$ORACLE_HOME/log。

在Oracle Real Application Cluster(RAC)环境中,可以把一个节点的ADR基目录设置在本地存储或共享存储上。

说明 在Oracle Database 11g中,不需要设置传统的*_dest初始化参数,例如user_dump_dest参数。仅需给新的初始化参数diagnostic_dest提供一个值即可。

diagnostic_dest参数是一个动态可修改的初始化参数,可以用alter system命令修改它。

ADR存储所有Oracle产品的诊断数据。ADR为每个Oracle产品的每个实例分配一个独立的主目录。因此,单个ADR基目录可包含多个ADR主目录,每个主目录指向一个不同的Oracle实例。每个ADR主目录都是一个数据库实例或者任何其他Oracle产品或组件的所有诊断文件的根目录。某个ADR主目录的位置如以下目录路径所示:

 

例如,如果设置diagnostic_dest参数为/u05/app/oracle,则具有同样SID和数据库名的prod1数据库的ADR主目录应该如下:

 

在上面的例子中,product_type为rdbms,因为你处理的是一个数据库。在每个ADR主目录中,将会找到Oracle在其中存储该实例的诊断数据的子目录。下面列出了ADR主目录中重要的子目录。

alter:包含实例的预警日志(XML格式);

cdump:包含核心文件;

hm:包含Health Monitor报表;

incident:包含每个意外事件的子目录,每个意外事件的子目录中还包含该意外事件的所有跟踪转储;

incpkg:包含你为上传到Oracle Support而创建的意外事件包;

ir:包含为每个实例创建的意外事件报表;

trace:存储用户会话跟踪文件。

可查询V$DIAG_INFO视图,找出所有与ADR有关的位置:

 

可以看到,V$DIAG_INFO视图给出了数据库中活动问题和意外事件的数目。

我们已经介绍了新故障可诊断基础设施的基本结构,下面将讨论使用此诊断框架调查和解决问题。

2.2  调查和解决问题

尽管可以利用Database Control中的Support Workbench实用工具访问存储在ADR中的所有诊断数据,不过Oracle还提供了一个管理ADR数据的强有力的新命令行工具adrci(ADR Control Interface)。可利用adrci工具与两个Oracle新提供的程序包DBMS_HM和DBMS_SQLDIAG来调查和报告问题,并在可能时解决问题。adrci工具是Support Workbench的命令行替代物,它提供了列出和查询跟踪文件等额外功能。在下面两节中,我们先讨论adrci工具的使用,然后再介绍用Support Workbench查看问题解决办法。

2.2.1  使用命令行工具adrci

Oracle提供了一个名为adrci的新命令行工具,用来帮助挖掘存储在ADR中的诊断数据。除了让你查看数据库存储在ADR中的诊断数据外,adrci还提供了其他一些重要功能,它允许把意外事件和问题信息打包成ZIP文件发送给Oracle Support。诊断数据包括跟踪和转储文件、预警日志条目以及Oracle Database 11g的新Health Monitor报表等大家熟悉的数据。

可以按交互方式使用adrci,或者在批量执行的操作系统脚本内使用adrci命令。下面我们简要地看一下如何以两种方式使用adrci。

1.以命令行方式使用adrci

为进入adrci并在其中执行命令,只需在以安装的Oracle软件的拥有者身份登录后,在命令行上输入adrci即可:

 

一旦看到adrci提示,就可以开始输入adrci命令了。注意,在交互方式下,可以在adrci命令行上分别输入每条命令,或者可以执行由adrci命令组成的脚本。为了查看并列出所有adrci命令,可在adrci提示下输入help或在命令行上输入adrci -help,如下所示:

 

输入exit或quit,退出adrci命令行界面。

2.以脚本或批处理方式使用adrci

除交互地使用adrci外,还可以在脚本和操作系统批处理文件中使用adrci命令。为了把一组adrci命令组成脚本,用想要执行的这些adrci命令建立一个文件,然后在adrci提示下执行此脚本文件即可。

为了在外壳脚本或Windows批处理文件中使用adrci命令,可使用命令行参数exec,向其传递想要执行的adrci命令来调用adrci。调用adrci时,必须在批处理文件中使用以下语法:

 

例如,如果想在一个脚本中使用两条adrci命令show homes和show incident,可用以下语法:

 

注意,每条命令必须用一个分号(;)分隔。下面举一个例子,说明如何用ADR命令行接口完成与通常的vialert$ORACLE_SID.log命令相同的工作,此命令允许你在文本编辑器中读取预警日志:

 

可以如下面的脚本例子所示,选择将adrci命令输送到一个外壳脚本,它让你看到包含词ORA-的所有预警日志项(指出一个与Oracle有关的错误):

 

可以批处理方式使用这组adrci命令。


设置homepath

所发布的所有adrci命令都将在ADR根目录下运行,ADR根目录为ADR的基目录。执行show base命令查看ADR基目录的位置:

 

在执行一条adrci命令时,它位于Oracle搜索诊断数据的"当前"ADR的homepath定义的ADR主目录中。如果你没有明确设置homepath(主目录路径),则ADR基目录下的所有ADR主目录都是当前的。ADR命令总是在当前ADR主目录中的诊断数据上运行。因此,如果你执行一条命令,如执行show tracefile,adrci将显示当前的每个ADR主目录中的所有跟踪文件。show homes命令显示所有可用的ADR主目录:

 

虽然show homes命令显示了3个不同Oracle实例的的3个不同的ADR主目录,但ADR主目录路径本身没有设置,如下所示:

 

如果没有设置ADR主目录路径,则ADR基目录下的所有实例主目录都被认为是活动的或当前的,理解这一点很重要。在这里,ADR基目录下的所有3个ADR主目录默认都是"当前的"。如果只想将adrci命令应用到单个ADR主目录,可用set homepath命令来达到,此命令允许更改当前主目录路径:

 

如果需要,可将ADR主目录路径设置为多个ADR主目录。这样做时,可同时使用多个ADR主目录的那些adrci命令(如show incident和show alert)将在当前ADR路径定义的所有ADR主目录下搜索诊断数据。只能在单个ADR主目录为当前的情况下执行所有其他adrci命令。如果在多个ADR主目录为当前的情况下执行这样的命令,adrci将出现错误。例如,在有多个当前主目录的情况下执行ips命令(ips命令创建一个意外事件包,本章稍后介绍)创建一个包,将出现如下的错误:

 

显然,必须先用set homepath命令设置单个ADR主目录路径,才能用ips命令创建意外事件包之前。

4.查看命令列表

可在adrci命令行上输入help命令查看可以使用哪些adrci命令:

 

如果想查看可以使用哪些adrci命令行选项,请在命令行上输入adrci -help。

可以在关键字help后输入命令名查看该命令的其他信息。例如,下面的命令显示show incident命令的语法和使用细节:

 

我们在以下几节中强调可用adrci工具执行的某些关键任务。

5.查看预警日志

在Oracle Database 11g中,预警日志以文本格式和XML格式的文件存储。可用adrci查看无XML标记的XML格式的预警日志。要查看预警日志的内容,在adrci提示下输入show alert即可:

 

说明 Oracle Database 11g中的每个实例都有两个预警日志。在ADR主目录下的alert目录中有一个基于XML的预警日志文件,在ADR主目录下的trace目录中有一个基于普通文本的预警日志文件。

上面的例子提供了几个预警日志文件选项,因为在执行show alert命令前我们没有设置主目录路径。如果将主目录路径设置为某个特定数据库实例的主目录路径,则show alert命令的反应将有所不同,如下所示:

 

其中的命令显示完整的预警日志(去除XML标记的)。此外,adrci将当前日志文件的完整内容输出到/tmp目录,如两个show alert命令例子所示。可使用带-tail选项的show alert命令查看预警日志的20到30条消息,如下所示:

 

如果想查看预警日志中的最后100条消息,可执行命令show alert -tail 100。alert -tail命令类似于查看Unix和Linux文本文件(它们允许你动态地监视添加)时所使用的tail命令。可以执行下面的命令查看预警日志中是否存在ORA-600错误:

 

如果你想把预警日志的内容不带XML标记地捕捉到一个不同的文件,可在执行show alert命令前使用spool命令来达到此目的,如下所示:

 

我们不想用查看Oracle Database 11g预警日志的许多方法来烦你,但如果我们不提仍然可以像过去一样,通过在V$DIAG_INFO视图的查询(select *)中查找Diag Trace项的路径来直接访问纯文本预警日志,就是我们的失职。例如,这里的例子中,Diag Trace项具有路径/u01/app/oracle/diag/rdbms/ orcl11/orcl11/trace。可以用一个文本编辑器从其中打开预警日志,并查看所关心的内容。这是文本格式的预警日志,类似于旧数据库版本中所用的预警日志。这表示Oracle现在为实例生成两个预警日志,一个为文本格式,另一个为XML格式。

列出跟踪文件

可使用show tracefile命令列出当前ADR主目录路径中所有现有跟踪文件:

 

show tracefile命令列出所有现有跟踪文件。

7.查看意外事件

使用show incident命令可以查看所有打开的意外事件。此报表将给出数据库遇到并记入ADR的每个意外事件的意外事件ID、问题时间和创建时间。如果adrci主目录路径中有多个当前adrci主目录,show incident命令将显示各ADR主目录中所有实例的打开的意外事件。

下面举一个例子,展示对于多个当前ADR主目录,show incident命令的输出:

 

show incident命令显示,对于第一个数据库(auxdb)没有打开的意外事件。对于第二个数据库(eleven),有两个打开的意外事件,而对于第三个数据库(orcl11),有3个打开的意外事件。

如果想深入查看某个意外事件,可以使用带-p选项的show incident命令,如下所示(只显示输出的最后部分):

 

show incident命令有两个选项,分别为谓词串(-p)和方式(-mode)。可以用谓词串来指定各字段名,如在这个例子中指定字段incident_id。必须用一对双引号将字段名引起来。至于可在谓词串中使用的所有字段名的列表,在adrci命令行上输入describe incident,如下所示:

 

除谓词串(-p)选项外,在这个例子中我们还使用了-mode选项(detail)指定详细显示输出。-mode选项的其他设置为basic和brief,两者都提供更短的输出显示。

意外事件打包

Oracle Database 11g的一个最有用的新特性是为方便将诊断数据传递给Oracle Support而打包意外事件的新框架。一个意外事件包至少给出一个问题。在创建一个意外事件包时,可以在包中添加一个或多个问题,然后,Support Workbench将自动添加这些问题的跟踪文件和转储文件。默认时,每个意外事件包只包含每个问题的前3个和后3个意外事件。意外事件包含有与特定意外事件有关的所有诊断数据,或者可以安排一个时间段,它含有该时间段内所有意外事件的数据。

在创建了一个意外事件包后,可以对此意外事件包添加或删除文件。还可以编辑组成包的外部文件,删除某些敏感数据。

为了创建具有某个意外事件(或一组意外事件、某个时间段的意外事件)的所有支持诊断数据的自含意外事件包,必须遵循以下几个步骤。

(1) 创建一个逻辑包:必须首先创建一个逻辑包,之所以这样称呼是因为它并不以可以实际发送到某个地方的独立文件形式存在,它仅作为ADR中的元数据存在。可以创建一个没有诊断数据的空逻辑包,或者建立一个基于意外事件号、问题号或时间间隔的逻辑包,它将自动包含相关问题/意外事件的诊断数据。使用命令ips create package可以创建逻辑包。这条命令有许多变化。可以选择基于某个问题号、意外事件号、问题键或时间段创建一个包。

(2) 将诊断数据添加到逻辑包:这是一个可选步骤,只在步骤(1)中创建了一个空逻辑包后采用。基于问题和意外事件的逻辑包已经包含了相关的诊断数据。

(3) 生成物理包(压缩的文件):在最后这一步中,生成要发送到Oracle Support的物理压缩文件。可以建立同一逻辑包的增量ZIP文件,添加更多信息到ZIP文件。下面是一个完整(COM)ZIP文件的例子,它具有同一逻辑包的一个关联的增量(INC)ZIP文件:

 

当准备将意外事件包上传给Oracle Support时,可使用Support Workbench或adrci实用程序收集意外事件包的元数据引用的所有文件,打包成一个ZIP文件,然后再上传给Oracle Support。我们首先介绍如何用adrci实用程序建立意外事件包。

在adrci中用IPS命令管理意外事件包。下面是打包一个意外事件以便发送给Oracle Support工作人员分析的步骤。

(1) 用ips create package命令建立一个新逻辑包。下面的例子将说明如何创建一个空逻辑包,这表示不用指定意外事件或时间间隔:

 

注意,可以用分号结束adrci命令,也可以不用。所创建的包从1开始顺序编号。在这个例子中,ips create package命令建立意外事件包1,因为这是本ADR基目录下建立的第一个包。

(2) 因为步骤(1)中创建了一个空逻辑包,所以必须给它添加诊断信息。可以给该逻辑包添加意外事件和文件。下面的例子说明如何将特定的意外事件添加到逻辑包:

 

在这个步骤中,包中仍然没有实际的诊断数据。它所具有的只是想要Oracle Support诊断的意外事件的元数据。下一步将建立发送到Oracle Support的实际物理包。

(3) 执行ips generate package命令生成物理包。在执行此命令时,adrci收集所有必需的诊断文件,并把它们打包到一个ZIP文件。

上面的ips generate命令在/u01/app/oracle/adrci目录中建立一个ZIP文件,然后可以将其发送到Oracle Support用于诊断支持。这样建立的文件称为完整ZIP文件。如果稍后想添加或更改诊断数据,可通过生成一个增量ZIP文件来完成。使用带关键字incremental的ips generate package命令生成增量ZIP文件:

 

下面的例子说明了如何分别命名完整的和增量的ZIP文件:

 

例子中的第一个文件的文件名中有COM标记,指出它是一个完整的ZIP文件。第二个文件使用INC标记,表示它是一个增量ZIP文件。这些文件按顺序处理,首先处理完整文件,然后处理增量文件(如果有的话)。

在此例子中,我们说明了如何使用ips create package命令。下面列出此命令的变化:

例子中的第一个文件的文件名中有COM标记,指出它是一个完整的ZIP文件。第二个文件使用INC标记,表示它是一个增量ZIP文件。这些文件按顺序处理,首先处理完整文件,然后处理增量文件(如果有的话)。

在此例子中,我们说明了如何使用ips create package命令。下面列出此命令的变化:

ips create package创建一个空包;

ips create package problem基于某个问题ID创建一个包;

ips create package problem key创建一个基于问题键的包;

ips create package incident基于某个意外事件ID创建一个包;

ips create package time创建特定时间范围的一个包。

可利用adrci工具配置各种内容,如配置意外事件的元数据保留期等。执行ips show configuration命令可查看可用的所有配置参数。下面是ips show configuration命令的一个简化了的输出:

 

虽然可以利用强大的并且容易使用的adrci工具来调查问题,将意外事件打包并上传到Oracle Support,但建议使用Support Workbench工具,特别是对于较简单的问题。

http://book.51cto.com/art/200811/97672.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值