本文档风哥主要介绍Oracle事件打包相关知识,包括事件打包的概念、事件打包组成、事件打包使用、事件打包配置、事件打包监控、事件打包故障处理等内容,由风哥教程参考Oracle官方文档Troubleshooting内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 事件打包的概念
Oracle事件打包(Incident Packaging)是Oracle数据库提供的一种诊断信息收集机制,用于将相关的诊断信息打包成一个可传输的文件。事件打包包含跟踪文件、转储文件、告警日志等相关诊断信息,便于向Oracle Support提供诊断数据。事件打包是ADR(Automatic Diagnostic Repository)的重要组成部分。更多视频教程www.fgedu.net.cn
- 自动收集:自动收集相关诊断信息
- 完整打包:包含所有相关诊断文件
- 可传输:可以传输给Oracle Support
- 安全加密:可以加密保护敏感信息
- 便于分析:便于Oracle Support分析问题
1.2 事件打包组成
Oracle事件打包组成:
- 事件(Incident):单个问题的诊断信息集合
- 问题(Problem):相关事件的集合
- 诊断文件:跟踪文件、转储文件等
- 打包文件:ZIP格式的压缩包
- 元数据:事件描述和诊断信息
1. 事件(Incident)
– 单个问题的诊断信息
– 包含跟踪文件、转储文件
– 有唯一的事件ID
– 有创建时间和状态
2. 问题(Problem)
– 相关事件的集合
– 共享相同的错误代码
– 有唯一的问题键值
– 包含多个事件
3. 诊断文件
– 跟踪文件(.trc)
– 转储文件(.dmp)
– 告警日志(alert.log)
– 配置文件
4. 打包文件
– ZIP格式压缩包
– 包含所有相关文件
– 可以加密保护
– 可以传输给Oracle Support
5. 元数据
– 事件描述信息
– 错误堆栈信息
– 环境信息
– 时间戳信息
1.3 事件打包使用
Oracle事件打包使用:
- 故障诊断:收集故障诊断信息
- Oracle Support:向Oracle Support提供诊断数据
- 问题分析:分析问题根本原因
- 知识库:建立问题知识库
- 预防措施:制定预防措施
Part02-生产环境规划与建议
2.1 事件打包规划
Oracle事件打包规划要点:
– 打包时机:确定何时需要打包事件
– 打包范围:确定打包哪些事件
– 打包工具:选择合适的打包工具
– 打包存储:确定打包文件存储位置
# 打包时机规划
– 严重错误:ORA-00600、ORA-07445等
– 性能问题:严重的性能问题
– 数据损坏:数据块损坏等问题
– Oracle Support请求:需要向Oracle Support提供诊断数据
# 打包范围规划
– 单个事件:打包单个事件
– 多个事件:打包多个相关事件
– 问题打包:打包整个问题
– 时间范围:打包指定时间范围内的事件
# 打包工具规划
– ADRCI:Oracle命令行工具
– Enterprise Manager:图形化管理工具
– Support Workbench:支持工作台
– 自定义脚本:自定义打包脚本
# 打包存储规划
– 本地存储:存储在本地服务器
– 远程存储:存储在远程服务器
– 临时存储:临时存储位置
– 备份存储:备份存储位置
2.2 事件打包场景
Oracle事件打包场景:
- ORA-00600错误:内部错误打包
- ORA-07445错误:异常错误打包
- 性能问题:性能问题诊断打包
- 数据损坏:数据损坏诊断打包
- Oracle Support请求:SR请求打包
1. ORA-00600错误
– 内部错误诊断
– 收集错误堆栈
– 收集相关跟踪文件
– 打包发送给Oracle Support
2. ORA-07445错误
– 异常错误诊断
– 收集异常信息
– 收集核心转储
– 打包发送给Oracle Support
3. 性能问题
– 性能问题诊断
– 收集AWR报告
– 收集ASH报告
– 收集SQL跟踪文件
4. 数据损坏
– 数据损坏诊断
– 收集损坏块信息
– 收集RMAN日志
– 收集验证报告
5. Oracle Support请求
– 创建SR(Service Request)
– 打包诊断信息
– 上传打包文件
– 等待Oracle Support分析
2.3 事件打包最佳实践
Oracle事件打包最佳实践:
- 及时打包:错误发生后及时打包
- 完整打包:确保打包所有相关文件
- 保护敏感信息:加密保护敏感信息
- 定期清理:定期清理旧的打包文件
- 文档记录:记录打包原因和结果
Part03-生产环境项目实施方案
3.1 事件打包配置
3.1.1 配置ADR
SQL> select * from v$diag_info;
INST_ID NAME VALUE
———- —————————— ————————————————–
1 Diag Enabled TRUE
1 ADR Base /oracle/app/oracle
1 ADR Home /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB
1 Diag Trace /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace
1 Diag Alert /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/alert
1 Diag Incident /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/incident
1 Diag Cdump /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/cdump
1 Health Monitor /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/hm
1 Default Trace File /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
1 Active Problem Count 5
1 Active Incident Count 10
# 2. 查看ADR目录结构
$ ls -la /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/
total 32
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 alert
drwxr-x— 3 oracle dba 4096 Mar 31 10:00 cdump
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 hm
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 incident
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 incpkg
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 lck
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 log
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 metadata
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 stage
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 sweep
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 trace
# 3. 配置ADR参数
SQL> alter system set diagnostic_dest=’/oracle/app/oracle’ scope=spfile;
System altered.
# 4. 重启数据库使配置生效
SQL> shutdown immediate;
SQL> startup;
3.1.2 配置事件打包
$ adrci
ADRCI: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026
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
# 2. 查看事件
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
# 3. 查看事件详情
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
SIGNALLING_COMPONENT ??
SIGNALLING_SUBCOMPONENT ??
SUSPECT_COMPONENT ??
SUSPECT_SUBCOMPONENT ??
ECID
IMPACTS 0
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
KEY_NAME Serivce Req
KEY_VALUE
KEY_NAME ORA_BRANCH
KEY_VALUE
OWNER_ID 1
INCIDENT_FILE /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/incident/incdir_12345/FGEDUDB_ora_12345_i12345.trc
OWNER_INCIDENT_ID 12345
ERRARG_TYPE1 DBKNUM
ERRARG_TYPE2 DBKNUM
ERRARG_TYPE3 DBKNUM
ERRARG_TYPE4 DBKNUM
ERRARG_TYPE5 DBKNUM
ERRARG_TYPE6 DBKNUM
ERRARG_TYPE7 DBKNUM
ERRARG_TYPE8 DBKNUM
# 4. 创建事件打包
adrci> ips create package incident 12345
Created package 1 based on incident id 12345, correlation level typical
# 5. 查看打包内容
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
# 6. 生成打包文件
adrci> ips generate package 1 in /home/oracle
Generated package 1 in file /home/oracle/ORA600_20260331100000_COM_1.zip, mode complete
# 7. 查看打包文件
$ ls -lh /home/oracle/ORA600_20260331100000_COM_1.zip
-rw-r–r– 1 oracle dba 1.2M Mar 31 10:00 /home/oracle/ORA600_20260331100000_COM_1.zip
# 8. 创建问题打包
adrci> ips create package problem 1
Created package 2 based on problem id 1, correlation level typical
# 9. 添加文件到打包
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
# 10. 添加事件到打包
adrci> ips add incident 12346 into package 1
Added incident 12346 into package 1
3.2 事件打包监控
3.2.1 配置事件打包监控脚本
$ vi /home/oracle/scripts/monitor_incidents.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
# 事件打包监控脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/scripts/incident_monitor”
mkdir -p $LOG_DIR
echo “$(date): Starting incident monitoring…” > $LOG_DIR/monitor.log
# 使用ADRCI检查问题
adrci <
set homepath diag/rdbms/fgedudb/FGEDUDB
show problem
show incident -p “status=’ready'”
EOF
# 检查新事件
NEW_INCIDENTS=$(adrci <
# 发送告警邮件
mail -s “New Incidents Detected: $NEW_INCIDENTS” admin@fgedu.net.cn < $LOG_DIR/monitor.log
fi
echo "$(date): Incident monitoring completed." >> $LOG_DIR/monitor.log
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/monitor_incidents.sh
# 3. 测试脚本
$ /home/oracle/scripts/monitor_incidents.sh
# 4. 设置定期监控
$ crontab -e
# 每小时监控事件
0 * * * * /home/oracle/scripts/monitor_incidents.sh >> /home/oracle/scripts/incident_monitor/monitor.log 2>&1
3.2.2 配置自动打包
$ vi /home/oracle/scripts/auto_package_incidents.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
# 自动打包事件脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/scripts/incident_package”
mkdir -p $LOG_DIR
echo “$(date): Starting automatic incident packaging…” > $LOG_DIR/package.log
# 获取问题列表
PROBLEMS=$(adrci <
# 创建打包
PACKAGE_ID=$(adrci <
set homepath diag/rdbms/fgedudb/FGEDUDB
ips generate package $PACKAGE_ID in /home/oracle/incident_packages
EOF
echo “$(date): Package $PACKAGE_ID created for problem $PROBLEM_ID” >> $LOG_DIR/package.log
fi
done
echo “$(date): Automatic incident packaging completed.” >> $LOG_DIR/package.log
# 发送报告
mail -s “Automatic Incident Packaging Report” admin@fgedu.net.cn < $LOG_DIR/package.log
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/auto_package_incidents.sh
# 3. 测试脚本
$ /home/oracle/scripts/auto_package_incidents.sh
# 4. 设置定期打包
$ crontab -e
# 每天凌晨2点自动打包
0 2 * * * /home/oracle/scripts/auto_package_incidents.sh >> /home/oracle/scripts/incident_package/package.log 2>&1
3.3 事件打包故障处理
3.3.1 ORA-00600错误打包
SQL> select * from scott.emp where empno = 7369;
select * from scott.emp where empno = 7369
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [1234], [1], [2], [3], [4], [5], [6], [7]
# 分析步骤
# 1. 查看事件
$ adrci
adrci> set homepath diag/rdbms/fgedudb/FGEDUDB
adrci> show incident -p “problem_key=’ORA 600 [1234]'”
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
12347 ORA 600 [1234] 2026-03-31 08:00:00.123456 +08:00
2 rows fetched
# 2. 查看事件详情
adrci> show incident -mode detail -p “incident_id=12345”
# 3. 创建打包
adrci> ips create package incident 12345
Created package 1 based on incident id 12345, correlation level typical
# 4. 添加相关文件
adrci> ips add file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log into package 1
adrci> ips add file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_lgwr_1234.trc 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. 验证打包文件
$ unzip -l /home/oracle/ORA600_20260331100000_COM_1.zip
Archive: /home/oracle/ORA600_20260331100000_COM_1.zip
Length Date Time Name
——— ———- —– —-
12345 2026-03-31 10:00 alert_FGEDUDB.log
6789 2026-03-31 10:00 incident/incdir_12345/FGEDUDB_ora_12345_i12345.trc
1234 2026-03-31 10:00 incident/incdir_12345/FGEDUDB_ora_12345_i12345.trm
——— ——-
20368 3 files
# 7. 上传到Oracle Support
# 登录Oracle Support网站
# 创建SR(Service Request)
# 上传打包文件
3.3.2 性能问题打包
$ adrci
adrci> set homepath diag/rdbms/fgedudb/FGEDUDB
# 2. 创建空打包
adrci> ips create package
Created package 3
# 3. 添加AWR报告
adrci> ips add file /home/oracle/awr_report.html into package 3
Added file /home/oracle/awr_report.html into package 3
# 4. 添加ASH报告
adrci> ips add file /home/oracle/ash_report.html into package 3
Added file /home/oracle/ash_report.html into package 3
# 5. 添加SQL跟踪文件
adrci> ips add file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc into package 3
Added file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc into package 3
# 6. 添加告警日志
adrci> ips add file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log into package 3
Added file /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log into package 3
# 7. 生成打包文件
adrci> ips generate package 3 in /home/oracle
Generated package 3 in file /home/oracle/PERF_20260331100000_COM_3.zip, mode complete
# 8. 查看打包内容
adrci> ips show package 3
PACKAGE_ID 3
PACKAGE_NAME PERF_20260331100000
PACKAGE_DESCRIPTION
STATUS New (0)
CREATED 2026-03-31 10:00:00.123456 +08:00
PACKAGE_FILES:
FILE_ID FILE_NAME
——————– ————————————————–
1 /home/oracle/awr_report.html
2 /home/oracle/ash_report.html
3 /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
4 /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log
Part04-生产案例与实战讲解
4.1 事件打包分析案例
在生产环境中使用事件打包的完整案例:
4.1.1 场景描述
某企业生产数据库出现ORA-00600错误,需要使用事件打包收集诊断信息发送给Oracle Support。
4.1.2 分析步骤
$ vi /home/oracle/scripts/package_incident.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
# 事件打包自动化脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
INCIDENT_ID=$1
OUTPUT_DIR=”/home/oracle/incident_packages”
mkdir -p $OUTPUT_DIR
if [ -z “$INCIDENT_ID” ]; then
echo “Usage: $0
exit 1
fi
echo “Packaging incident $INCIDENT_ID…”
# 创建打包 在事件打包故障处理过程中的方法和技巧: # 1. 故障识别 # 2. 故障分析 # 3. 故障处理 # 4. 故障预防 # 示例:事件打包故障处理 # 1. 故障识别 adrci> set homepath diag/rdbms/fgedudb/FGEDUDB adrci> show incident -p “status=’ready'” # 2. 故障分析 # 3. 故障处理 adrci> ips generate package 1 in /home/oracle # 4. 验证打包文件 优化事件打包配置的最佳实践: — 清理旧的打包文件 — 检查当前打包状态 Procedure created. # 2. 执行管理存储过程 — Incident Package Management — PL/SQL procedure successfully completed. # 3. 创建打包文件清理脚本 #!/bin/bash PACKAGE_DIR=”/home/oracle/incident_packages” echo “$(date): Starting package cleanup…” > /tmp/cleanup.log # 清理旧的打包文件 # 统计剩余空间 echo “$(date): Package cleanup completed.” >> /tmp/cleanup.log # 发送报告 Oracle事件打包是向Oracle Support提供诊断数据的重要方式,具有以下特点: Oracle事件打包检查清单: Oracle事件打包工具推荐: 本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
PACKAGE_ID=$(adrci <4.2 事件打包故障处理
4.2.1 故障处理流程
# – 识别错误类型
# – 定位事件ID
# – 确认错误时间
# – 查看事件详情
# – 分析错误原因
# – 确定打包范围
# – 创建事件打包
# – 添加相关文件
# – 生成打包文件
# – 制定预防措施
# – 监控相关指标
# – 定期检查
$ adrci
adrci> show incident -mode detail -p “incident_id=12345”
adrci> ips create package incident 12345
$ ls -lh /home/oracle/*.zip
4.3 事件打包优化
4.3.1 优化事件打包管理
SQL> create or replace procedure manage_incident_packages(
p_days in number default 30
) as
begin
dbms_output.put_line(‘— Incident Package Management —‘);
dbms_output.put_line(‘Retention period: ‘ || p_days || ‘ days’);
— 注意:需要使用外部脚本或UTL_FILE
dbms_output.put_line(‘Clean up old package files’);
dbms_output.put_line(‘Check current package status’);
end manage_incident_packages;
/
SQL> set serveroutput on
SQL> exec manage_incident_packages(30);
Retention period: 30 days
Clean up old package files
Check current package status
$ vi /home/oracle/scripts/cleanup_packages.sh
# 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
# 打包文件清理脚本
RETENTION_DAYS=30
find $PACKAGE_DIR -name “*.zip” -type f -mtime +$RETENTION_DAYS -exec rm -f {} \; -exec echo “Removed: {}” \; >> /tmp/cleanup.log 2>&1
PACKAGE_SIZE=$(du -sh $PACKAGE_DIR | cut -f1)
echo “$(date): Current package size: $PACKAGE_SIZE” >> /tmp/cleanup.log
mail -s “Package Cleanup Report” admin@fgedu.net.cn < /tmp/cleanup.log
# 4. 设置脚本权限
$ chmod +x /home/oracle/scripts/cleanup_packages.sh
# 5. 测试脚本
$ /home/oracle/scripts/cleanup_packages.sh
# 6. 设置定期清理
$ crontab -e
# 每周日凌晨3点清理打包文件
0 3 * * 0 /home/oracle/scripts/cleanup_packages.sh >> /tmp/cleanup.log 2>&1
Part05-风哥经验总结与分享
5.1 事件打包总结
5.2 事件打包检查清单
5.3 事件打包工具推荐
