引言
ADRCI(Automatic Diagnostic Repository Command Interpreter)是 Oracle 从 11g 版本开始引入的重要故障诊断工具,在 Oracle 19C 中更是成为可诊断性架构的核心模块。该工具通过命令行方式统一管理自动诊断信息库(ADR),涵盖跟踪文件、警报日志、事件转储、健康检查报告等关键诊断信息,不仅取代了 Oracle Enterprise Manager Support Workbench 的多数功能,还新增了如批量操作、跟踪文件搜索等实用特性。
对于运行 Oracle 19C 的数据库管理员而言,ADRCI 是日常维护与问题排查不可或缺的利器 —— 无论是快速定位 ORA-00600 或 ORA-7445 等严重错误,还是整理诊断资料提交给 Oracle 技术支持,亦或清理过期日志释放磁盘空间,均可借助 ADRCI 高效完成。本文依据 Oracle 19C 官方文档,系统介绍 ADRCI 的配置方法、核心功能、实际应用案例及最佳实践策略,助力 DBA 快速掌握其使用技巧。
一、ADRCI 基础概念与环境设置
1.1 关键术语解析
ADR(Automatic Diagnostic Repository):作为基于文件系统的诊断数据集中存储仓库,ADR 使用标准化目录结构跨多个实例和组件保存诊断信息。在 Oracle 19C 中,ASM 实例以及所有数据库相关组件均将其诊断输出写入 ADR。
ADR Base:即 ADR 的根目录,由特定初始化参数进行控制,默认路径为:
$ORACLE_BASE
ADR Home:每个数据库实例、ASM 实例或独立组件都拥有专属的诊断目录,其路径格式如下:
diag/<产品类型>/<数据库名>/<实例名>
例如:
diag/rdbms/orcl19c/orcl19c
事件(Incident):表示某次具体故障的发生,具备唯一标识 ID。当错误触发时,系统会自动生成对应的转储文件,并将此次事件记录下来。
问题(Problem):指由相同根本原因引发的一组事件集合,比如多次出现的 ORA-00600 错误。一个“问题”可关联多个“事件”。
DIAGNOSTIC_DEST
1.2 环境准备步骤(适用于 Linux/Unix 系统)
ADRCI 不需要额外安装,Oracle 19C 默认已集成于数据库软件中,通常位于以下目录:
$ORACLE_HOME/bin
使用前需正确配置相关环境变量:
# 1. 配置Oracle环境变量(建议写入.bash_profile永久生效)
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl19c
# 2. 验证配置并启动ADRCI
adrci
启动成功后,终端将显示当前 ADR Base 路径,示例如下:
ADR base = "/u01/app/oracle/diag"
adrci>
1.3 Oracle 19C 典型 ADR 目录结构(单实例示例)
以下是 Oracle 19C 单实例环境下 ADR 的标准目录层级布局:
/u01/app/oracle/diag/
└── rdbms/
└── orcl19c/ # 数据库名
└── orcl19c/ # 实例名(ADR Home)
├── alert/ # 警报日志(XML格式)
├── cdump/ # 核心转储文件
├── incident/ # 事件专属目录(incdir_<事件ID>)
├── trace/ # 跟踪文件(含文本格式alert.log)
└── hm/ # 健康监视器报告
二、ADRCI 核心功能与常用指令详解
2.1 ADR Home 管理(基础操作)
所有 ADRCI 操作均依赖于当前选定的 ADR Home,因此必须首先明确作用范围。常见操作包括:
| 功能 | 命令示例 | 说明 |
|---|---|---|
| 查看所有 ADR Home | |
列出 ADR Base 下的所有实例或组件对应的诊断目录 |
| 设置单一 ADR Home | |
聚焦某一特定数据库实例,适用于 19C 单实例场景 |
| 设置多个 ADR Home | |
同时选中一个数据库下的多个实例,常用于 RAC 架构 |
| 重置 ADR Home 设置 | |
恢复为默认状态,允许对所有 ADR Home 进行操作 |
| 查看当前 ADR Home | |
验证当前生效的操作范围是否准确 |
2.2 诊断信息查询(故障定位关键环节)
2.2.1 查询警报日志(最常用入口)
警报日志(alert log)记录了数据库启动关闭过程、关键操作及错误信息,是初步排查问题的首要切入点:
# 1. 查看最新100行(实时定位近期错误)
show alert -tail 100;
# 2. 过滤近2小时内的ORA错误
show alert -time 'SYSDATE-2/24' TO 'SYSDATE' -p "MESSAGE LIKE '%ORA-%'";
# 3. 保存日志到文件(便于后续分析)
show alert -output '/tmp/orcl19c_alert.log';
# 4. 实时跟踪日志(类似tail -f)
show alert -tail 0 -follow;
2.2.2 查看事件与问题信息
通过事件 ID 和问题编号可以追溯故障发生的历史记录及其关联性:
# 1. 查看所有事件(含ID、问题ID、发生时间)
show incident;
# 2. 过滤致命级别(FATAL)的事件
show incident -p "ERROR_LEVEL='FATAL' AND CREATE_TIME>SYSDATE-1";
# 3. 查看所有问题(同一根因的故障集合)
show problem;
# 4. 查看指定问题的详细信息(问题ID=123)
show problem ID 123;
# 5. 查看事件存储目录(事件ID=456)
show incdir ID 456;
2.2.3 跟踪文件检索
跟踪文件详细记录了各进程的执行流程,是深入分析性能瓶颈或异常行为的重要依据:
# 1. 查看所有跟踪文件
show tracefile;
# 2. 过滤指定事件的跟踪文件(事件ID=456)
show tracefile -p "INCIDENT_ID=456";
# 3. 查看近24小时生成的跟踪文件
show tracefile -p "CREATE_TIME>SYSDATE-1";
# 4. 直接查看跟踪文件内容(需先设置编辑器)
set editor 'vi';
edit orcl19c_ora_7890.trc;
2.3 故障诊断报告生成
ADRCI 支持按事件、问题或健康监视器结果自动生成结构化诊断报告,便于内部分析:
# 1. 按事件ID生成报告(最常用,事件ID=456)
create report incident ID 456;
# 2. 按问题ID生成报告(问题ID=123)
create report problem ID 123;
# 3. 生成近1天的健康监视器报告
create report hm_run time 'SYSDATE-1' TO 'SYSDATE';
# 4. 生成HTML格式报告(便于可视化查看)
create report incident ID 456 format html;
# 5. 查看已生成的报告列表
show report;
2.4 IPS 事件打包(用于提交技术支持)
IPS(Incident Packaging Service)功能可将指定事件相关的全部诊断数据打包成 ZIP 文件,这是向 Oracle Support 提交问题的标准做法:
# 1. 创建事件包(自定义包名my_incident_pkg)
ips create package name my_incident_pkg;
# 2. 向包中添加事件(事件ID=456)
ips add incident 456 to package my_incident_pkg;
# 3. 清理敏感数据(如密码、IP,必须执行)
ips edit package my_incident_pkg scrub;
# 4. 生成ZIP包(指定输出目录/tmp)
ips generate package my_incident_pkg dir '/tmp';
# 5. 查看包信息
ips show package my_incident_pkg;
# 6. 删除无用包
ips delete package my_incident_pkg;
2.5 诊断数据清理(释放磁盘资源)
随着 Oracle 19C 数据库运行时间增长,ADR 中积累的日志和转储文件可能占用大量磁盘空间,建议定期执行清理任务:
# 1. 清理所有类型过期数据(保留默认30天)
purge;
# 2. 自定义保留期(保留最近15天,删除更早数据)
purge -p "RETENTION_TIME=15";
# 3. 仅清理跟踪文件(保留7天)
purge tracefile -p "RETENTION_TIME=7";
# 4. 清理指定问题的所有事件数据(问题ID=123)
purge incident -p "PROBLEM_ID=123";
# 5. 按时间清理(删除30天前的核心转储文件)
purge cdump -p "CREATE_TIME < SYSDATE-30";
2.6 批处理模式应用(实现自动化运维)
Oracle 19C 支持以脚本形式批量执行 ADRCI 命令,适合用于定时巡检、自动归档或周期性清理等运维场景。
步骤 1: 创建 ADRCI 脚本文件(如 adrci_script.ads)
set homepath diag/rdbms/orcl19c/orcl19c;
spool '/tmp/daily_diag_report.log';
show alert -tail 500;
show incident -p "CREATE_TIME>SYSDATE-1";
show problem;
spool off;
purge -p "RETENTION_TIME=15";
步骤 2: 在操作系统命令行中调用脚本执行
adrci -script /home/oracle/adrci_script.ads
步骤 3: 配置定时任务(使用 cron 实现周期运行)
# 每天凌晨2点执行清理脚本(19C生产环境推荐)
crontab -e
0 2 * * * /u01/app/oracle/product/19c/dbhome_1/bin/adrci -script /home/oracle/adrci_purge.ads
三、实战演练:使用 ADRCI 排查 ORA-00600 错误(Oracle 19C 场景)
以下以典型的内部错误 ORA-00600 为例,展示完整的 ADRCI 故障诊断流程。
步骤 1: 指定目标 ADR Home 并查找错误源头
# 1. 聚焦目标实例
set homepath diag/rdbms/orcl19c/orcl19c;
# 2. 查看警报日志中的ORA-00600记录
show alert -p "MESSAGE LIKE '%ORA-00600%'";
输出样例(关键部分):
MESSAGE
----------------------------------------------------------------------
ORA-00600: internal error code, arguments: [ktfacht1-0], [1234], [], [], [], [], [], []
Incident 456 created, dump file: incdir_456/orcl19c_ora_7890.trc
步骤 2: 获取事件与问题详情,确认故障上下文
# 1. 查看事件456的详细信息
show incident ID 456;
# 2. 查看关联的问题(获取问题ID=123)
show problem -p "INCIDENT_ID=456";
步骤 3: 生成综合诊断报告,辅助本地分析
# 生成事件456的详细报告(含跟踪文件片段、错误栈)
create report incident ID 456;
# 保存报告到文件
show report ID 1 -output '/tmp/ora600_report.txt';
步骤 4: 使用 IPS 打包数据并准备提交至 Oracle 技术支持
ips create package name ora600_pkg;
ips add incident 456 to package ora600_pkg;
ips edit package ora600_pkg scrub; # 清理敏感数据
ips generate package ora600_pkg dir '/tmp'; # 生成ZIP包
步骤 5: 后续处理措施
待问题解决后,可考虑清除已完成诊断的事件数据,避免长期占用存储资源:
/tmp/ora600_pkg_1.zip四、Oracle 19C 环境下 ADRCI 使用要点与优化建议
4.1 核心注意事项
环境变量的优先级控制
在 Oracle 19C 版本中,
DIAGNOSTIC_DEST 所定义的参数具有高于 ORACLE_BASE 的优先级。若需调整 ADR Base 路径,必须通过 ALTER SYSTEM SET DIAGNOSTIC_DEST='/新路径' SCOPE=SPFILE; 进行配置,并重启数据库实例以使变更生效。
数据安全性保障
使用
PURGE 命令删除的数据将无法恢复。因此,在执行该操作前,建议先利用 IPS 对关键故障信息进行打包备份。在生产环境中,严禁不带参数直接运行 PURGE 操作。
RAC 架构下的适配策略
在 RAC(Real Application Clusters)环境中,每个数据库实例拥有独立的 ADR Home 目录。为确保全面覆盖,应通过
set homepath diag/rdbms/orcl19c 命令统一处理所有实例;也可针对特定实例路径单独操作,例如指定 diag/rdbms/orcl19c/orcl19c1 路径进行管理。
权限配置要求
运行 ADRCI 工具需要具备
oracle 用户权限,并对 ADR 目录具备读写访问能力。禁止使用 root 用户直接执行相关命令,以防权限过高引发系统风险。
4.2 推荐运维最佳实践
定期诊断数据清理
为防止 ADR 占用过多磁盘空间,建议在生产环境中设置每日定时任务(cron job),自动清除 15 至 30 天前的历史诊断信息,保持系统资源合理利用。
实时日志监控机制
可结合
show alert -follow 实现对警报日志(alert log)的持续监控,及时捕获 ORA 错误及严重警告信息,提升问题响应速度。
重要报告归档管理
对于重大故障生成的诊断报告,建议长期保存并分类归档,以便后续遇到类似问题时快速比对分析,缩短排查周期。
多工具协同分析
ADRCI 输出的跟踪文件可导入
tkprof 工具进行格式化解析,尤其适用于 SQL 性能问题的深入诊断,显著提高故障定位效率。
五、常见问题解答(FAQ)
启动 ADRCI 出现 “adrci: command not found” 提示?
请检查
ORACLE_HOME 和 PATH 环境变量是否正确配置,并确认 $ORACLE_HOME/bin/adrci 可执行文件存在且具备执行权限。
执行
时报错 “no ADR homes are set”?show alert
可通过
show homes 查看当前可用的 ADR Home 列表,随后使用 set homepath 显式指定目标路径;或根据提示输入对应的 ADR Home 编号进行选择。
命令执行失败如何处理?IPS GENERATE
主要排查方向包括:目标目录是否具备写入权限、磁盘剩余空间是否充足、以及事件数据是否完整(未被
PURGE 清除)。
如何在 19C 中查看 HTML 格式的诊断报告?
可通过
set browser '/usr/bin/google-chrome' 配置默认浏览器,当生成 HTML 报告后系统将自动调用浏览器打开,具体命令参考 create report incident ID 456 format html;。
总结
ADRCI 是 Oracle 19C 故障诊断体系中的核心组件,凭借其统一的命令行接口和高效的诊断数据管理功能,极大提升了 DBA 在日常运维中的排障效率。熟练掌握 ADR Home 管理、诊断信息查询、报告生成以及 IPS 数据包创建等关键技能,并结合实际案例积累经验,能够有效应对绝大多数数据库异常情况。
尽管 Oracle 19C 未新增 ADRCI 命令,但在目录结构设计、跨版本数据兼容性以及批量处理稳定性方面进行了显著优化,使其成为企业级数据库部署的理想选择。建议 DBA 将 ADRCI 全面融入日常运维流程,借助自动化脚本实现诊断数据的规范化管理,并通过周期性清理策略保障系统健康运行。


雷达卡


京公网安备 11010802022788号







