楼主: 666666222211
363 0

[其他] Oracle 19C ADRCI 工具完全使用指南:从基础到故障诊断实战 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

42%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
50 点
帖子
4
精华
0
在线时间
0 小时
注册时间
2018-3-9
最后登录
2018-3-9

楼主
666666222211 发表于 2025-11-21 18:51:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

引言

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
show homes
列出 ADR Base 下的所有实例或组件对应的诊断目录
设置单一 ADR Home
set homepath diag/rdbms/orcl19c/orcl19c
聚焦某一特定数据库实例,适用于 19C 单实例场景
设置多个 ADR Home
set homepath diag/rdbms/orcl19c
同时选中一个数据库下的多个实例,常用于 RAC 架构
重置 ADR Home 设置
set homepath ''
恢复为默认状态,允许对所有 ADR Home 进行操作
查看当前 ADR Home
show homepath
验证当前生效的操作范围是否准确

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
可执行文件存在且具备执行权限。

执行

show alert
时报错 “no ADR homes are set”?
可通过
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 全面融入日常运维流程,借助自动化脚本实现诊断数据的规范化管理,并通过周期性清理策略保障系统健康运行。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Oracle 故障诊断 使用指南 ACL CLE

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 13:19