Oracle ADRCI工具全面使用指南:从基础到故障诊断实战
ADRCI(Automatic Diagnostic Repository Command Interpreter)是Oracle 11g及以上版本引入的故障可诊断性架构核心工具,用于管理和分析自动诊断信息库(ADR)中的诊断数据。无论是查看告警日志、定位Trace文件,还是打包故障信息提交Oracle Support,ADRCI都能提供高效的命令行支持,是DBA日常故障排查的必备工具。
一、ADRCI简介与前置条件
1.1 什么是ADRCI?
ADRCI是Oracle数据库自带的命令行工具,无需单独安装,其核心功能包括:
- 查看ADR中的告警日志、Trace文件、事件(Incident)等诊断数据;
- 生成健康监视器(Health Monitor)报告;
- 将故障事件(Incident)和问题(Problem)打包为压缩文件,便于提交Oracle Support分析。
1.2 前置条件:环境变量配置
使用ADRCI前,需确保ORACLE_HOME和PATH环境变量已正确配置,让系统能找到ADRCI可执行文件(位于$ORACLE_HOME/bin
目录下):
# 配置环境变量(以Linux为例)
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH# 验证配置:直接输入adrci启动工具
$ adrci
ADRCI: Release 19.0.0.0.0 - Production on Wed Oct 11 10:00:00 2025
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.ADR base = "/u01/app/oracle/diag"
adrci>
二、ADRCI核心操作指南
ADRCI的所有操作均基于ADR Home(诊断数据目录)——每个数据库实例、客户端或工具都对应一个独立的ADR Home。因此,设置ADR Home是所有操作的前提。
2.1 ADR Home管理:指定诊断数据来源
ADR Home是诊断数据的存储目录(如diag/rdbms/orcl/orcl
),需先明确操作的Home,再执行后续命令。
2.1.1 查看所有可用ADR Home
通过show home
命令列出当前ADR Base下的所有Home:
adrci> show home
ADR Homes:
1: diag/rdbms/orcl/orcl # 数据库实例的ADR Home
2: diag/clients/user_oracle/host_123456_78 # 客户端ADR Home
3: diag/diagtool/user_oracle/adrci_123456_78 # ADRCI工具自身的ADR Home
2.1.2 设置ADR Home
使用set homepath
(或简写set home
)指定当前操作的ADR Home,支持单个或多个Home:
# 设置单个ADR Home(常用)
adrci> set homepath diag/rdbms/orcl/orcl# 验证当前Home
adrci> show home
ADR Homes:
diag/rdbms/orcl/orcl # 已选中的Home
若未设置ADR Home直接执行操作(如show alert
),ADRCI会提示选择Home,按编号选择即可。
2.2 查看与分析告警日志
Oracle 11g后,告警日志同时以XML格式(ADR中)和文本格式($ORACLE_BASE/diag/rdbms/<dbname>/<instname>/trace/alert_<instname>.log
)存储。ADRCI主要用于查看XML格式日志,支持灵活过滤和实时跟踪。
2.2.1 基础查看:使用默认编辑器
ADRCI默认调用系统编辑器(如Linux的vi
、Windows的notepad
)打开告警日志,可通过set editor
修改默认编辑器:
# Windows下设置记事本为编辑器
adrci> set editor notepad.exe# 打开告警日志(需先设置ADR Home)
adrci> show alert
2.2.2 终端直接显示:-term参数
若不想打开编辑器,可通过-term
参数在终端直接显示日志:
adrci> show alert -term
2.2.3 实时跟踪与尾部查看:-tail参数
- 查看最后N行日志:
show alert -tail N
(如显示最后50行); - 实时跟踪日志(类似
tail -f
):show alert -tail -f
(按Ctrl+C
退出)。
# 查看最后50行告警日志
adrci> show alert -tail 50# 实时跟踪日志
adrci> show alert -tail -f
2.2.4 过滤特定错误:-p参数
通过-p
参数筛选包含指定关键词的日志(如ORA-600、ORA-1578),支持SQL-like条件:
# 查找所有包含ORA-600的日志
adrci> show alert -p "MESSAGE_TEXT LIKE '%ORA-600%'"# 查找特定进程(如MMON)的日志
adrci> show alert -p "PROCESS_ID LIKE '%mmon%'"
2.2.5 日志重定向到文件
若需保存日志到文件,可通过spool
命令实现:
# 开启重定向,输出到/home/oracle/orcl_alert.log
adrci> spool /home/oracle/orcl_alert.log# 执行日志查看命令
adrci> show alert -term# 关闭重定向
adrci> spool off
2.3 Trace文件查找与筛选
Trace文件(如orcl_ora_12345.trc
)记录数据库进程的详细诊断信息,ADRCI的show tracefile
命令可快速定位目标文件。
2.3.1 查看当前ADR Home下所有Trace文件
adrci> show tracefile
diag/rdbms/orcl/orcl/trace/orcl_ora_12345.trc
diag/rdbms/orcl/orcl/trace/orcl_mmon_67890.trc
2.3.2 按名称过滤:通配符%
查找文件名包含特定关键词的Trace文件(如MMON进程相关):
adrci> show tracefile %mmon%
diag/rdbms/orcl/orcl/trace/orcl_mmon_67890.trc
2.3.3 按事件ID过滤:-I参数
查找与特定事件(Incident)关联的Trace文件(需已知事件ID):
# 查找事件ID=43417的Trace文件
adrci> show tracefile -I 43417
2.3.4 按修改时间排序:-RT参数
按文件修改时间降序显示(最新文件在前):
adrci> show tracefile -RT
2.4 事件(Incident)查看与详情
当数据库发生严重错误(如ORA-600、ORA-7445)时,会自动创建事件(Incident) 并生成对应的Trace文件。ADRCI可查看事件列表及详细信息。
2.4.1 查看所有事件:show incident
默认显示当前ADR Home下所有未关闭的事件:
adrci> show incident
ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:
INCIDENT_ID PROBLEM_KEY CREATE_TIME
433469 ORA 600 [4137] 2025-10-11 09:30:00.123456 +08:00
433470 ORA 1578 2025-10-11 09:35:00.654321 +08:00
2.4.2 查看事件详情:-mode detail
通过-mode detail
查看单个事件的完整信息(如错误原因、关联Trace文件路径):
# 查看事件ID=433469的详情
adrci> show incident -mode detail -p "incident_id=433469"
2.4.3 Oracle事件数量限制
为避免事件过多占用资源,Oracle默认限制:
- 每小时最多生成5个事件;
- 每天最多生成25个事件。
2.5 IPS事件打包:为Oracle Support准备诊断数据
当故障需Oracle Support协助时,可通过IPS(Incident Packaging Service) 将事件、Trace文件、告警日志等打包为压缩文件,步骤如下:
2.5.1 1. 创建逻辑包
逻辑包是临时容器,用于收集诊断数据:
# 创建空逻辑包(默认包ID=1)
adrci> ips create package
Created package 1 with default metadata.
2.5.2 2. 向逻辑包添加事件/文件
- 添加单个事件:
ips add incident <事件ID> package <包ID>
; - 添加时间范围内的所有事件:
ips create package time '开始时间' to '结束时间'
; - 手动添加Trace文件:
ips add file <文件路径> package <包ID>
。
# 向包1添加事件433469
adrci> ips add incident 433469 package 1# 创建包含2025-10-11 09:00-10:00事件的包(包ID=2)
adrci> ips create package time '2025-10-11 09:00:00 +08:00' to '2025-10-11 10:00:00 +08:00'# 手动添加Trace文件到包1
adrci> ips add file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_12345.trc package 1
2.5.3 3. 生成物理包(压缩文件)
将逻辑包中的数据生成ZIP格式的物理包,保存到指定目录:
# 生成包1的物理包,保存到/home/oracle目录
adrci> ips generate package 1 in /home/oracle
Generated package 1 in file /home/oracle/ORA600_20251011_093000.zip, size 1.2MB.
2.5.4 4. 增量添加数据(可选)
若需补充诊断数据,可增量更新物理包:
adrci> ips generate package 1 in /home/oracle incremental
2.5.5 5. 查看包内内容
- 查看包内文件:
ips show files package <包ID>
; - 查看包内事件:
ips show incidents package <包ID>
。
adrci> ips show files package 1
adrci> ips show incidents package 1
2.6 健康监视器(HM Run)报告生成与查看
健康监视器(Health Monitor)用于检查数据库结构完整性、数据块损坏等问题,ADRCI可生成并查看其报告。
2.6.1 查看HM Run列表
先通过show hm_run
获取报告ID(RUN_ID)和名称(RUN_NAME):
adrci> show hm_run
RUN_ID RUN_NAME CHECK_NAME START_TIME
75461 HM_RUN_75461 DB Structure Integrity Check 2025-10-11 06:00:00 +08:00
2.6.2 创建HM报告
基于RUN_NAME创建报告(仅支持hm_run
类型):
adrci> create report hm_run HM_RUN_75461
Report created.
2.6.3 查看HM报告
通过show report
查看报告内容(默认XML格式,可用于EM或DBMS_HM格式化):
adrci> show report hm_run HM_RUN_75461
<?xml version="1.0" encoding="US-ASCII"?>
<HM-REPORT REPORT_ID="HM_RUN_75461"><TITLE>HM Report: HM_RUN_75461</TITLE><RUN_INFO><CHECK_NAME>DB Structure Integrity Check</CHECK_NAME><RUN_STATUS>COMPLETED</RUN_STATUS><RUN_START_TIME>2025-10-11 06:00:00 +08:00</RUN_START_TIME></RUN_INFO>
</HM-REPORT>
2.7 诊断数据清理:PURGE命令
ADR中的诊断数据(告警日志、Trace文件、事件)会占用磁盘空间,可通过purge
命令按策略清理。默认保留策略:
- 事件/问题信息:保留1年;
- Trace文件/转储文件:保留30天。
2.7.1 PURGE命令语法
purge [[-i <事件ID1> | <事件ID1 事件ID2>] | [-age <分钟> [-type <数据类型>]] | [-size <字节>]]
2.7.2 常用清理场景
- 按默认策略清理当前ADR Home数据:
adrci> purge
- 清理指定事件ID范围的数据(如123-456):
adrci> purge -i 123 456
- 清理N分钟前的指定类型数据(如1小时前的事件):
# 清理60分钟前的事件(-type支持ALERT/INCIDENT/TRACE/CDUMP/HM) adrci> purge -age 60 -type incident
- 清理数据直到ADR Home大小降至指定字节(如100MB):
adrci> purge -size 104857600 # 100MB = 100*1024*1024字节
2.8 帮助命令:快速查询用法
若记不清命令参数,可通过help
获取帮助:
# 查看所有可用命令
adrci> help# 查看特定命令的详细用法(如purge)
adrci> help purge# 查看Oracle内部命令(进阶)
adrci> help extended
三、ADRCI常用操作总结
为方便快速查阅,整理以下高频操作命令表:
操作目标 | 命令示例 |
---|---|
启动ADRCI | $ adrci |
设置ADR Home | adrci> set homepath diag/rdbms/orcl/orcl |
查看告警日志(实时) | adrci> show alert -tail -f |
筛选ORA-600日志 | adrci> show alert -p “MESSAGE_TEXT LIKE ‘%ORA-600%’” |
查找MMON相关Trace文件 | adrci> show tracefile %mmon% |
查看事件列表 | adrci> show incident |
打包事件433469到/home | adrci> ips create package; ips add incident 433469 package 1; ips generate package 1 in /home |
清理1小时前的Trace文件 | adrci> purge -age 60 -type trace |
通过ADRCI,DBA可高效管理诊断数据、定位故障根源,尤其是在无图形化界面(如生产环境)的场景下,其命令行灵活性和功能性远胜于直接编辑文本文件。掌握上述操作,可大幅提升Oracle数据库故障排查的效率。