Oracle 日志与诊断文件
Oracle 日志与诊断文件
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Oracle 诊断文件是排错关键[1]:
类型:
- Alert Log
- Trace Files
- Incident Files
- Listener Log
- ADR
2. ADR(Automatic Diagnostic Repository)
2.1 概述
- 11g+ 统一存储
- 路径:
$ORACLE_BASE/diag/...
2.2 查看
SELECT * FROM v$diag_info;
2.3 关键路径
| 名称 | 路径 |
|---|---|
| ADR Home | diag/rdbms/$DB_UNIQUE_NAME/$SID |
| Alert Log | alert/log.xml |
| Trace | trace/ |
| Incident | incident/ |
| HM | hm/ |
2.4 ADRCI
adrci
show home
show alert
show problem
show incident
3. Alert Log
3.1 文本格式
$ADR_HOME/trace/alert_$SID.log
3.2 XML 格式
$ADR_HOME/alert/log.xml
3.3 查看
-- 11g+
SELECT
message_text,
message_level,
originating_timestamp
FROM v$diag_alert_ext
WHERE message_text LIKE '%ORA-%'
ORDER BY originating_timestamp DESC;
3.4 关键内容
- 启动/关闭
- 严重错误(ORA-00600 等)
- 表空间告警
- 备份操作
- 参数变更
4. Trace Files
4.1 位置
$ADR_HOME/trace/
4.2 命名
SID_ora_PID.trc: 会话 traceSID_ckpt_PID.trc: 后台进程
4.3 启用
-- 会话
ALTER SESSION SET sql_trace = TRUE;
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
-- 后台进程
ALTER SYSTEM SET events '...' scope=memory;
4.4 查看
-- 当前 trace 文件
SELECT tracefile FROM v$process p, v$session s
WHERE p.addr = s.paddr AND s.sid = USERENV('SID');
详细见:Oracle SQL Trace 与 TKPROF。
5. Incident
5.1 概念
- 11g+ 引入
- 严重错误自动打包
5.2 查看
SELECT * FROM v$diag_incident;
5.3 打包
adrci
ips create package incident <incident_id>
ips generate package <package_id> in /tmp
6. Listener Log
6.1 位置
$ORACLE_HOME/network/log/listener.log
6.2 查看
tail -f $ORACLE_HOME/network/log/listener.log
6.3 内容
- 连接请求
- 服务注册
- 错误(ORA-12520 等)
7. 后台进程日志
7.1 关键进程
dbw0 - Database Writer
lgwr - Log Writer
ckpt - Checkpoint
smon - System Monitor
pmon - Process Monitor
arc0 - Archiver
mmon - Memory Monitor
7.2 查看
$ADR_HOME/trace/SID_<process>_PID.trc
8. AWR 自动任务
SELECT * FROM dba_autotask_client;
SELECT * FROM dba_autotask_task;
9. 告警
9.1 当前告警
SELECT * FROM dba_outstanding_alerts;
9.2 历史告警
SELECT * FROM dba_alert_history ORDER BY creation_time DESC;
10. 日志管理
10.1 清理
adrci
purge -age 1440 -type ALERT
purge -age 10080 -type TRACE
purge -age 10080 -type INCIDENT
10.2 自动
-- 11g+
EXEC DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL(...);
10.3 大小控制
ALTER SYSTEM SET max_dump_file_size = '10M';
11. 实战案例
11.1 启动失败
# 1. 查 alert log
tail -100 $ADR_HOME/trace/alert_$SID.log
# 2. 找 ORA- 错误
grep ORA- alert_$SID.log | tail -20
11.2 ORA-00600
-- 1. 查 incident
SELECT * FROM v$diag_incident WHERE error_number = 600 ORDER BY time_first DESC;
-- 2. 打包
adrci
ips create package incident 1234
ips generate package 1 in /tmp
-- 3. 上传 Oracle Support
11.3 连接问题
# 1. Listener log
tail -50 $ORACLE_HOME/network/log/listener.log
# 2. 测试
sqlplus user/pwd@tns
tnsping tns
12. 常见坑与排错
12.1 日志过大
# 1. 清理
adrci purge ...
# 2. 轮转
mv alert.log alert.log.1
12.2 Trace 过多
-- 1. 关闭 trace
-- 2. 清理
-- 3. 限制大小
ALTER SYSTEM SET max_dump_file_size = '10M';
12.3 找不到文件
SELECT value FROM v$diag_info WHERE name = 'Default Trace File';
13. 最佳实践
- ADR 统一管理:11g+
- ADRCI 工具:CLI
- 定期清理:空间
- Alert Log 监控:关键
- Incident 打包:ORA-600/7445
- Listener Log:连接
- trace 限制大小:避免爆满
- 告警自动化:及时
- 历史对比:趋势
- 文档化:流程
14. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Diagnostic Data” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/diagnostic-data.html