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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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 文件。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
326 93
|
1月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
167 0
|
4月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
268 8
|
4月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
231 11
|
4月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
4月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
121 0
|
7月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1492 28
|
5月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。

热门文章

最新文章

推荐镜像

更多