本文档风哥主要介绍Oracle ADRCI(Automatic Diagnostic Repository Command Interpreter)使用相关知识,包括ADRCI的概念、ADRCI组成、ADRCI使用、ADRCI配置、ADRCI监控、ADRCI故障处理等内容,由风哥教程参考Oracle官方文档Troubleshooting内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 ADRCI的概念
Oracle ADRCI(Automatic Diagnostic Repository Command Interpreter)是Oracle提供的一款命令行工具,用于管理ADR(Automatic Diagnostic Repository)中的诊断数据。ADRCI可以查看、打包、传输诊断数据,是Oracle数据库故障诊断的重要工具。ADRCI提供了丰富的命令来管理诊断文件、问题和事件。更多视频教程www.fgedu.net.cn
- 命令行工具:提供丰富的命令行接口
- 统一管理:统一管理诊断数据
- 问题跟踪:跟踪问题和事件
- 数据打包:打包诊断数据
- 数据传输:传输诊断数据
1.2 ADRCI组成
Oracle ADRCI组成:
- ADR基目录:ADR的根目录
- ADR主目录:特定数据库或组件的ADR目录
- 诊断数据:跟踪文件、告警日志、转储文件等
- 问题:相关事件的集合
- 事件:单个问题的诊断信息
1. ADR基目录(ADR Base)
– ADR的根目录
– 包含多个ADR主目录
– 由参数DIAGNOSTIC_DEST指定
– 默认位置:$ORACLE_BASE
2. ADR主目录(ADR Home)
– 特定数据库或组件的ADR目录
– 包含诊断数据
– 路径格式:diag/rdbms/db_name/instance_name
– 包含trace、alert、incident等子目录
3. 诊断数据
– 跟踪文件(.trc)
– 告警日志(alert.log)
– 转储文件(.dmp)
– 核心转储(core)
4. 问题(Problem)
– 相关事件的集合
– 有唯一的问题键值
– 包含多个事件
– 可以打包和传输
5. 事件(Incident)
– 单个问题的诊断信息
– 有唯一的事件ID
– 包含跟踪文件和转储文件
– 可以打包和传输
1.3 ADRCI使用
Oracle ADRCI使用:
- 查看诊断数据:查看跟踪文件、告警日志等
- 管理问题:查看和管理问题
- 管理事件:查看和管理事件
- 打包数据:打包诊断数据
- 传输数据:传输诊断数据
Part02-生产环境规划与建议
2.1 ADRCI规划
Oracle ADRCI规划要点:
– ADR配置:确定ADR目录结构和配置
– 诊断管理:确定诊断数据管理策略
– 问题跟踪:确定问题跟踪流程
– 数据打包:确定数据打包策略
# ADR配置规划
– ADR基目录:选择合适的ADR基目录
– ADR主目录:确保ADR主目录正确
– 空间管理:确保有足够的磁盘空间
– 权限设置:确保正确的文件权限
# 诊断管理规划
– 保留策略:确定诊断数据保留时间
– 清理策略:确定清理策略
– 备份策略:确定备份策略
– 归档策略:确定归档策略
# 问题跟踪规划
– 问题识别:确定问题识别方法
– 问题分类:确定问题分类方法
– 问题处理:确定问题处理流程
– 问题归档:确定问题归档方法
# 数据打包规划
– 打包时机:确定何时打包诊断数据
– 打包范围:确定打包哪些数据
– 打包存储:确定打包文件存储位置
– 打包传输:确定打包文件传输方式
2.2 ADRCI场景
Oracle ADRCI场景:
- 故障诊断:诊断数据库故障
- 问题分析:分析数据库问题
- 数据收集:收集诊断数据
- Oracle Support:向Oracle Support提供数据
- 日常维护:日常诊断数据维护
1. 故障诊断
– 数据库启动失败
– 数据库性能问题
– 数据库连接问题
– 数据库错误诊断
2. 问题分析
– ORA错误分析
– 性能问题分析
– 配置问题分析
– 安全问题分析
3. 数据收集
– 跟踪文件收集
– 告警日志收集
– 配置文件收集
– 事件打包
4. Oracle Support
– 创建SR时收集数据
– 按Oracle Support要求收集
– 上传诊断数据
– 跟踪问题处理
5. 日常维护
– 清理旧的诊断数据
– 检查诊断数据大小
– 监控问题数量
– 定期归档诊断数据
2.3 ADRCI最佳实践
Oracle ADRCI最佳实践:
- 定期检查:定期检查ADR状态
- 及时清理:及时清理旧的诊断数据
- 问题跟踪:跟踪问题处理进度
- 数据打包:及时打包重要诊断数据
- 文档记录:记录ADRCI使用情况
Part03-生产环境项目实施方案
3.1 ADRCI配置
3.1.1 启动ADRCI
$ adrci
ADRCI: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
ADR base = “/oracle/app/oracle”
# 2. 查看帮助
adrci> help
HELP [topic]
Available Topics:
CREATE REPORT
ECHO
EXIT
HELP
HOST
IPS
PURGE
RUN
SET BASE
SET BROWSER
SET CONTROL
SET ECHO
SET EDITOR
SET HOMES | HOME | HOMEPATH
SET TERMOUT
SHOW ALERT
SHOW BASE
SHOW CONTROL
SHOW HM_RUN
SHOW HOMES | HOME | HOMEPATH
SHOW INCDIR
SHOW INCIDENT
SHOW LOG
SHOW PROBLEM
SHOW REPORT
SHOW TRACE
SHOW TRACEFILE
SPOOL
QUIT
# 3. 查看ADR基目录
adrci> show base
ADR base = “/oracle/app/oracle”
# 4. 查看ADR主目录
adrci> show homes
ADR Homes:
diag/rdbms/fgedudb/FGEDUDB
diag/tnslsnr/db01/listener
# 5. 设置ADR主目录
adrci> set homepath diag/rdbms/fgedudb/FGEDUDB
# 6. 查看当前ADR主目录
adrci> show homepath
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
# 7. 查看ADR控制信息
adrci> show control
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
ADRID SHORTP_POLICY LONGP_POLICY LAST_MOD_TIME LAST_AUTOPRG_TIME LAST_MANUPRG_TIME ADRDIR_VERSION ADRSCHM_VERSION ADRSCHMV_SUMMARY ADRALERT_VERSION CREATE_TIME
——————– ——————– ——————– —————————————- —————————————- —————————————- ——————– ——————– ——————– ——————– —————————————-
1234567890 720 8760 2026-01-01 00:00:00.000000 +08:00 2026-03-31 00:00:00.000000 +08:00 1 2 110 1 2026-01-01 00:00:00.000000 +08:00
1 row fetched
# 8. 设置ADR控制参数
adrci> set control (SHORTP_POLICY=1440)
# 9. 查看ADR目录结构
adrci> show tracefile
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12346.trc
diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_lgwr_1234.trc
diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log
4 rows fetched
3.1.2 使用ADRCI查看诊断数据
adrci> show alert
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
2026-03-31 10:00:00.123000 +08:00
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Initial number of CPU is 4
Number of processor cores in the system is 4
Number of processor sockets in the system is 1
…
# 2. 查看告警日志尾部
adrci> show alert -tail
2026-03-31 10:00:00.123000 +08:00
Thread 1 advanced to log sequence 1234
Current log# 1 seq# 1234 mem# 0: /oracle/app/oracle/oradata/FGEDUDB/redo01.log
2026-03-31 10:00:01.123000 +08:00
Archived Log entry 1234 added for thread 1 sequence 1233 ID 0x12345678 dest 1:
# 3. 查看特定时间的告警日志
adrci> show alert -p “message_text like ‘%ORA-%’ and originating_timestamp > systimestamp – 1”
# 4. 查看问题列表
adrci> show problem
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME
——————– ———————————————————– ——————– ————————————–
1 ORA 600 [1234] 12345 2026-03-31 10:00:00.123456 +08:00
2 ORA 7445 [ksasnd] 12346 2026-03-31 09:00:00.123456 +08:00
2 rows fetched
# 5. 查看事件列表
adrci> show incident
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
——————– ———————————————————– ————————————–
12345 ORA 600 [1234] 2026-03-31 10:00:00.123456 +08:00
12346 ORA 7445 [ksasnd] 2026-03-31 09:00:00.123456 +08:00
12347 ORA 600 [1234] 2026-03-31 08:00:00.123456 +08:00
3 rows fetched
# 6. 查看事件详情
adrci> show incident -mode detail -p “incident_id=12345”
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
INCIDENT_ID 12345
STATUS ready
CREATE_TIME 2026-03-31 10:00:00.123456 +08:00
PROBLEM_ID 1
CLOSE_TIME
FLOOD_CONTROLLED none
ERROR_FACILITY ORA
ERROR_NUMBER 600
ERROR_ARG1 1234
ERROR_ARG2 1
ERROR_ARG3 2
ERROR_ARG4 3
ERROR_ARG5 4
ERROR_ARG6 5
ERROR_ARG7 6
ERROR_ARG8 7
# 7. 查看事件目录
adrci> show incdir
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
incident/incdir_12345
incident/incdir_12346
incident/incdir_12347
3 rows fetched
# 8. 查看跟踪文件
adrci> show tracefile %lgwr%
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_lgwr_1234.trc
1 row fetched
3.2 ADRCI监控
3.2.1 配置ADRCI定期检查
$ vi /home/oracle/scripts/check_adr.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# ADRCI定期检查脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/adr_check”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d)
LOG_FILE=”$LOG_DIR/adr_check_$DATE.log”
echo “$(date): Starting ADR check…” > $LOG_FILE
# 检查ADR状态
adrci <
set homepath diag/rdbms/fgedudb/FGEDUDB
show control
show problem
show incident -p “status=’ready'”
EOF
echo “$(date): ADR check completed.” >> $LOG_FILE
# 发送报告
mail -s “ADR Check Report – $DATE” admin@fgedu.net.cn < $LOG_FILE
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/check_adr.sh
# 3. 测试脚本
$ /home/oracle/scripts/check_adr.sh
# 4. 设置定期检查
$ crontab -e
# 每天早上6点检查ADR
0 6 * * * /home/oracle/scripts/check_adr.sh >> /home/oracle/adr_check/cron.log 2>&1
3.2.2 配置ADRCI清理
adrci> purge -age 1440 -type ALERT
adrci> purge -age 720 -type TRACE
adrci> purge -age 4320 -type INCIDENT
# 2. 创建ADRCI清理脚本
$ vi /home/oracle/scripts/purge_adr.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# ADRCI清理脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/adr_purge”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d)
LOG_FILE=”$LOG_DIR/adr_purge_$DATE.log”
echo “$(date): Starting ADR purge…” > $LOG_FILE
# 清理诊断数据
adrci <
set homepath diag/rdbms/fgedudb/FGEDUDB
purge -age 1440 -type ALERT
purge -age 720 -type TRACE
purge -age 4320 -type INCIDENT
show control
EOF
echo “$(date): ADR purge completed.” >> $LOG_FILE
# 发送报告
mail -s “ADR Purge Report – $DATE” admin@fgedu.net.cn < $LOG_FILE
# 3. 设置脚本权限
$ chmod +x /home/oracle/scripts/purge_adr.sh
# 4. 测试脚本
$ /home/oracle/scripts/purge_adr.sh
# 5. 设置定期清理
$ crontab -e
# 每周日凌晨5点清理ADR
0 5 * * 0 /home/oracle/scripts/purge_adr.sh >> /home/oracle/adr_purge/cron.log 2>&1
3.3 ADRCI故障处理
3.3.1 ADRCI常见问题
# 错误信息
$ adrci
ERROR: Cannot initialize ADRCI
# 解决方案
# 1. 检查环境变量
$ echo $ORACLE_HOME
$ echo $PATH
# 2. 检查ADR目录
$ ls -la $ORACLE_BASE/diag
# 3. 检查权限
$ ls -la $ORACLE_BASE/diag/rdbms
# 4. 设置正确的环境变量
$ export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
$ export PATH=$ORACLE_HOME/bin:$PATH
# 5. 重新启动ADRCI
$ adrci
# 问题2:ADRCI无法找到ADR主目录
# 错误信息
adrci> show homes
ADR Homes:
(no homes found)
# 解决方案
# 1. 检查ADR基目录
adrci> show base
# 2. 设置ADR基目录
adrci> set base /oracle/app/oracle
# 3. 查看ADR主目录
adrci> show homes
# 问题3:ADRCI清理失败
# 错误信息
adrci> purge -age 1440
DIA-48218: The purge operation failed
# 解决方案
# 1. 检查ADR控制
adrci> show control
# 2. 检查磁盘空间
$ df -h $ORACLE_BASE/diag
# 3. 手动清理
$ rm -rf $ORACLE_BASE/diag/rdbms/fgedudb/FGEDUDB/incident/incdir_*
# 4. 重新运行清理
adrci> purge -age 1440
3.3.2 ADRCI问题修复
adrci> show problem -p “problem_id=1” -detail
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
**********************************************************
PROBLEM INFO RECORD 1
**********************************************************
PROBLEM_ID 1
PROBLEM_KEY ORA 600 [1234]
FIRST_INCIDENT 12345
FIRSTINC_TIME 2026-03-31 10:00:00.123456 +08:00
LAST_INCIDENT 12347
LASTINC_TIME 2026-03-31 08:00:00.123456 +08:00
IMPACT1 0
IMPACT2 0
IMPACT3 0
IMPACT4 0
KEY_NAME ProcId
KEY_VALUE 30.1
KEY_NAME Client PID
KEY_VALUE 12345.1
KEY_NAME SID
KEY_VALUE 150.1234
OWNER_ID 1
INCIDENT_FILE /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/incident/incdir_12345/FGEDUDB_ora_12345_i12345.trc
# 2. 创建事件打包
adrci> ips create package problem 1
Created package 1 based on problem id 1, correlation level typical
# 3. 查看打包内容
adrci> ips show package 1
PACKAGE_ID 1
PACKAGE_NAME ORA600_20260331100000
PACKAGE_DESCRIPTION
DRIVING_PROBLEM 1
DRIVING_PROBLEM_KEY ORA 600 [1234]
DRIVING_INCIDENT 12345
DRIVING_INCIDENT_TIME 2026-03-31 10:00:00.123456 +08:00
STATUS New (0)
CREATED 2026-03-31 10:00:00.123456 +08:00
# 4. 添加文件到打包
adrci> ips add file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log into package 1
Added file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log into package 1
# 5. 生成打包文件
adrci> ips generate package 1 in /home/oracle
Generated package 1 in file /home/oracle/ORA600_20260331100000_COM_1.zip, mode complete
# 6. 关闭问题
adrci> ips close package 1
Package 1 closed successfully.
# 7. 验证修复
adrci> show problem -p “problem_id=1”
ADR Home = /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB:
*************************************************************************
PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME
——————– ———————————————————– ——————– ————————————–
1 ORA 600 [1234] 12345 2026-03-31 10:00:00.123456 +08:00
1 row fetched
Part04-生产案例与实战讲解
4.1 ADRCI分析案例
在生产环境中使用ADRCI的完整案例:
4.1.1 场景描述
某企业生产数据库出现ORA-00600错误,需要使用ADRCI收集诊断数据。
4.1.2 分析步骤
$ vi /home/oracle/scripts/auto_adrci.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# ADRCI自动化脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/adrci_reports”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=”$LOG_DIR/adrci_$DATE.log”
echo “========================================” > $LOG_FILE
echo “ADRCI Diagnostic Report” >> $LOG_FILE
echo “Date: $(date)” >> $LOG_FILE
echo “========================================” >> $LOG_FILE
# 运行ADRCI命令
adrci <
set homepath diag/rdbms/fgedudb/FGEDUDB
show control
show problem
show incident -p “status=’ready'”
show alert -tail 50
EOF
echo “” >> $LOG_FILE
echo “ADRCI report completed at $(date)” >> $LOG_FILE
# 发送报告
mail -s “ADRCI Diagnostic Report – $DATE” admin@fgedu.net.cn < $LOG_FILE
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/auto_adrci.sh
# 3. 测试脚本
$ /home/oracle/scripts/auto_adrci.sh
# 4. 设置定期检查
$ crontab -e
# 每天早上6点运行
0 6 * * * /home/oracle/scripts/auto_adrci.sh >> /home/oracle/adrci_reports/cron.log 2>&1
4.2 ADRCI故障处理
在ADRCI故障处理过程中的方法和技巧:
4.2.1 故障处理流程
# 1. 查看问题列表
adrci> show problem
# 2. 查看事件列表
adrci> show incident
# 3. 查看事件详情
adrci> show incident -mode detail -p “incident_id=12345”
# 4. 查看告警日志
adrci> show alert -tail
# 5. 创建事件打包
adrci> ips create package incident 12345
# 6. 生成打包文件
adrci> ips generate package 1 in /home/oracle
# 7. 上传到Oracle Support
# 登录Oracle Support网站手动上传
# 示例:处理ORA-00600错误
# 1. 查看问题
adrci> show problem -p “problem_key like ‘%ORA 600%'”
# 2. 查看事件
adrci> show incident -p “problem_id=1”
# 3. 创建打包
adrci> ips create package problem 1
# 4. 生成打包文件
adrci> ips generate package 1 in /home/oracle
# 5. 上传到Oracle Support
4.3 ADRCI优化
优化ADRCI配置的最佳实践:
4.3.1 优化ADRCI管理
SQL> create or replace procedure manage_adr_results(
p_check_date in date,
p_total_problems in number,
p_total_incidents in number
) as
begin
dbms_output.put_line(‘— ADR Results Management —‘);
dbms_output.put_line(‘Check Date: ‘ || to_char(p_check_date, ‘YYYY-MM-DD HH24:MI:SS’));
dbms_output.put_line(‘Total Problems: ‘ || p_total_problems);
dbms_output.put_line(‘Total Incidents: ‘ || p_total_incidents);
— 可以扩展为记录到表中
end manage_adr_results;
/
Procedure created.
# 2. 执行管理存储过程
SQL> set serveroutput on
SQL> exec manage_adr_results(sysdate, 5, 15);
— ADR Results Management —
Check Date: 2026-03-31 10:00:00
Total Problems: 5
Total Incidents: 15
PL/SQL procedure successfully completed.
# 3. 创建ADR历史表
SQL> create table adr_history (
id number primary key,
check_date date,
total_problems number,
total_incidents number,
total_trace_size number,
notes varchar2(4000)
);
Table created.
SQL> create sequence adr_history_seq;
Sequence created.
# 4. 记录检查历史
SQL> insert into adr_history values (
adr_history_seq.nextval,
sysdate,
5,
15,
1024,
‘Daily ADR check’
);
1 row created.
SQL> commit;
Commit complete.
# 5. 查看检查历史趋势
SQL> column check_date format a20
SQL> select check_date, total_problems, total_incidents, total_trace_size
from adr_history
order by check_date desc
fetch first 12 rows only;
CHECK_DATE TOTAL_PROBLEMS TOTAL_INCIDENTS TOTAL_TRACE_SIZE
——————– ————– ————— —————-
2026-03-31 10:00:00 5 15 1024
2026-03-30 10:00:00 8 20 2048
2026-03-29 10:00:00 10 25 3072
Part05-风哥经验总结与分享
5.1 ADRCI总结
Oracle ADRCI是Oracle数据库故障诊断的重要工具,具有以下特点:
- 命令行工具:提供丰富的命令行接口
- 统一管理:统一管理诊断数据
- 问题跟踪:跟踪问题和事件
- 数据打包:打包诊断数据
- 数据传输:传输诊断数据
5.2 ADRCI检查清单
Oracle ADRCI检查清单:
- 定期检查:定期检查ADR状态
- 及时清理:及时清理旧的诊断数据
- 问题跟踪:跟踪问题处理进度
- 数据打包:及时打包重要诊断数据
- 文档记录:记录ADRCI使用情况
- 空间管理:监控ADR空间使用
5.3 ADRCI工具推荐
Oracle ADRCI工具推荐:
- ADRCI:Oracle诊断命令行工具
- TFA:Oracle跟踪文件分析器
- ORAchk:Oracle健康检查工具
- EXAchk:Exadata健康检查工具
- Shell脚本:自动化管理过程
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
