oracle的adr,ORACLE 11G中的ADR介绍:

直到今天,我才开始接触oracle 11g,先了解其新特性,以下这些是我的新特性读书笔记:

第一部分:(Automatic Diagnostic Repository)ADR

在oracle 11g中,你不能在目录$ORACLE_BASE/diag/rdbms/$INSTANCE_NAME/$ORACLE_SID/alert中直接读取alert日志。而是读取其中的log.xml文件。该文件不是文本文件。除了所有标准的数据库操作信息外,alert日志里也包含关于事件的信息。你也可以从目录 $ORACLE_BASE/diag/rdbms/$INSTANCE_NAME/$ORACLE_SID/trace中读取以前版本的alert日志。

problems和incidents (问题和事件)

围绕着oracle 11g错误诊断结构有两种新的概念:problems和incidents。

problems:

任何严重错误称之为problems,比如ORA-600错误,ORA-04031错误。所有涉及数据库problems的源数据都存储在ADR中。每一个问题分配一个关键字,以便于标识和描述问题。问题关键字包括oracle错误号和错误变量值。

incidents:

是一次问题的产生。一个问题可能会产生多次。每一次就是一个事件。每个事件有它自己的事件ID.

比如:

INCIDENT_ID    PROBLEM_KEY          CREATE_TIME

------------   ------------------   ---------------------------

8801           ORA 600 [4899]       27-MAR-07 06.14.41.04-05:00

当某一个事件产生时。在数据库里做三件事情:

为该事件创建一个告警日志行并分配合适安全告警。

在alert日志里创建相关条目。

收集和存储诊断数据放置在ADR结构中合适子目录中。

不能够禁止自动创建严重错误事件。

事件在ADR中有保留策略:

事件元数据保留在ADR中默认一年。

事件文件和dump保留在ADR中默认是一个月。

可以使用事件package configuration更改这些保留策略。后台进程MMON自动清洗过期的ADR数据。

incident packaging service:

在oracle 11g中,你可以使用IPS来搜寻关于某一个事件或错误的相关trace file,dump file和告警日志并将其打包成压缩文件。

这个特性称之为(incident packaging service)IPS。

ADR的结构和位置:

初始化参数diagnostic_dest指定了ADR的根目录。即使你忽略了该初始化参数。oracle也会创建ADR。

如果你设置了ORACLE_BASE环境变量,那么diagnostic_dest缺省值是该目录。如果你没有设置ORACLE_BASE变量,该参数值为$ORACLE_HOME/log目录。

ADR存储所有oracle产品的诊断数据。ADR为每一个oracle产品及其实例分配一个单独的home目录。因此一个ADR目录包含多个home目录。

每一个ADR的home目录是一个为每一个数据库实例或其它oracle产品或组件存储其诊断文件。其目录结构如下:

ADR_base/diag/product_type/product_id/instance_id/

比如一个 diagnostic_dest初始化参数为 /u05/app/oracle。那么一个oracle数据库的sid为prod1的home目录就如下所示:

/u05/app/oracle/diag/rdbms/prod1/prod1/

在一个ADR的home目录下有很多子目录:

alert:一个实例的告警日志文件(xml格式)。

cdump:core文件。

hm:健康检查报告。

incident:每一个事件一个子目录,其中包含所有trace dump文件。

incpkg:你创建的事件包,用于发给oracle支持所用。

ir:包含实例事件报告。

trace:存储回话trace文件。

可以通过视图v$diag_info来查询目录及其位置:

SQL> select name, value from v$diag_info;

NAME                                    VALUE

-------------------     ---------------------------

Diag Enabled            TRUE

ADR Base                /u01/app/oracle

ADR Home                /01/app/oracle/diag/rdbms/prod/prod1

Diag Trace              /u01/app/oracle/diag/rdbms/prod/prod1/trace

Diag Alert              /u01/app/oracle/diag/rdbms/ prod/prod1/alert

Diag Incident           /u01/app/oracle/diag/rdbms/prod/prod1/incident

Diag Cdump              /u01/app/oracle/diag/rdbms/ prod/prod1/cdump

Health Monitor          /u01/app/oracle/diag/rdbms/ prod/prod1/hm

Default Trace File      /u01/app/oracle/diag/rdbms/ prod/prod1/

trace/eleven_ora_9417.trc

Active Problem Count    3

Active Incident Count   8

正如你所见,视图v$diag_info中包括问题和事件数量。

