Oracle 数据库自动诊断库 ADR(Automatic Diagnostic Repository)简介 发表在 数据和云

简介: Oracle 数据库如果出现故障,我们的第一个反应是查看数据库的 alert log,但一些工程师对 alert log 不熟悉,实际上 alert log 位于Oracle 数据库自动诊断库(Automatic Diagnostic Repository,以下简称 ADR) 中,要熟悉 alert log,我们必需全面了解 ADR 的概念。

ADR 的作用

Oracle 数据库如果出现故障,我们的第一个反应是查看数据库的 alert log,但一些工程师对 alert log 不熟悉,实际上 alert log 位于Oracle 数据库自动诊断库(Automatic Diagnostic Repository,以下简称 ADR) 中,要熟悉 alert log,我们必需全面了解 ADR 的概念。ADR(Automatic Diagnostic Repository)是一个基于文件的存储库,用于存储数据库诊断数据,如跟踪、转储、警报日志、运行状况监视报告等。它具有跨多个实例和多个产品的统一目录结构。为什么基于文件的原因是显而易见的,因为数据库出现故障的时候数据库可能无法打开,将诊断信息放到文件里面保证了随时可以查阅。数据库、Oracle自动存储管理(Oracle ASM)、侦听器、Oracle Clusterware和其他Oracle产品或组件将所有诊断数据存储在ADR中。每个产品的每个实例都将诊断数据存储在ADR中自己的主目录下。例如,在具有共享存储和 Oracle ASM 的 Oracle Real Application Clusters 环境中,每个数据库实例和每个 Oracle ASM 实例都有一个ADR主目录。


ADR 中的文件

trace:每个服务器和后台进程都可以写入关联的 trace 文件。trace 文件在流程的整个生命周期内定期更新,可以包含有关流程环境、状态、活动和错误的信息。此外,当进程检测到严重错误时,它会将有关该错误的信息写入其 trace 文件。

dumps:dumps 是一种特定类型的 trace 文件。它通常是针对事件(如事件)的诊断数据的一次性输出,而 trace file 往往是诊断数据的连续输出。

core: core 文件包含一个内存转储,采用全二进制的格式。

Alert Log 和 sbtio.log 在后面说明。


ADR 的目录结构

ADR 的基目录称为 ADR base ,其位置由数据库的参数 DIAGNOSTIC_DEST 决定,如果省略此参数或将其留空,则数据库将在启动时采用下面的规则进行设置:


如果设置了环境变量 ORACLE_BASE,则 DIAGNOSTIC_DEST 设置为 ORACLE_BASE 指定的目录。

如果未设置环境变量 ORACLE_BASE,则 DIAGNOSTIC_DEST 设置为 ORACLE_HOME/log。

因此,目前一个常见的 ADR base 例子是 /u01/app/oracle。

image.png

在ADR base中,可以有多个 ADR home,其中每个 ADR home 是特定 Oracle 产品或组件的特定实例的所有诊断数据跟踪、转储、警报日志等的根目录。例如,在带有 Oracle ASM 的 Oracle Real Application Clusters 环境中,每个数据库实例、Oracle ASM实例和侦听器都有一个ADR home,结构如下:


一个方便的查询所有组件的家目录的方法是在 adrci 工具中用 show homes 的命令,例如:

ADR base = "/u01/app/grid"
adrci> show homes;
ADR Homes: 
diag/asm/+asm/+ASM1
diag/crs/rac1/crs
diag/clients/user_grid/host_1874443374_110
diag/clients/user_root/host_1874443374_110
diag/tnslsnr/rac1/asmnet1lsnr_asm
diag/tnslsnr/rac1/listener_scan1
diag/tnslsnr/rac1/listener
diag/asmcmd/user_grid/rac1
diag/asmcmd/user_oracle/rac1
diag/kfod/rac1/kfod

数据库的 ADR 家目录结构

每个产品的 ADR 家的路径构成如下:(从 ADR 的基目录开始)


diag/product_type/product_id/instance_id


我们以数据库为例:


路径组件 值

product_type rdbms

product_id DB_UNIQUE_NAME

instance_id SID

例如一个 DB_UNIQUE_NAME 和 SID 都是 orcl 的数据库 ADR 家目录是:/u01/app/oracle/diag/rdbms/orcl/orcl


