在11g中引入了自动诊断资料档案库(ADR)特性,默认情况下各种trace,dump存放的目录位置区别于9i/10g显得更加难以查找了。
ADR 基目录中可以包含多个 ADR 主目录,其中每个 ADR 主目录都是一个根目录,用于存放特定 Oracle 产品或组件的特定实例的全部诊断数据。前一张幻灯片的图形中显示了数据库的 ADR 主目录位置。
另外,还生成了两个预警文件。一个是文本形式的预警文件(与早期版本 Oracle DB 使用的预警文件非常相似),位于各个 ADR 主目录的 TRACE 目录下。还有一个符合 XML 标准的预警消息文件,存储在 ADR 主目录内的 ALERT 子目录下。可使用 Enterprise Manager 和 ADRCI 实用程序查看文本格式的预警日志(已删除了 XML 标记)。
此幻灯片中的图形显示了 ADR 主目录的目录结构。INCIDENT 目录包含多个子目录, 每个子目录均以特定意外事件命名,并且仅包含与该意外事件相关的转储。
HM 目录包含由健康状况监视器生成的检查器运行报告。
还有一个 METADATA 目录,其中包含资料档案库自身的重要文件。可以将此目录比作数据库字典。可使用 ADRCI 查询此字典。
ADR 命令解释器 (ADRCI) 是一个实用程序,可用于执行支持工作台允许的所有任务(但是仅限于在命令行环境中)。使用 ADRCI 实用程序,您还可以查看 ADR 中跟踪文件的名称以及删除了 XML 标记、具有和不具有内容筛选功能的预警日志。
此外,还可以使用 V$DIAG_INFO 列出一些重要的 ADR 位置。
自动诊断资料档案库 (ADR)的主要目录结构:
1.Server Directory Structure
2.Client Directory Structure
一个需要注意的细节是启用了ADR自动诊断资料档案库后,LISTENER监听器日志的默认位置也被移动到diagnostic_dest下了,而不在如9i/10g那样存放在$ORACLE_HOME/network/log目录下,有不少人因为忘记了这个细节而花费了大量时间去寻找listener.log,这个人也包括我。实际上我们还是可以将listener.log日志的位置还原回10g的形式,这一点可以通过修改$ORACLE_HOME/network/admin/listener.ora来达成:
[oracle@rh2 ~]$ cd $ORACLE_HOME/network/admin
[oracle@rh2 admin]$ cat listener.ora
# listener.ora Network Configuration File: /s01/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rh2.oracle.com)(PORT = 1521))
)
ADR_BASE_LISTENER = /s01/orabase
将以上listener.ora文件的ADR_BASE_LISTENER条目删除,并加上
DIAG_ADR_ENABLED_LISTENER = OFF
[oracle@rh2 log]$ lsnrctl reload
[oracle@rh2 admin]$ tnsping PROD
TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 30-MAY-2011 21:39:21
Copyright (c) 1997, 2010, Oracle. All rights reserved.
Used parameter files:
/s01/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rh-cluster-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PROD)))
OK (0 msec)
[oracle@rh2 log]$ cat $ORACLE_HOME/network/log/listener.log
TNSLSNR for Linux: Version 11.2.0.2.0 - Production on 30-MAY-2011 21:42:52
Copyright (c) 1991, 2010, Oracle. All rights reserved.
System parameter file is /s01/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /s01/oracle/product/11.2.0/dbhome_1/network/log/listener.log
Trace information written to /s01/oracle/product/11.2.0/dbhome_1/network/trace/listener.trc
Trace level is currently 6
Started with pid=24331
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rh2)(PORT=1521)))
Listener completed notification to CRS on start
TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE
30-MAY-2011 21:42:53 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=rh2.oracle.com)(USER=oracle))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=186647040)) * status * 0
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.122)(PORT=1521)))
30-MAY-2011 21:42:59 * service_register * PROD1 * 12542
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
Linux Error: 98: Address already in use
Error listening on: (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.133)(PORT=1521)))
30-MAY-2011 21:42:59 * service_register * PROD1 * 12542
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
Linux Error: 98: Address already in use
30-MAY-2011 21:43:02 * service_update * PROD1 * 0
30-MAY-2011 21:43:02 * service_update * PROD1 * 0
30-MAY-2011 21:43:37 * service_register * G10R2 * 0
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.122)(PORT=1521)))
30-MAY-2011 21:43:39 * service_register * +ASM1 * 12542
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
Linux Error: 98: Address already in use
从以上ADR目录结构图中可以看到整个架构变得更复杂了,实际使用中的ADR档案资料库的复杂度要更高:
[grid@rh2 raw]$ tree -d /s01/orabase/diag /s01/orabase/diag |-- asm | `-- +asm | `-- +ASM1 | |-- alert | |-- cdump | |-- hm | |-- incident | | |-- incdir_4897 | | |-- incdir_4898 | | |-- incdir_4899 | | |-- incdir_4900 | | |-- incdir_4901 | | |-- incdir_4902 | | `-- incdir_4903 | |-- incpkg | |-- ir | |-- lck | |-- metadata | |-- metadata_dgif | |-- metadata_pv | |-- stage | |-- sweep | `-- trace | |-- cdmp_20110424212230 | |-- cdmp_20110424214914 | |-- cdmp_20110424220022 | |-- cdmp_20110424221131 | |-- cdmp_20110424222254 | |-- cdmp_20110424223546 | `-- cdmp_20110427154653 |-- clients | `-- user_oracle | `-- host_3070836769_80 | |-- alert | |-- cdump | |-- incident | |-- incpkg | |-- lck | |-- metadata | |-- metadata_dgif | |-- metadata_pv | |-- stage | |-- sweep | `-- trace |-- crs |-- diagtool |-- lsnrctl |-- netcman |-- ofm |-- rdbms | |-- maclean | | `-- MACLEAN | | |-- alert | | |-- cdump | | |-- hm | | |-- incident | | |-- incpkg | | |-- ir | | |-- lck | | |-- metadata | | |-- metadata_dgif | | |-- metadata_pv | | |-- stage | | |-- sweep | | `-- trace | `-- prod | `-- PROD1 | |-- alert | |-- cdump | | |-- core_27975 | | |-- core_28006 | | |-- core_28013 | | `-- core_28034 | |-- hm | |-- incident | | |-- incdir_100831 | | |-- incdir_104831 | | |-- incdir_108831 | | |-- incdir_18201 | | |-- incdir_18202 | | |-- incdir_18266 | | |-- incdir_18361 | | |-- incdir_18362 | | |-- incdir_18369 | | |-- incdir_18385 | | |-- incdir_18387 | | |-- incdir_18393 | | |-- incdir_18402 | | |-- incdir_18410 | | |-- incdir_18411 | | |-- incdir_18441 | | |-- incdir_18457 | | |-- incdir_18458 | | |-- incdir_18465 | | |-- incdir_19737 | | |-- incdir_19738 | | |-- incdir_19739 | | |-- incdir_19745 | | |-- incdir_19746 | | |-- incdir_20589 | | |-- incdir_20701 | | |-- incdir_20736 | | |-- incdir_20737 | | |-- incdir_20738 | | |-- incdir_20739 | | |-- incdir_20740 | | |-- incdir_20957 | | |-- incdir_20973 | | |-- incdir_20989 | | |-- incdir_21005 | | |-- incdir_21778 | | |-- incdir_21936 | | |-- incdir_21937 | | |-- incdir_21938 | | |-- incdir_22200 | | |-- incdir_22201 | | |-- incdir_22216 | | |-- incdir_22232 | | |-- incdir_22233 | | |-- incdir_23306 | | |-- incdir_23506 | | |-- incdir_28123 | | |-- incdir_28147 | | |-- incdir_28148 | | |-- incdir_28227 | | |-- incdir_28228 | | |-- incdir_28229 | | |-- incdir_28230 | | |-- incdir_28235 | | |-- incdir_29323 | | |-- incdir_29324 | | |-- incdir_29325 | | |-- incdir_29326 | | |-- incdir_29327 | | |-- incdir_30681 | | |-- incdir_30682 | | |-- incdir_30683 | | |-- incdir_31724 | | |-- incdir_35253 | | |-- incdir_36453 | | |-- incdir_37653 | | |-- incdir_38853 | | |-- incdir_40053 | | |-- incdir_41253 | | |-- incdir_42453 | | |-- incdir_43653 | | |-- incdir_44853 | | |-- incdir_46053 | | |-- incdir_47253 | | |-- incdir_48453 | | |-- incdir_49653 | | |-- incdir_54525 | | |-- incdir_56918 | | |-- incdir_89183 | | |-- incdir_89184 | | |-- incdir_89185 | | |-- incdir_89186 | | |-- incdir_89187 | | |-- incdir_89327 | | |-- incdir_89343 | | |-- incdir_89351 | | |-- incdir_89359 | | |-- incdir_90270 | | |-- incdir_90271 | | |-- incdir_90272 | | |-- incdir_90273 | | |-- incdir_90274 | | |-- incdir_90275 | | `-- incdir_96831 | |-- incpkg | | `-- pkg_1 | | `-- seq_1 | | |-- crs | | `-- export | |-- ir | |-- lck | |-- metadata | |-- metadata_dgif | |-- metadata_pv | |-- stage | |-- sweep | `-- trace | |-- cdmp_20110502214850 | |-- cdmp_20110502214947 | |-- cdmp_20110502221010 | |-- cdmp_20110502221029 | |-- cdmp_20110502221204 | |-- cdmp_20110502221221 | |-- cdmp_20110502221257 | |-- cdmp_20110502221318 | |-- cdmp_20110502221450 | |-- cdmp_20110502221505 | |-- cdmp_20110502222225 | |-- cdmp_20110502222315 | |-- cdmp_20110502222402 | |-- cdmp_20110502224708 | |-- cdmp_20110502230815 | |-- cdmp_20110503202436 | |-- cdmp_20110503202521 | |-- cdmp_20110509231250 | |-- cdmp_20110512171047 | |-- cdmp_20110512171231 | |-- cdmp_20110512171437 | |-- cdmp_20110512171635 | |-- cdmp_20110520165537 | |-- cdmp_20110520232601 | |-- cdmp_20110520234343 | |-- cdmp_20110521000119 | |-- cdmp_20110521000218 | |-- cdmp_20110521065437 | |-- cdmp_20110521065455 | |-- cdmp_20110521065512 | |-- cdmp_20110521074224 | |-- cdmp_20110521074737 | |-- cdmp_20110521075206 | |-- cdmp_20110521080019 | |-- cdmp_20110521080642 | |-- cdmp_20110521140052 | |-- cdmp_20110530202441 | |-- cdmp_20110530202442 | |-- cdmp_20110530202846 | |-- cdmp_20110530202848 | |-- cdmp_20110530202916 | |-- cdmp_20110530202918 | |-- cdmp_20110530203156 | `-- cdmp_20110530203158 `-- tnslsnr `-- rh2 `-- listener |-- alert |-- cdump |-- incident |-- incpkg |-- lck |-- metadata |-- metadata_dgif |-- metadata_pv |-- stage |-- sweep `-- trace 240 directories
所幸的是在11g中提供了比传统的gettrcname.sql脚本更为给力的诊断文件位置信息汇总的视图V$DIAG_INFO:
V$DIAG_INFO 视图列出了所有重要的 ADR 位置: ADR Base:ADR 基目录的路径 ADR Home:当前数据库实例的 ADR 主目录的路径 Diag Trace:文本预警日志和后台/前台进程跟踪文件的位置 Diag Alert:XML 版本的预警日志的位置 Default Trace File:会话的跟踪文件的路径。SQL 跟踪文件将写入到这里。 Health Monitor: 健康检查报告所在目录 Active Problem Count:当前激活的问题总数 Active Incident Count 当前激活的事故总数 SQL> select name,value from v$diag_info; NAME VALUE --------------------------------------- ------------------------------------------------------------ Diag Enabled TRUE ADR Base /s01/orabase ADR Home /s01/orabase/diag/rdbms/prod/PROD1 Diag Trace /s01/orabase/diag/rdbms/prod/PROD1/trace Diag Alert /s01/orabase/diag/rdbms/prod/PROD1/alert Diag Incident /s01/orabase/diag/rdbms/prod/PROD1/incident Diag Cdump /s01/orabase/diag/rdbms/prod/PROD1/cdump Health Monitor /s01/orabase/diag/rdbms/prod/PROD1/hm Default Trace File /s01/orabase/diag/rdbms/prod/PROD1/trace/PROD1_ora_22893.trc Active Problem Count 7 Active Incident Count 373 11 rows selected. adrci> show hm_run ********************************************************** HM RUN RECORD 119 ********************************************************** RUN_ID 2481 RUN_NAME HM_RUN_2481 CHECK_NAME DB Structure Integrity Check NAME_ID 2 MODE 2 START_TIME 2011-05-21 20:11:38.612669 +08:00 RESUME_TIME END_TIME 2011-05-21 20:11:38.619530 +08:00 MODIFIED_TIME 2011-05-21 20:11:38.619530 +08:00 TIMEOUT 0 FLAGS 0 STATUS 5 SRC_INCIDENT_ID 0 NUM_INCIDENTS 0 ERR_NUMBER 0 REPORT_FILE adrci> create report hm_run HM_RUN_2481 adrci> show hm_run -p "RUN_ID=2481" ADR Home = /s01/orabase/diag/rdbms/prod/PROD1: ************************************************************************* ********************************************************** HM RUN RECORD 1 ********************************************************** RUN_ID 2481 RUN_NAME HM_RUN_2481 CHECK_NAME DB Structure Integrity Check NAME_ID 2 MODE 2 START_TIME 2011-05-21 20:11:38.612669 +08:00 RESUME_TIME END_TIME 2011-05-21 20:11:38.619530 +08:00 MODIFIED_TIME 2011-05-30 21:09:43.071150 +08:00 TIMEOUT 0 FLAGS 0 STATUS 5 SRC_INCIDENT_ID 0 NUM_INCIDENTS 0 ERR_NUMBER 0 REPORT_FILE /s01/orabase/diag/rdbms/prod/PROD1/hm/HMREPORT_HM_RUN_2481.hm [oracle@rh2 ~]$ cd /s01/orabase/diag/rdbms/prod/PROD1/hm [oracle@rh2 hm]$ cat HMREPORT_HM_RUN_2481.hm <?xml version="1.0" encoding="US-ASCII"?> <HM-REPORT REPORT_ID="HM_RUN_2481"> <TITLE>HM Report: HM_RUN_2481</TITLE> <RUN_INFO> <CHECK_NAME>DB Structure Integrity Check</CHECK_NAME> <RUN_ID>2481</RUN_ID> <RUN_NAME>HM_RUN_2481</RUN_NAME> <RUN_MODE>REACTIVE</RUN_MODE> <RUN_STATUS>COMPLETED</RUN_STATUS> <RUN_ERROR_NUM>0</RUN_ERROR_NUM> <SOURCE_INCIDENT_ID>0</SOURCE_INCIDENT_ID> <NUM_INCIDENTS_CREATED>0</NUM_INCIDENTS_CREATED> <RUN_START_TIME>2011-05-21 20:11:38.612669 +08:00</RUN_START_TIME> <RUN_END_TIME>2011-05-21 20:11:38.619530 +08:00</RUN_END_TIME> </RUN_INFO> <RUN_PARAMETERS/> <RUN-FINDINGS/> </HM-REPORT>
通过查询V$diag_info可以很容易找到自身服务进程的trace文件位置,对于其他进程的trace文件则可以查询v$process新加入的tracefile列:
SQL> select spid,tracefile from v$process; SPID TRACEFILE ------------------------ -------------------------------------------------------------------------------- /s01/orabase/diag/rdbms/prod/PROD1/trace/PROD1_ora_0.trc 22789 /s01/orabase/diag/rdbms/prod/PROD1/trace/PROD1_pmon_22789.trc 22791 /s01/orabase/diag/rdbms/prod/PROD1/trace/PROD1_psp0_22791.trc