从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)之于备份文件。




