暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库的启动——Oracle 11g Automatic Diagnostic Repository新特性

原创 eygle 2019-12-26
1362

从Oracle 11g开始,alert文件的格式发生了变化,除原有的文本格式外,还引入了XML格式。现在告警日志文件的存储位置受到一个新的参数影响,这个参数是diagnostic_dest:

SQL> select * from v$version where rownum <2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
SQL> show parameter diag
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest                      string      /opt/oracle

diagnostic_dest 是Oracle 11g的新特性自动诊断库(Automatic Diagnostic Repository – ADR)的设置,该目录用于存放数据库诊断日志、跟踪文件等,通常称为称作ADR base,在启用了diagnostic_dest之后,以前所熟知的background_dump_dest、core_dump_dest、user_dump_dest都被弃用。diagnostic_dest参数的缺省值和环境变量ORACLE_BASE有关:

■ 如果设置了 ORACLE_BASE 则 DIAGNOSTIC_DEST = ORACLE_BASE
■ 如果未设置 ORACLE_BASE ,则 DIAGNOSTIC_DEST = ORACLE_HOME/log

伴随这一约束,Oracle将以前在环境变量中设置的参数OACLE_BASE引入到数据库内部,增加了一个隐含参数用于记录:

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.KSPPDESC PDESC
  2    FROM SYS.x$ksppi x, SYS.x$ksppcv y
  3  WHERE x.indx = y.indx AND x.ksppinm LIKE '%&par%';
Enter value for par: oracle_base
NAME                           VALUE                PDESC
------------------------------ -------------------- ----------------------------
__oracle_base                  /opt/oracle          ORACLE_BASE

ADR信息可以通过V$DIAG_INFO视图查询,其中Diag Alert 和Diag Trace 对应的目录分别存储了XML和文本格式的告警日志文件:

SQL> select * from v$diag_info;
 INST_ID NAME                       VALUE
-------- -------------------------- ---------------------------------------
       1 Diag Enabled               TRUE
       1 ADR Base                   /opt/oracle
       1 ADR Home                   /opt/oracle/diag/rdbms/11gtest/eygle
       1 Diag Trace                 /opt/oracle/diag/rdbms/11gtest/eygle/trace
       1 Diag Alert                 /opt/oracle/diag/rdbms/11gtest/eygle/alert
       1 Diag Incident              /opt/oracle/diag/rdbms/11gtest/eygle/incident
       1 Diag Cdump                 /opt/oracle/diag/rdbms/11gtest/eygle/cdump
       1 Health Monitor             /opt/oracle/diag/rdbms/11gtest/eygle/hm
       1 Default Trace File
                       /opt/oracle/diag/rdbms/11gtest/eygle/trace/eygle_ora_19939.trc
       1 Active Problem Count       0
       1 Active Incident Count      0
11 rows selected.

新的XML格式日志不便于直接阅读,通常我们仍然习惯阅读文本格式的告警日志文件:

[oracle@localhost ~]$ ls -l /opt/oracle/diag/rdbms/11gtest/eygle/alert
total 96
-rw-r-----  1 oracle dba 88285 Jul  6 15:39 log.xml
[oracle@localhost ~]$ tail -10 /opt/oracle/diag/rdbms/11gtest/eygle/alert/log.xml 
 module='' pid='17457'>
 <txt>Setting Resource Manager plan SCHEDULER[0x2C0F]:DEFAULT_MAINTENANCE_PLAN via scheduler window
 </txt>
</msg>
<msg time='2008-07-06T15:39:51.147+08:00' org_id='oracle' comp_id='rdbms'
 client_id='' type='UNKNOWN' level='16'
 module='' pid='17457'>
 <txt>Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter
 </txt>
</msg>

随着ADR的引入,一个新的工具ADRCI(ADR Command Interpreter)随之提供,这个工具可以用于管理Oracle 11g的诊断数据,当然也可以用于友好阅读XML格式的警告日志文件。在命令行输入adrci可以进入ADRCI工具,如果需要查看alert日志,可以通过help show alert来查看相关帮助:

adrci> help show alert
  Usage: SHOW ALERT [-p <predicate_string>]  [-term]
                    [ [-tail [num] [-f]] | [-file <alert_file_name>] ]
  Purpose: Show alert messages.
.........
  Examples:  
    show alert 
    show alert -p "message_text like '%incident%'"
    show alert -tail 20

如果当前ADR包含多个实例等日志信息,show alert会提示进行选择,然后打开该日志文件:

adrci> show alert
Choose the alert log from the following homes to view:
1: diag/rdbms/11gtest/11gtest
2: diag/rdbms/11gtest/eygle
3: diag/clients/user_oracle/host_61728193_11
4: diag/clients/user_unknown/host_411310321_11
5: diag/tnslsnr/localhost/listener
Q: to quit
Please select option:

也可以预先指定HOMEPATH,然后操作相关的告警日志文件:

adrci> set homepath diag/rdbms/phsdb/phsdb
adrci> show alert -tail 10
2008-07-28 02:33:08.415000 +08:00
ORA-609 : opiodr aborting process unknown ospid (27073_2181264)
2008-07-28 03:14:39.068000 +08:00
Stopping background process CJQ0
2008-07-28 07:00:03.598000 +08:00
Thread 1 advanced to log sequence 379
  Current log# 4 seq# 379 mem# 0: /data1/oradata/phsdb/redo04.log
2008-07-28 10:49:40.660000 +08:00
Starting background process CJQ0
CJQ0 started with pid=91, OS id=9205

那么ADR引入的目的何在呢?

大家知道在Oracle Database 11g之前,Oracle的各类跟踪文件、日志文件等诊断文件的存储位置并不统一,我们在进行诊断时需要到不同目录来查找相关文件,这在一定程度上带来不便,从11g开始,Oracle开始统一规划这些文件的存储,ADR之于诊断文件,就类似于OFA(Optimal Flexible Architecture )之于数据库文件,FRA(Flash Recovery Area)之于备份文件。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论