Oracle ADRCI 诊断数据工具总结

Oracle ADRCI 诊断数据工具总结

一、ADRCI概述

1.1 什么是ADRCI

ADRCI(Automatic Diagnostic Repository Command Interpreter,自动诊断存储库命令解释器)是Oracle 11g版本开始引入的故障诊断基础架构的一部分。它是一个命令行工具,用于管理Oracle数据库的自动诊断存储库(ADR,Automatic Diagnostic Repository)中的诊断数据。

ADR是一个基于文件的数据库诊断数据存储库,用于存储跟踪文件(trace files)、转储文件(dumps)、警报日志(alert logs)、运行状况监视器报告等诊断数据。从Oracle 11g开始,数据库、自动存储管理(ASM)以及其他Oracle产品或组件将所有诊断数据统一存储在ADR中。

1.2 ADRCI的核心功能

ADRCI使DBA能够完成以下任务:

  • 查看ADR中的诊断数据(告警日志、Trace文件等)
  • 查看运行状况监视器(Health Monitor)报告
  • 查看和跟踪事件(Incident)与问题(Problem)
  • 将事件和问题信息打包成ZIP文件,便于提交给Oracle支持团队分析
  • 批量清理过期的诊断日志文件,释放磁盘空间

1.3 ADRCI的优势

优势 说明
无需数据库开启 即使数据库实例未启动,也可以查看诊断数据
统一管理 跨多个实例和产品统一管理诊断数据,无需反复切换环境变量
问题追踪 每个问题都有唯一的问题键和问题ID,可通过SHOW PROBLEM查看
事件记录 每个问题根据发生的次数记录为一个个事件,每个事件由唯一的事件ID标识
跨平台支持 所有平台均支持

1.4 核心概念

概念 说明
ADR Base ADR的根目录,由DIAGNOSTIC_DEST参数控制,默认值为$ORACLE_BASE
ADR Home 每个数据库实例、ASM实例或组件对应的独立诊断目录
事件(Incident) 单个故障的具体发生实例,每个事件有唯一ID
问题(Problem) 同一根因导致的故障集合(如重复出现的ORA-00600)

1.5 ADR 与 ADRCI 的关系

ADR(Automatic Diagnostic Repository)是 Oracle 11g 引入的统一诊断数据存储架构,它将所有数据库组件(如 RDBMS、ASM、CRS 等)的诊断数据集中存储在文件系统中的一个特定目录树中。ADRCI 则是操作和管理这个 ADR 目录树的专用命令行接口。

二、查询Alert日志地址

2.1 使用ADRCI查看Alert日志地址

ADRCI最大的便利之一就是无需记忆复杂的日志路径,直接通过命令即可查看alert日志地址:

bash 复制代码
# 进入ADRCI交互模式
$ adrci

# 查看alert日志位置
adrci> show home
ADR Homes: 
diag/rdbms/orcl/orcl       --这个位置,就是alert日志位置!
diag/tnslsnr/host51/listener

2.2 通过SQL查询Alert日志地址

在数据库中可以查询V$DIAG_INFO视图来定位alert日志的位置:

sql 复制代码
-- 查询诊断信息
set linesize 200 pagesize 999
col name format a21 
col value format a65
SELECT name, value FROM v$diag_info;

-- 重点关注以下条目:
-- Diag Trace   -> trace文件目录(包含文本格式的alert日志)
-- Diag Alert   -> alert日志目录(XML格式)
-- Default Trace File -> 当前会话的trace文件

NAME                  VALUE
--------------------- -----------------------------------------------------------------
Diag Enabled          TRUE
ADR Base              /u01/app/oracle
ADR Home              /u01/app/oracle/diag/rdbms/orcl/orcl
Diag Trace            /u01/app/oracle/diag/rdbms/orcl/orcl/trace
Diag Alert            /u01/app/oracle/diag/rdbms/orcl/orcl/alert
Diag Incident         /u01/app/oracle/diag/rdbms/orcl/orcl/incident
Diag Cdump            /u01/app/oracle/diag/rdbms/orcl/orcl/cdump
Health Monitor        /u01/app/oracle/diag/rdbms/orcl/orcl/hm
Default Trace File    /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_93864.trc
Active Problem Count  0
Active Incident Count 0