每个子目录的作用如下:

alert:XML格式的 alert log

cdump:core 文件

incident: 多个子目录,其中每个子目录都是针对特定事件命名的,每个子目录只包含与该事件相关的转储

trace: 后台和服务器进程跟踪文件、SQL跟踪文件和文本格式的 alert log

others: ADR home的其他子目录,存储事件包、运行状况监视报告、警报日志以外的日志(例如DDL日志和调试日志)以及其他信息


在视图 v$diag_info 中存储着 ADR 重要目录的路径:


select * from v$diag_info
   INST_ID NAME    VALUE             CON_ID
---------- ---------------------------- ---------------------------------------------------------------- ----------
  1 Diag Enabled    TRUE           0
  1 ADR Base    /u01/app/oracle          0
  1 ADR Home    /u01/app/oracle/diag/rdbms/orcl/orcl       0
  1 Diag Trace    /u01/app/oracle/diag/rdbms/orcl/orcl/trace      0
  1 Diag Alert    /u01/app/oracle/diag/rdbms/orcl/orcl/alert      0
  1 Diag Incident  /u01/app/oracle/diag/rdbms/orcl/orcl/incident      0
  1 Diag Cdump    /u01/app/oracle/diag/rdbms/orcl/orcl/cdump      0
  1 Health Monitor  /u01/app/oracle/diag/rdbms/orcl/orcl/hm       0
  1 Default Trace File  /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_33364.trc    0
  1 Active Problem Count  0           0
  1 Active Incident Count 0           0
  1 ORACLE_HOME   /u01/app/oracle/product/19.0.0/db_1       0


Alert Log

Alert Log 可能是运维工程师最关心的日志,它是按时间顺序记录消息和错误的日志。每个 ADR 家目录中都有一个警报日志。每个警报日志都特定于其组件类型,如数据库、Oracle ASM、侦听器和Oracle Clusterware。

对于数据库,Alert Log 包含有关以下内容的消息:


严重错误(事件)

管理操作,如启动或关闭数据库、恢复数据库、创建或删除表空间等。

自动刷新实化视图时出错

其他数据库事件

Alert Log 的格式有两种,XML 格式和文本格式。您可以使用 cloud control 和ADRCI实用程序以文本格式(去掉XML标记)查看警报日志。为了向后兼容,ADR中还存储了一个文本格式的警报日志版本。但是,Oracle建议使用 XML 格式的版本对警报日志内容进行任何解析,因为文本格式是非结构化的,可能会因版本而异。

对于我们前面列举的 orcl 数据库,这两类的 alert log 如下:

$ tail /u01/app/oracle/diag/rdbms/orcl/orcl/alert/log.xml 
 <txt>Closing Resource Manager plan via scheduler window
 </txt>
</msg>
<msg time='2020-12-07T18:00:00.130+08:00' org_id='oracle' comp_id='rdbms'
 type='UNKNOWN' level='16' host_id='dell.scutech'
 host_addr='fe80::655e:8314:f61f:9bac%em1' pid='42245' con_uid='1784183627'
 con_id='5' con_name='SALESPDB'>
 <txt>Clearing Resource Manager plan via parameter
 </txt>
</msg>
$ tail /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log 
2020-12-07T18:00:00.077657+08:00
PDB1(3):Closing scheduler window
PDB1(3):Closing Resource Manager plan via scheduler window
PDB1(3):Clearing Resource Manager plan via parameter
HRPDB(4):Closing scheduler window
HRPDB(4):Closing Resource Manager plan via scheduler window
HRPDB(4):Clearing Resource Manager plan via parameter
SALESPDB(5):Closing scheduler window
SALESPDB(5):Closing Resource Manager plan via scheduler window
SALESPDB(5):Clearing Resource Manager plan via parameter

下面是一个 crs 的两类 alert log 的例子:


