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目录下):

bash 复制代码
# 配置环境变量(以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:

bash 复制代码
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:

bash 复制代码
# 设置单个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修改默认编辑器:

bash 复制代码
# Windows下设置记事本为编辑器
adrci> set editor notepad.exe

# 打开告警日志(需先设置ADR Home)
adrci> show alert
2.2.2 终端直接显示:-term参数

若不想打开编辑器,可通过-term参数在终端直接显示日志:

bash 复制代码
adrci> show alert -term
2.2.3 实时跟踪与尾部查看:-tail参数
  • 查看最后N行日志:show alert -tail N(如显示最后50行);
  • 实时跟踪日志(类似tail -f):show alert -tail -f(按Ctrl+C退出)。
bash 复制代码
# 查看最后50行告警日志
adrci> show alert -tail 50

# 实时跟踪日志
adrci> show alert -tail -f
2.2.4 过滤特定错误:-p参数

通过-p参数筛选包含指定关键词的日志(如ORA-600、ORA-1578),支持SQL-like条件:

bash 复制代码
# 查找所有包含ORA-600的日志
adrci> show alert -p "MESSAGE_TEXT LIKE '%ORA-600%'"

# 查找特定进程(如MMON)的日志
adrci> show alert -p "PROCESS_ID LIKE '%mmon%'"
2.2.5 日志重定向到文件

若需保存日志到文件,可通过spool命令实现:

bash 复制代码
# 开启重定向,输出到/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文件
bash 复制代码
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进程相关):

bash 复制代码
adrci> show tracefile %mmon%
diag/rdbms/orcl/orcl/trace/orcl_mmon_67890.trc
2.3.3 按事件ID过滤:-I参数

查找与特定事件(Incident)关联的Trace文件(需已知事件ID):

bash 复制代码
# 查找事件ID=43417的Trace文件
adrci> show tracefile -I 43417
2.3.4 按修改时间排序:-RT参数

按文件修改时间降序显示(最新文件在前):

bash 复制代码
adrci> show tracefile -RT

2.4 事件(Incident)查看与详情

当数据库发生严重错误(如ORA-600、ORA-7445)时,会自动创建事件(Incident) 并生成对应的Trace文件。ADRCI可查看事件列表及详细信息。

2.4.1 查看所有事件:show incident

默认显示当前ADR Home下所有未关闭的事件:

bash 复制代码
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文件路径):

bash 复制代码
# 查看事件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. 创建逻辑包

逻辑包是临时容器,用于收集诊断数据:

bash 复制代码
# 创建空逻辑包(默认包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>
bash 复制代码
# 向包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格式的物理包,保存到指定目录:

bash 复制代码
# 生成包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. 增量添加数据(可选)

若需补充诊断数据,可增量更新物理包:

bash 复制代码
adrci> ips generate package 1 in /home/oracle incremental
2.5.5 5. 查看包内内容
  • 查看包内文件:ips show files package <包ID>
  • 查看包内事件:ips show incidents package <包ID>
bash 复制代码
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):

bash 复制代码
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类型):

bash 复制代码
adrci> create report hm_run HM_RUN_75461
Report created.
2.6.3 查看HM报告

通过show report查看报告内容(默认XML格式,可用于EM或DBMS_HM格式化):

bash 复制代码
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命令语法
bash 复制代码
purge [[-i <事件ID1> | <事件ID1 事件ID2>] | [-age <分钟> [-type <数据类型>]] | [-size <字节>]]
2.7.2 常用清理场景
  • 按默认策略清理当前ADR Home数据:

    bash 复制代码
    adrci> purge
  • 清理指定事件ID范围的数据(如123-456):

    bash 复制代码
    adrci> purge -i 123 456
  • 清理N分钟前的指定类型数据(如1小时前的事件):

    bash 复制代码
    # 清理60分钟前的事件(-type支持ALERT/INCIDENT/TRACE/CDUMP/HM)
    adrci> purge -age 60 -type incident
  • 清理数据直到ADR Home大小降至指定字节(如100MB):

    bash 复制代码
    adrci> purge -size 104857600  # 100MB = 100*1024*1024字节

2.8 帮助命令:快速查询用法

若记不清命令参数,可通过help获取帮助:

bash 复制代码
# 查看所有可用命令
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数据库故障排查的效率。

相关推荐
数据库生产实战2 小时前
Oracle LOB使用入门和简单使用,提供学习用的测试用例!
数据库·学习·oracle
武子康3 小时前
Java-144 深入浅出 MongoDB BSON详解:MongoDB核心存储格式与JSON的区别与应用场景
java·开发语言·数据库·mongodb·性能优化·json·bjson
Raymond运维3 小时前
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
linux·运维·数据库·mysql
高山上有一只小老虎3 小时前
如何在DBeaver中配置高斯数据库的连接
数据库
云飞云共享云桌面3 小时前
东莞精密机械制造工厂如何10个SolidWorks共用一台服务器资源
java·运维·服务器·网络·数据库·电脑·制造
ActionTech3 小时前
2025 年 9 月《大模型 SQL 能力排行榜》发布,新增 Kimi K2 最新版测评!
数据库·sql·ai·oracle
lang201509284 小时前
掌握MyBatis Java API:高效操作数据库
java·数据库·mybatis
Mr.wangh4 小时前
Redis作为分布式锁
数据库·redis·分布式
白云偷星子5 小时前
MySQL笔记11
数据库·笔记·mysql