adrci接口:

oracle为我们提供了一个挖掘ADR里的诊断数据的接口,叫adrci。这个命令行工具提供很多丰富的功能,比如将问题和事件打包为一个zip文件发给oracle技术支持。这些被压缩的诊断数据包括trace及dump文件,alert log条目以及oracle 11g的健康监视报告。可以使用adrci的交互模式或使用操作系统的脚本批处理执行这些命令。

在oracle用户执行adrci

[oracle@node1 ~]$ adrci

ADRCI: Release 11.1.0.6.0 - Beta on Thu Apr 5 09:23:37 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

ADR base = "/home/oracle"

adrci>

输入帮助:

adrci> help

HELP [topic]

Available Topics:

CREATE REPORT

ECHO

EXIT

HELP

HOST

IPS

PURGE

RUN

SET BASE

SET BROWSER

SET CONTROL

SET ECHO

SET EDITOR

SET HOMES | HOME | HOMEPATH

SET TERMOUT

SHOW ALERT

SHOW BASE

SHOW CONTROL

SHOW HM_RUN

SHOW HOMES | HOME | HOMEPATH

SHOW INCDIR

SHOW INCIDENT

SHOW PROBLEM

SHOW REPORT

SHOW TRACEFILE

SPOOL

There are other commands intended to be used directly by Oracle, type

"HELP EXTENDED" to see the list

adrci>

查看home目录:

adrci> show home

ADR Homes:

diag/tnslsnr/node1/listener

diag/clients/user_oracle/host_514214572_11

diag/rdbms/rac/rac

adrci>

为了在shell脚本中使用adrci,你可以使用命令行参数exec来调用adrci。比如:

adrci exec="command[; command]..."

例如你想在脚本里使用show homes和show incident,使用如下语法:

adrci exec="show homes; show incident"

[oracle@node1 ~]$

[oracle@node1 ~]$ adrci exec="show homes; show incident"

ADR Homes:

diag/tnslsnr/node1/listener

diag/clients/user_oracle/host_514214572_11

diag/rdbms/rac/rac

ADR Home = /home/oracle/diag/tnslsnr/node1/listener:

*************************************************************************

0 rows fetched

ADR Home = /home/oracle/diag/clients/user_oracle/host_514214572_11:

*************************************************************************

0 rows fetched

ADR Home = /home/oracle/diag/rdbms/rac/rac:

*************************************************************************

0 rows fetched

[oracle@node1 ~]$

每一个命令必须使用分号隔开。

下面这个例子是使用ADR命令行去执行vi alert命令。

adrci exec="set homepath diag/rdbms/rac/rac;set editor vi;show alert"

另外,你还可以使用管道方式来封装一个shell脚本,比如下面这个例子是查看alert日志条目中包含ORA-的相关错误及其错误发生的时间。

adrci << EOF

set homepath diag/rdbms/rac/rac

set editor vi

show alert -p "message_text like '%ORA-%'"

EOF

比如使用如下命令查看所有ORA-错误:

adrci> set homepath diag/rdbms/rac/rac

adrci> set editor vi

adrci> show alert -p "message_text like '%ORA-%'"

ADR Home = /home/oracle/diag/rdbms/rac/rac:

*************************************************************************

Output the results to file: /tmp/alert_10191_1638_rac_1.ado

2012-03-29 20:56:12.266000 +08:00

ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...

2012-03-29 20:56:27.810000 +08:00

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:

ORA-00313: ??????? 1 (???? 1) ???

ORA-00312: ???? 1 ?? 1: '/home/oracle/oradata/rac/redo01.log'

ORA-27037: ????????

Linux Error: 2: No such file or directory

Additional information: 3

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:

ORA-00313: ??????? 2 (???? 1) ???

ORA-00312: ???? 2 ?? 1: '/home/oracle/oradata/rac/redo02.log'

ORA-27037: ????????

Linux Error: 2: No such file or directory

Additional information: 3

2012-03-29 20:56:29.286000 +08:00

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:

ORA-00313: ??????? 3 (???? 1) ???

ORA-00312: ???? 3 ?? 1: '/home/oracle/oradata/rac/redo03.log'

ORA-27037: ????????

Linux Error: 2: No such file or directory

Additional information: 3

2012-03-29 21:04:31.458000 +08:00

ORA-1089 : opidrv aborting process J000 ospid (10641_3081467584)