2.3 Alert日志的物理路径

Oracle 11g及以后版本,alert日志的默认存储路径为:

复制代码
$ORACLE_BASE/diag/rdbms/<数据库名>/<实例名>/trace/alert_<实例名>.log

例如:

复制代码
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log

同时,ADR中也存储了XML格式的alert日志:

复制代码
$ORACLE_BASE/diag/rdbms/<数据库名>/<实例名>/alert/log.xml

注意:Oracle建议对alert日志内容的解析应基于XML格式版本,因为文本格式是非结构化的,可能在不同版本间发生变化。

三、GI集群中查询Alert日志地址

3.1 GI集群的ADR结构

在GI(Grid Infrastructure)集群环境中,每个组件都有自己独立的ADR Home。每个ADR Home中的alert日志都特定于其组件类型,如数据库、Oracle ASM、监听器(Listener)和Oracle Clusterware。

3.2 集群中各组件的Alert日志路径

组件 ADR Home路径示例
数据库实例 diag/rdbms/<db_name>/<instance_name>
ASM实例 diag/asm/+asm/+ASM
监听器 diag/tnslsnr/<hostname>/listener
Clusterware diag/crs/<hostname>/crs

3.3 在集群中使用ADRCI查看日志

查看所有可用的ADR Home

bash 复制代码
su - grid
adrci
adrci> show homes

11g版本的输出示例:

复制代码
adrci> show homes;
ADR Homes: 
diag/asm/+asm/+ASM1
diag/tnslsnr/host40rac1/listener
11g版本的GI集群日志,并没有纳入进ADRCI管控

19c版本的输出示例:

复制代码
adrci> show homes;
ADR Homes: 
diag/asmtool/user_grid/host_2921199188_110
diag/asm/+asm/+ASM1
diag/crs/host61rac1/crs        --可以看到,从19c版本开始,已经将GI集群的日志也纳入ADRCI管控
diag/tnslsnr/host61rac1/asmnet1lsnr_asm
diag/tnslsnr/host61rac1/listener_scan1
diag/tnslsnr/host61rac1/listener
diag/asmcmd/user_grid/host61rac1
diag/kfod/host61rac1/kfod

切换并查看特定组件的alert日志

bash 复制代码
# 查看ASM的alert日志
adrci> set homepath diag/asm/+asm/+ASM1
adrci> show alert -tail 200

# 查看监听器的alert日志
adrci> set homepath diag/tnslsnr/rac01/listener
adrci> show alert  -tail -f

3.4 集群环境的重要注意事项

关键提醒 :RAC中各节点的GI日志目录不是共享的 ------即使使用ASM存储,每个节点的diag/crs/<hostname>/crs是本机文件系统路径。在节点1上运行ADRCI清理操作,对节点2完全无效。因此,集群环境的日志清理需要在每个节点上分别执行

在集群环境中,ADRCI的位置在$ORACLE_HOME/bin目录下。需要注意的是,集群环境通常在grid用户 下操作,而单机环境则在oracle用户下操作。

四、ADRCI使用方法

4.1 启动ADRCI

交互式模式

bash 复制代码
# 直接输入adrci命令
$ adrci
ADRCI: Release 11.2.0.4.0 - Production on Tue Aug 4 16:46:58 2026
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
ADR base = "/u01/app/oracle"

批处理模式

bash 复制代码
# 使用exec选项执行单个命令
adrci exec="show homes"
adrci exec="set homepath diag/rdbms/orcl/orcl; show alert -tail 100"

4.2 ADR Home管理

ADRCI的所有操作均基于ADR Home,因此设置正确的Home是所有操作的前提。

查看所有ADR Home

bash 复制代码
adrci> show homes
ADR Homes: 
diag/rdbms/orcl/orcl
diag/tnslsnr/host51/listener

设置当前ADR Home

bash 复制代码
# 设置单个ADR Home
adrci> set homepath diag/rdbms/orcl/orcl

# 验证当前Home
adrci> show home
ADR Homes: diag/rdbms/orcl/orcl

