ORACLE 11G ADR

来源:互联网 发布:mac safari 扩展 编辑:程序博客网 时间:2024/06/08 10:36

ADR:自动诊断资料库

problems和incidents (问题和事件)

  围绕着oracle 11g错误诊断结构有两种新的概念:problems和incidents。
problems:
   任何严重错误称之为problems,比如ORA-600错误,ORA-04031错误。所有涉及数据库problems的源数据都存储在ADR中。每一个问题分配一个关键字,以便于标识和描述问题。问题关键字包括oracle错误号和错误变量值。
incidents:
   是一次问题的产生。一个问题可能会产生多次。每一次就是一个事件。每个事件有它自己的事件ID.
 

1. ADR目录设置:通过参数diagnostic_dest设置
如果设置了ORACLE_BASE,diagnostic_dest设置为ORACLE_BASE的值
如果没有设置ORACLE_BASE,diagnostic_dest默认设置为$ORACLE_HOME/log

2. ADR目录结构:

ADR_BASE/diag/product_type/product_id/instance_id

3. ADR中的子目录:

alert:包含实例的预警日志(XML格式)
cdump:包含核心文件
hm:包含Health Monitor报表
incident:包含每个意外事件的子目录,每个意外事件的子目录中还包含该意外事件的所有跟踪转出
incpkg:包含你为传到Oracle Support而创建的意外事件包
ir:包含为每个实例创建的意外事件报表
trace:存储用户会话跟踪文件

通过查询V$DIAG_INFO视图,找出所有与ADR有关的位置:
select name, value from v$diag_info;

4. 如何查看和解决ADR中的问题

可以通过命令行工具adrci和database control中的support workbench来访问ADR中的数据

adrci:通过adrci工具可以查看数据库的诊断数据,还可以把意外事件和问题信息打包成ZIP文件发送给Oracle Support,诊断数据包括跟踪和转储文件,预警日志文件以及oracle database 11g的新Health Monitor报表等数据,可以使用交互式和脚本方式使用adrci

以命令行方式使用adrci:
su - oracle
adrci

输入help可以查看帮助

在命令行中执行adrci命令:
为了在命令行中执行adrci命令,可以使用参数exec,调用adrci时,必须在脚本中使用以下的语法:
adrci exec="command[;command]...."

例如,如果想要在一个命令行中使用两条adrci命令:show homes和show incident,可以使用以下的语法:
adrci exec="show homes; show incident"

例如,使用命令行功能查看告警日志:
adrci exec="set homepath diag/rdbms/orcl/orcl; set editor vi; show alert -V"

使用脚本:
adrci<<eof
  set homepath diag/rdbms/orcl/orcl
  show alert -p "message text like '%ORA-%'"
eof

设置homepath
当我们在adrci发出命令时,这些命令都将在ADR的根目录下运行,show base命令可以查看ADR的根目录的位置:
show base

如果没有明确设置homepath(根目录路径),则ADR根目录下的所有ADR主目录都是当前的,ADR命令总是在当前ADR主目录中的诊断数据上运行,因此,如果执行一条命令,如show tracefile,adrci将显示当前的每个ADR目录中的所有跟踪文件,show homes显示所有可用的ADR主目录

设置ADR主目录的路径:
set homepath diag/rdbms/orcl/orcl
show homepath

当有多个当前主目录的情况下执行ips命令(创建一个意外事件包)将报错,所以必须用set homepath命令设置单个ADR主目录路径,才能用ips命令创建意外事件包

查看命令列表
可以在adrci命令行上输入help命令查看可以使用那些adrci命令

查看预警日志
在11G中,预警日志文件以文本格式和XML格式的文件存储,分别在ADR的主目录下,和trace目录下,可以使用adrci命令来查看XML格式的告警日志如
adrci>show alert

adrci将当前的日志文件的完整内容传输到/tmp目录中,可以使用-tail选项的show alert命令查看预警日志文件的20到30条消息,如
adrci>show alert -tail

如果想查看预警日志中的最后100条消息,可以执行命令show alert -tail 100
查看告警日志中是否存在ORA-600错误:adrci>show alert -p "MESSAGE TEXT LIKE %ORA-600%"

adrci中可以使用spool例如:
adrci>spool /u01/strip_alert.log
adrci>show alert
adrci>spool off

列出跟踪文件:
adrci>show tracefile

查看意外事件:
adrci>show incident

查看某个意外事件:
adrci>show incident -mode detail -p "incident_id=113769"

show incident命令有两个选项,分别是谓词串-p和方式-mode,可以使用谓词串来指定各字段名,可在谓词中使用的所有的字段名的列表通过describe incident来显示:
describe incident

5.打包事件

packaging incidents(打包事件)

OK,我们现在可以将相关的incident的文件打包给oracle,上传到SR上。我们这里用到一个IPS(incident package service)服务。
我们先创建一个逻辑的package:
比如我们针对上面的2个incident和1个problem,我们可以有各种选择:

