目录
参考《Automatic Storage Management Administrator's Guide 19C》
参考《Database Administrator’s Guide 19C》
描述
oracle数据库实例的诊断日志常规存放路径是在$ORACLE_BASE/diag/rdbms/db_unique_name/sid/,在特定场景下(如shell脚本检测服务器上可能存在的数据库实例),可以能通过文件系统的此路径(sid文件夹名称)判断服务器上可能存在哪些数据库实例。(官方文档几处关于路径的描述信息不一致,此处不一一测试验证)
参考《Database Reference 19C》
从Oracle Database 11g Release 1(11.1)开始,每个数据库实例的诊断信息位于由DIAGNOSTIC_DEST初始化参数指定的专用目录中。
DIAGNOSTIC_DEST默认参数值派生自$ORACLE_BASE环境变量的值。如果$ORACLE_BASE没有设置,则派生自Oracle通用安装程序设置的ORACLE_BASE。如果未设置“ORACLE_BASE”,则使用“$ORACLE_HOME/rdbms/log”。
该参数可以在每个实例上设置。Oracle建议集群中的每个实例在共享磁盘上为DIAGNOSTIC_DEST设置相同的目录位置。
诊断信息存放路径如下( Automatic Diagnostic Repository (ADR) 的home目录):
<diagnostic_dest>/diag/rdbms/<dbname>/<instname>
例如,如果数据库名称是proddb,实例名称是proddb1,则ADR主目录将是<diagnostic_dest>/diag/rdbms/proddb/proddb1。
参考《Automatic Storage Management Administrator's Guide 19C》
ASM实例的DIAGNOSTIC_DEST默认值是安装grid时指定的$ORACLE_BASE,例:
Example 3-1 Sample diagnostic directory for an Oracle ASM instance
$ ls $ORACLE_BASE/diag/asm/+asm/+ASM
alert cdump hm incident incpkg ir lck metadata stage sweep trace
参考《Database Administrator’s Guide 19C》
自动诊断存储库(ADR)是存储在数据库外部的目录结构。因此,当数据库关闭时,它可用于问题诊断。ADR根目录称为ADR base,它的位置信息设置在DIAGNOSTIC_DEST初始化参数中。如果参数值省略或为空,数据库将在启动时按如下方式设置DIAGNOSTIC_DEST:
1)如果设置了环境变量ORACLE_BASE,则“DIAGNOSTIC_DEST”设置为ORACLE_BASE指定的目录。
2)如果没有设置环境变量“ORACLE_BASE”,则将“DIAGNOSTIC_DEST”设置为ORACLE_HOME/log。
在ADR base中,可以有多个ADR主目录,其中每个ADR主目录是针对特定Oracle产品或组件的特定实例的所有诊断数据(跟踪、转储、警报日志等)的根目录。例如,在带有Oracle ASM的Oracle Real Application Clusters环境中,每个数据库实例、Oracle ASM实例和侦听器都有一个ADR home。
ADR home目录位于ADR base目录的子目录中,并根据产品或组件类型命名。目录结构如下:
根据具体配置,可能会在ADR中创建其他子目录。部分产品自动清除过期的ADR诊断数据。对于其他产品,可以定期使用ADRCI实用程序PURGE命令来清除过期的诊断数据。
每个ADR home的位置由以下路径给出,该路径从ADR base目录开始:
diag/product_type/product_id/instance_id
例如,对于一个SID和数据库唯一名称都等于orclbi的数据库,ADR home将位于以下位置:
ADR_base/diag/rdbms/orclbi/orclbi/
类似地,单实例环境中的Oracle ASM实例的ADR home路径为:
ADR_base/diag/asm/+asm/+asm/
在每个ADR主目录中都有包含诊断数据的子目录。
其中部分子目录及其内容如表9-2所示。
图9-2给出了数据库实例ADR的完整目录结构。
Oracle Clusterware使用ADR,并拥有自己的Oracle home和Oracle base。Oracle Clusterware的ADR目录结构与数据库实例不同。在一个系统上只有一个Oracle Clusterware实例,因此Clusterware ADR homes仅使用系统的主机名作为区分器。当配置Oracle Clusterware时,ADR home使用crs作为产品类型和实例ID,并且使用系统主机名作为产品ID。因此,在名为dbprod01的主机上,CRS ADR home将是:
ADR_base/diag/crs/dbprod01/crs/
验证测试
修改db_unique_name测试验证ADR home路径信息:
SQL> show parameter db_unique_name;
db_unique_name string CDB02_PRI
SQL> select name,value from v$diag_info;
Diag Enabled TRUE
ADR Base /u01/app/oracle
ADR Home /u01/app/oracle/diag/rdbms/cdb02_pri/CDB02
Diag Trace /u01/app/oracle/diag/rdbms/cdb02_pri/CDB02/trace
Diag Alert /u01/app/oracle/diag/rdbms/cdb02_pri/CDB02/alert
Diag Incident /u01/app/oracle/diag/rdbms/cdb02_pri/CDB02/incident
Diag Cdump /u01/app/oracle/diag/rdbms/cdb02_pri/CDB02/cdump
Health Monitor /u01/app/oracle/diag/rdbms/cdb02_pri/CDB02/hm
Default Trace File /u01/app/oracle/diag/rdbms/cdb02_pri/CDB02/trace/CDB02_ora_62061.trc
Active Problem Count 0
Active Incident Count 0
ORACLE_HOME /u01/src/ora19c
SQL> alter system set db_unique_name=cdb02 scope=spfile;
SQL> shutdown immediate;
SQL> startup;
SQL> show parameter db_unique_name;
db_unique_name string CDB02
SQL> select name,value from v$diag_info;
Diag Enabled TRUE
ADR Base /u01/app/oracle
ADR Home /u01/app/oracle/diag/rdbms/cdb02/CDB02
Diag Trace /u01/app/oracle/diag/rdbms/cdb02/CDB02/trace
Diag Alert /u01/app/oracle/diag/rdbms/cdb02/CDB02/alert
Diag Incident /u01/app/oracle/diag/rdbms/cdb02/CDB02/incident
Diag Cdump /u01/app/oracle/diag/rdbms/cdb02/CDB02/cdump
Health Monitor /u01/app/oracle/diag/rdbms/cdb02/CDB02/hm
Default Trace File /u01/app/oracle/diag/rdbms/cdb02/CDB02/trace/CDB02_ora_62233.trc
Active Problem Count 1
Active Incident Count 1
ORACLE_HOME /u01/src/ora19c