如果未设置ADR Home直接执行操作,ADRCI会提示选择Home,按编号选择即可。

4.3 健康检查

作为一名DBA,每天对数据库进行健康检查是日常工作。通过ADRCI可以快速高效地完成检查。

查看所有问题(Problems)

bash 复制代码
adrci> show problem

该命令会显示所有实例运行中发生的严重错误。如果没有任何输出,说明实例运行过程中没有发生严重错误。

查看所有事件(Incidents)

bash 复制代码
adrci> show incident -all

查看特定事件的详细信息

bash 复制代码
adrci> show incident -mode detail -p "incident_id=433469"

4.4 清理日志

数据库日志文件过大可能导致磁盘空间不足甚至数据库宕机。ADRCI提供了安全、高效的日志清理方式。

查看清理命令帮助

bash 复制代码
adrci> help purge

按时间清理日志(单位:分钟):

bash 复制代码
# 删除10天(1440分钟)前的alert日志(是指alertxxx.xml类型的文件)  --常用!!
purge -age 14400 -type alert

# 删除10天(14400分钟)前的trace文件(是指trc.trm类型的文件)  --常用!!
purge -age 14400 -type trace

设置ADR Home后清理

bash 复制代码
set homepath diag/rdbms/orcl/orcl
purge -age 14400
不指定类型,清理alert和trace两种类型的!--常用!!

在命令行中直接执行清理(不进入交互模式):

bash 复制代码
-- 常用
adrci exec="show homes"
adrci exec="set homepath diag/rdbms/orcl/orcl; purge -age 14400"

注意:默认情况下,当天的trace文件不能被清理。清理操作无需停止数据库实例,不影响实例运行。

4.5 IPS打包错误日志

IPS(Incident Packaging Service,事件打包服务)是Oracle 11g的新特性,可以查看某个错误相关的所有dump文件和trace文件,并方便地打包成一个文件,极大方便了DBA进行远程诊断。

基本打包流程

  1. 使用SHOW INCIDENT -ALL获取错误事件ID
  2. 创建逻辑包
  3. 将事件添加到包中
  4. 生成物理包(ZIP文件)

示例操作

bash 复制代码
# 1. 查看事件列表,获取事件ID
adrci> show incident -all

# 2. 创建一个空的逻辑包
adrci> ips create package

# 3. 将诊断信息加入逻辑包(假设事件ID为43369,包号为1)
adrci> ips add incident 43369 package 1
# 3.1 将事件加入到package中,可加入多个事件
ips add incident 72697 package 1 

# 4. 生成物理包(ZIP文件)到指定目录
adrci> ips generate package 1 in /home/oracle

adrci> ips generate package 1 in /home/oracle
Generated package 1 in file /home/oracle/IPSPKG_20260804174302_COM_1.zip, mode complete

直接创建包含事件的包

bash 复制代码
# 创建包时直接指定事件ID
adrci> ips create package incident 43369

# 创建包时直接指定问题ID
adrci> ips create package problem 1

按时间范围打包

bash 复制代码
# 创建包含两个时间点之间所有事件的包
adrci> ips create package time '2025-09-12 10:00:00 -08:00' to '2025-09-12 23:00:00 -08:00'

手动添加文件到已有包

bash 复制代码
adrci> ips add file <ADR_BASE>/diag/rdbms/orcl/orcl/trace/orcl_ora12345.trc package 1

查看和管理包

bash 复制代码
# 显示包中的所有文件
adrci> ips show files

# 显示包中的所有事件
adrci> ips show incidents

# 从包中移除诊断文件
adrci> ips remove file

4.6 其他常用命令

命令 说明
SHOW BASE 显示当前ADR Base路径
SHOW TRACEFILE 显示当前ADR Home下的所有trace文件
SHOW TRACEFILE %mmon% 查找包含特定字符串的trace文件
SHOW TRACEFILE -I 43417 显示与特定事件相关的trace文件
HELP 列出所有可用命令
HELP [command] 查看特定命令的详细语法
SET EDITOR 设置查看alert日志的编辑器
SPOOL 将输出重定向到文件

五、日志保留策略配置

