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 Homediag/rdbms/$DB_UNIQUE_NAME/$SID
Alert Logalert/log.xml
Tracetrace/
Incidentincident/
HMhm/

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: 会话 trace
  • SID_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. 最佳实践

  1. ADR 统一管理:11g+
  2. ADRCI 工具:CLI
  3. 定期清理:空间
  4. Alert Log 监控:关键
  5. Incident 打包:ORA-600/7445
  6. Listener Log:连接
  7. trace 限制大小:避免爆满
  8. 告警自动化:及时
  9. 历史对比:趋势
  10. 文档化:流程

14. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Diagnostic Data” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/diagnostic-data.html