暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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_HOMEPATH环境变量已正确配置,让系统能找到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数据库故障排查的效率。

 



END
往期文章回顾

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流AI、数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。



文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论