2012-04-03 21:14:42.300000 +08:00

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_j008_6295.trc:

ORA-12012: error on auto execute of job 11689

ORA-01403: no data found

像vi编辑器一样退出后,可以在文件/tmp/alert_10191_1638_rac_1.ado中找到屏幕输出结果。便于分析,可见这个特性和unix中的grep |ORA-  命令是大不相同,因为后者只能输出错误行,但是错误行发生的时间却不能显示,而 show alert则同时显示错误和发生时间。

但是这里要注意:

如果执行如下命令,会让你选择home目录,比如:

adrci> show alert

Choose the alert log from the following homes to view:

1: diag/tnslsnr/node1/listener

2: diag/clients/user_oracle/host_514214572_11

3: diag/rdbms/rac/rac

Q: to quit

Please select option:

这里执行show alert时并没有指定home目录,而是直接在root目录环境下执行show alert命令,因此你需要指定home目录环境或者选择在哪个home目录环境下执行该命令:

而采用下面这种方式,就不需要选择home目录,因为已经明确指定home目录(注意这里set homepath不能指定绝对路径):

adrci> set homepath diag/rdbms/rac/rac

adrci> show alert -p "message_text like '%ORA-%'"

ADR Home = /home/oracle/diag/rdbms/rac/rac:

*************************************************************************

Output the results to file: /tmp/alert_10511_1638_rac_2.ado

2012-03-29 20:56:12.266000 +08:00

ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...

2012-03-29 20:56:27.810000 +08:00

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:

ORA-00313: ??????? 1 (???? 1) ???

ORA-00312: ???? 1 ?? 1: '/home/oracle/oradata/rac/redo01.log'

ORA-27037: ????????

Linux Error: 2: No such file or directory

Additional information: 3

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:

ORA-00313: ??????? 2 (???? 1) ???

ORA-00312: ???? 2 ?? 1: '/home/oracle/oradata/rac/redo02.log'

ORA-27037: ????????

Linux Error: 2: No such file or directory

Additional information: 3

2012-03-29 20:56:29.286000 +08:00

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:

ORA-00313: ??????? 3 (???? 1) ???

ORA-00312: ???? 3 ?? 1: '/home/oracle/oradata/rac/redo03.log'

ORA-27037: ????????

Linux Error: 2: No such file or directory

Additional information: 3

2012-03-29 21:04:31.458000 +08:00

ORA-1089 : opidrv aborting process J000 ospid (10641_3081467584)

2012-04-03 21:14:42.300000 +08:00

Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_j008_6295.trc:

ORA-12012: error on auto execute of job 11689

ORA-01403: no data found

~

当然某些命令可以支持当前home目录为多个,比如show tracefile等:

当不指定homepath或指定多个homepath时,那么默认是显示所有当前homepath下的tracefile。如果你单独指定某一个homepath,那么该命令只显示当前homepath的tracefile。

有些命令不支持当前homepath为多个,如前面的show alert,又如下面的命令:

adrci> ips create package;

DIA-48448: This command does not support multiple ADR homes

adrci>

这个时候,你必须设置单个homepath以支持该命令:

drci> set homepath diag/rdbms/rac/rac

adrci> ips create package;

Created package 1 without any contents, correlation level typical

你也可以像sqlplus一样将命令显示结果传送到一个文件中,如下所示:

adrci> spool /u01/app/oracle/strip_alert.log

adrci> show alert

adrci> spool  off

显示事件:

adrci> show incident

ADR Home = C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\auxdb\auxdb:

**********************************************************************

0 incident info records fetched

ADR Home = C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\eleven\eleven:

**********************************************************************

INCIDENT_ID    PROBLEM_KEY                 CREATE_TIME

------------   --------------              ---------------------------

8801           ORA 600 [4899]              17-MAR-07 06.14.41.04-05:00

16417          ORA 7445 [ACCESS_VIOLATION] 17-MAR-07 06.15.46.7905:00

2 incident info records fetched

ADR Home = C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\orcl11\orcl11:

**********************************************************************

INCIDENT_ID          PROBLEM_KEY             CREATE_TIME

-------------------- --------------------  ---------------------------

113769               ORA 1578 [2] [66598]  27-MAR-07 10.00.10.91-05:00

113770               ORA 1578              27-MAR-07 10.00.11.86-05:00

113771               ORA 1578              27-MAR-07 10.00.12.10-05:00