[grid@rac1 crs]$ tail /u01/app/grid/diag/crs/rac1/crs/alert/log.xml 
 <txt>2020-12-03 18:52:29.951 [ORAAGENT(35496)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 35496
 </txt>
</msg>
<msg time='2020-12-03T18:52:52.787+08:00' org_id='oracle' comp_id='crs'
 msg_id='clsdadr_process_queue:4927:2974305713' type='UNKNOWN' group='CLSDADR'
 level='16' host_id='rac1' host_addr='192.168.82.175'
 pid='36879'>
 <txt>2020-12-03 18:52:52.679 [ORAAGENT(36879)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 36879
 </txt>
</msg>
[grid@rac1 crs]$ tail /u01/app/grid/diag/crs/rac1/crs/trace/alert.log 
2020-12-03 18:52:13.218 [OCTSSD(34536)]CRS-2401: The Cluster Time Synchronization Service started on host rac1.
2020-12-03 18:52:13.218 [OCTSSD(34536)]CRS-2407: The new Cluster Time Synchronization Service reference node is host rac2.
2020-12-03 18:52:20.552 [CRSD(34786)]CRS-8500: Oracle Clusterware CRSD process is starting with operating system process ID 34786
2020-12-03 18:52:23.601 [CRSD(34786)]CRS-1012: The OCR service started on node rac1.
2020-12-03 18:52:23.671 [CRSD(34786)]CRS-1201: CRSD started on node rac1.
2020-12-03 18:52:24.356 [ORAAGENT(35004)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 35004
2020-12-03 18:52:24.420 [ORAROOTAGENT(35014)]CRS-8500: Oracle Clusterware ORAROOTAGENT process is starting with operating system process ID 35014
2020-12-03 18:52:24.480 [ORAAGENT(35028)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 35028
2020-12-03 18:52:29.951 [ORAAGENT(35496)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 35496
2020-12-03 18:52:52.679 [ORAAGENT(36879)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 36879
[grid@rac1 crs]$


sbtio log

sbtio.log,从这个文件的名字我们可以很容易推断这个日志文件是干什么用的,大家知道 rman 有两种通道,一种是 disk,另一种是 sbt,您可以认为是磁带机用的通道,io 的意思就不用说了吧,这个文件保存由介质管理软件写入的特定信息,例如鼎甲科技的迪备软件,Veritas的 nbu 软件都会在这个文件里面记录日志。

对于我们前面列举的 orcl 数据库,sbtio.log 的例子如下:

$ tail /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/sbtio.log

SBT-19152 11/18/20 22:40:43 [LM_ERROR] 7501: Failed to start session with server: Protocol not supported


ADRCI 工具

ADRCI 工具是 Oracle11g 版本推出的新工具,主要用来管理alert文件、trace文件、dump文件、健康检查报告等。这个工具可以快速查询错误相关的所有trace文件,并将这些文件打包到一个zip文件,以便将问题相关的信息提供给Oracle的技术支持。

下面是生成一个问题报告的例子。

[grid@rac1 crs]$ adrci
ADRCI: Release 19.0.0.0.0 - Production on Tue Dec 8 11:26:34 2020
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
ADR base = "/u01/app/grid"
adrci> show problems
ADR Home = /u01/app/grid/diag/crs/rac1/crs:
*************************************************************************
PROBLEM_ID           PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME                             
-------------------- ----------------------------------------------------------- -------------------- ---------------------------------------- 
1                    CRS 8503                                                    33                   2020-12-03 18:34:59.547000 +08:00       
1 row fetched
adrci> set homepath diag/crs/rac1/crs
adrci>  IPS CREATE PACKAGE PROBLEM 1
Created package 1 based on problem id 1, correlation level typical
adrci> ips generate package 1 in /tmp
Generated package 1 in file /tmp/CRS8503_20201208114517_COM_1.zip, mode complete
adrci>



压缩文件 /tmp/CRS8503_20201208114517_COM_1.zip 中包含了问题 1 相关的日志和 trace 文件。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
38 7
|
20天前
|
存储 Oracle 关系型数据库
Dataphin常见问题之想要周期执行任务如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
20天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
15 2
|
3天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
27 4
|
20天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(2)
Oracle数据库基本概念理解(2)
13 1
|
3天前
|
存储 SQL Oracle
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
30 7
|
4天前
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
20天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(1)
Oracle数据库基本概念理解(1)
11 1
|
Oracle 关系型数据库 数据库
oracle数据库控制文件的备份和恢复之三RMAN自动备份和恢复
使用RMAN自动备份的控制文件向数据库中恢复控制文件
307 0
|
Oracle 关系型数据库 数据库

推荐镜像

更多