1.什么参数都不带,表示以默认的level typical, 里面无任何内容。
adrci> ips create package
Created package 1 without any contents, correlation level typical
2.加incident参数,指明某个incident。默认level还是typical。
adrci>
adrci> ips create package incident 32620
Created package 2 based on incident id 32620, correlation level typical
adrci>
3.加incident参数,指定某个incident,设置level为all。
adrci> ips create package incident 32580 correlate all
Created package 3 based on incident id 32580, correlation level all
adrci>
4.加problem参数,指定某个problem。默认level还是typical。
adrci> ips create package problem 2
Created package 4 based on problem id 2, correlation level typical
5.加problem参数,指定某个problem,设置level为basic。
adrci>
adrci> ips create package problem 2 correlate basic
Created package 5 based on problem id 2, correlation level basic
adrci>
adrci>
6.加time参数,设置开始时间to结束时间,后面的+8:00表示东八区。
adrci> ips create package time '2012-06-23 00:00:00 +08:00' to '2012-06-24 23.00.00 +08:00'
Created package 6 based on time range 2012-06-23 00:00:00.000000 +08:00 to 2012-06-24 23:00:00.000000 +08:00, correlation level typical
adrci>

我们看到,已经有6个逻辑上的package被建立,在incpkg也有了6个对于的目录。

E:\ora11g\app\Administrator\diag\rdbms>tree
卷 DOCUMENT 的文件夹 PATH 列表
卷序列号为 5A21-A80E
E:.
└─ora11g
    └─ora11g
        ├─alert
        ├─cdump
        ├─hm
        ├─incident
        │  ├─incdir_32580
        │  └─incdir_32620
        ├─incpkg
        │  ├─pkg_1
        │  │  └─seq_1
        │  ├─pkg_2
        │  │  └─seq_1
        │  ├─pkg_3
        │  │  └─seq_1
        │  ├─pkg_4
        │  │  └─seq_1
        │  ├─pkg_5
        │  │  └─seq_1
        │  └─pkg_6
        │      └─seq_1
        ├─ir
        ├─lck
        ├─metadata
        ├─stage
        ├─sweep
        └─trace
            ├─cdmp_20120624221402
            └─cdmp_20120624221725
 
E:\ora11g\app\Administrator\diag\rdbms>

我们上传给oracle的话,还需要建立真正物理上的package。

adrci> ips GENERATE PACKAGE 2
Generated package 2 in file E:\ORA7445kq_20120624223659_COM_1.zip, mode complete
adrci>

如果我们要自定义路径,加in参数即可:

adrci> ips GENERATE PACKAGE 3 in E:\ora11g\app\Administrator\diag\rdbms\ora11g\ora11g\jimmy_ips
Generated package 3 in file E:\ora11g\app\Administrator\diag\rdbms\ora11g\ora11g\jimmy_ips\ORA7445kq_20120624223726_COM_2.zip, mode complete
adrci>

注意ips的调用和perl有关。如果你的机器上装有多个版本的oracle,请注意环境变量的中的perl的路径。不然会有类似的报错:

adrci> ips GENERATE PACKAGE 5 in E:\ora11g\app\Administrator\diag\rdbms\ora11g\ora11g\jimmy_ips
Perl 5.006 required--this is only version 5.00503, stopped at E:\ora10g\oracle\product\10.2.0\db_1\perl\5.8.3\lib/vars.pm line 3.
BEGIN failed--compilation aborted at E:\ora10g\oracle\product\10.2.0\db_1\perl\5.8.3\lib/vars.pm line 3.
BEGIN failed--compilation aborted at E:\ora10g\oracle\product\10.2.0\db_1\perl\site\5.8.3\lib/Win32/TieRegistry.pm line 14.
Generated package 5 in file E:\ora11g\app\Administrator\diag\rdbms\ora11g\ora11g\jimmy_ips\ORA7445kq_20120624223801_COM_2.zip, mode complete
DIA-49441: Warnings while finalizing package, details in file e:\ora11g\app\administrator\diag\rdbms\ora11g\ora11g\incpkg\pkg_5\seq_2\finalize.log
 
adrci>

这样就可以把zip发给oracle诊断了。

好了,最好,我们来打扫战场。

(1)清除incident,我们可以用purge命令:

adrci> purge -age 2
adrci> show incident
 
ADR Home = e:\ora11g\app\administrator\diag\rdbms\ora11g\ora11g:
*************************************************************************
0 rows fetched
 
adrci>

(2)清除problem,我们可以用delete命令:

adrci> show problem
 
ADR Home = e:\ora11g\app\administrator\diag\rdbms\ora11g\ora11g:
*************************************************************************
PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME
——————– ———————————————————– ——————– ————————–
1 ORA 7445 [kqrprl()+92] 22970 2012-04-20 13:42:14.953000
1 rows fetched
 
adrci>
adrci>
adrci>
adrci> delete from problem where problem_id=1
 
1 Row Deleted
adrci>
adrci>
adrci> show problem
 
ADR Home = e:\ora11g\app\administrator\diag\rdbms\ora11g\ora11g:
*************************************************************************
0 rows fetched
 
adrci>
adrci>

本来还想多写点,到后来猛然发现原来这货是为了给oracle开SR的时候,打包各类日志提供方便。这货的主要目的还是为他人做嫁衣裳了。

 

0 0