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 文件。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4天前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
8天前
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。
|
10天前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
22 2
|
1天前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1天前
|
分布式计算 Oracle 关系型数据库
实时计算 Flink版产品使用问题之获取Oracle的数据时无法获取clob类型的数据,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1天前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
36 7
|
26天前
|
Oracle 安全 关系型数据库
|
20天前
|
开发框架 Oracle 关系型数据库
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
|
25天前
|
Oracle 关系型数据库 数据库

推荐镜像

更多