3 incident info records fetched

adrci>

上面的结果显示分析如下:

数据库auxdb没有打开的事件,数据库eleven有两个打开的事件,数据库orcl11有三个打开的事件。

如果你想下钻到具体某一个事件的详细情况,可是使用如下命令:

adrci> show incident -mode detail -p "incident_id=113769"

...

----------------------------------------------------------

INCIDENT FILES:

INCIDENT_ID        113769

OWNER_ID           1

BFILE              C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\orcl11\orcl1

\incident\incdir_113769/orcl11_j003_4244_i113769.trc

Incident file number: 1

----------------------------------------------------------

1 incident info records fetched

adrci>

show incident命令有两个选项,-p 和-mode。你可是使用-p来界定字段,该字段必须使用双引号界定。下面的命令显示了可以使用的字段名:

adrci> set homepath diag/rdbms/rac/rac

adrci> describe incident

Name                          Type            NULL?

----------------------------- --------------- -----------

INCIDENT_ID                   number

PROBLEM_ID                    number

CREATE_TIME                   timestamp

CLOSE_TIME                    timestamp

STATUS                        number

FLAGS                         number

FLOOD_CONTROLLED              number

ERROR_FACILITY                text(10)

ERROR_NUMBER                  number

ERROR_ARG1                    text(64)

ERROR_ARG2                    text(64)

ERROR_ARG3                    text(64)

ERROR_ARG4                    text(64)

ERROR_ARG5                    text(64)

ERROR_ARG6                    text(64)

ERROR_ARG7                    text(64)

ERROR_ARG8                    text(64)

SIGNALLING_COMPONENT          text(64)

SIGNALLING_SUBCOMPONENT       text(64)

SUSPECT_COMPONENT             text(64)

SUSPECT_SUBCOMPONENT          text(64)

ECID                          text(64)

IMPACT                        number

adrci>

除了-p选项外,-mode选项有三个字段可用,分别是detail,basic,brief。后两者显示基本内容,不显示详细内容。

packaging incidents(打包事件)

oracle 11g的一个很强有力的工具是打包事件。利用这个打包事件压缩的文件夹提交给oracle的支持来帮助解决分析问题。

一旦你创建一个事件包,将添加一个或多个相关的问题到打包文件中。其中包括trace文件,dump文件等。

缺省情况下,每一个问题的事件包仅仅包括第一个和最后三个事件。事件包包含所有可以用于诊断的事件。也可以指定事件发生的时间或数

量范围来打包。

一旦你创建了事件包,那么你能添加或移除文件。

具体步骤如下:

1:创建一个逻辑包:使用命令是ips create package。该命令可以创建一个空包,也可以能会创建自动包含诊断数据的包。这个命令有很多

变量,你可以选择创建某一特定问题号,事件号,问题关键字,或基于期间的包。

2:添加诊断数据到逻辑包:这是一个可选步骤,如果你在第一步创建的是一个空包,那么你可以使用这一步骤添加诊断文件或数据。

3:产生zip文件:可以增量添加文件到zip文件里。

示例如下:

创建包:

adrci>ips create package

Created package 1 without any contents, correlation level typical

adrci>

添加诊断信息到空包中:

adrci>ips add incident 113769 package 1;

kaged: ADD INCIDENT

Cmd: --- incid 113769

Cmd: --- pkgid 1

adrci>

这一步仍然没有实际的诊断数据,你还需要执行第三部添加诊断元数据到包中。

adrci>ips generate package 4 in /u01/app/oracle/adrci/support

Cmd: GENERATE PACKAGE

Cmd: package id is 4

Cmd: file C:\ORCL11\APP\ORACLE

Cmd: --- mode full

adrci>

这个命令创建一个zip文件在/u01/app/oracle/adrci/目录中。这样创建的压缩文件称之为完全压缩文件。你也可以产生一个增量zip文件。

adrci> ips generate package 5 in /u01/app/oracle/adrci/support incremental

比如会产生以下两个文件:

ORA222_20070304124515_COM_1.zip

ORA222_20070304124515_INC_2.zip

第一个文件是完整zip文件,第二个是增量zip文件。

以下是ips命令的各种变种:

• ips create package                   creates an empty package.

• ips create package problem           creates a package based on a problem ID.

• ips create package problem key       creates a problem key–based package.

• ips create package incident          creates a package based on an incident ID.

• ips create package time              creates a package for a specified time range.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值