ADRCI允许通过设置保留策略来控制诊断数据的自动清理,避免手动频繁清理。

5.1 查看当前保留策略

bash 复制代码
adrci> set homepath diag/rdbms/orcl/orcl
adrci> show control

5.2 设置保留策略

bash 复制代码
# SHORTP_POLICY:短保留策略(单位:小时),主要管理TRACE、core dump等
# LONGP_POLICY:长保留策略(单位:小时),主要管理alert log、incident信息等

# 设置短保留策略为72小时(3天)
adrci> set control (SHORTP_POLICY = 72)

# 设置长保留策略为720小时(30天)
adrci> set control (LONGP_POLICY = 720)

5.3 默认保留策略

策略 默认值 管理内容
SHORTP_POLICY 720小时(30天) TRACE文件、core dump、打包信息
LONGP_POLICY 8760小时(365天) Alert日志、incident信息、incident转储

六、常用查询与维护命令汇总

6.1 快速参考

操作 命令
启动ADRCI adrci
查看所有Home show homes
设置当前Home set homepath diag/rdbms/orcl/orcl
查看当前Home show home
查看ADR Base show base
查看alert日志 show alert
实时查看alert日志 show alert -tail -f
查看最近N行alert show alert -tail 50
查看ORA错误 show alert -p "message_text like '%ORA-%'"
查看所有问题 show problem
查看所有事件 show incident -all
查看特定事件详情 show incident -mode detail -p "incident_id=xxx"
查看trace文件 show tracefile
清理日志 purge -age 1440 -type alert
创建IPS包 ips create package
生成IPS包 ips generate package 1 in /path
查看帮助 help
查看保留策略 show control
设置保留策略 set control (SHORTP_POLICY = 72)

6.2 常用清理场景

bash 复制代码
# 场景1:清理7天前的trace文件(10080分钟)
adrci> purge -age 10080 -type trace

# 场景2:清理30天前的alert日志(43200分钟)
adrci> purge -age 43200 -type alert

# 场景3:清理所有类型中7天前的数据
adrci> purge -age 10080

七、常见问题与注意事项

7.1 常见问题

Q1:ADRCI可以查看CRS日志吗?

11g版本不可以,ADRCI只可以查看数据库、ASM、监听器的日志,但CRS(Cluster Ready Services)日志通常不包含在ADRCI的show home列表中。19c版本开始支持查看CRS日志。

Q2:集群环境中的日志清理需要注意什么?

RAC各节点的GI日志目录是独立的,需要在每个节点上分别执行清理操作。

Q3:为什么有些日志无法通过purge清理?

默认情况下,当天的trace文件不能被清理。如需强制清理,可调整ARCH_CLEAN_IGNORE_MODE参数。

Q4:ADRCI工具的位置在哪里?

ADRCI位于$ORACLE_HOME/bin目录下。

相关推荐
zzzll11111 小时前
Loop Engineering:循环工程的原理、实践与应用
java·数据库·python
IpdataCloud1 小时前
IPv6查出来的地理位置是错的?技术解析与双栈定位方案
数据库·tcp/ip·ip
数字新视界2 小时前
信创动环监控厂家深入剖析智能机房环境监控技术应用与挑战
服务器·数据库·物联网·芯片·动环监控系统
羑悻的小杀马特2 小时前
打破深海垄断:国产数据库如何托起固井软件的“数据心脏”?
数据库
今天AI了吗2 小时前
从 LLM 到 Agent Skill:把 AI 底层概念串起来
数据库·人工智能·sql·深度学习·神经网络·算法·机器学习
2401_894915532 小时前
新手落地 Geo 优化:源码下载、依赖安装、数据库初始化完整步骤
运维·服务器·数据库·人工智能·缓存·开源
万维易源2 小时前
免费药品信息查询:用API 读懂常用药
java·前端·数据库·药品信息·药品查询·药品查询api
郑州光合科技余经理2 小时前
餐饮预定系统架构拆解:订单链路、权限组织与私有化源码交付
java·开发语言·前端·数据库·人工智能·系统架构·php
xfhuangfu2 小时前
Oracle 19c 本地索引分区变为 UNUSABLE 后的空间占用验证
数据库·oracle