Linux 上 Oracle 数据库日志管理实战指南
一 日志类型与定位
- 常见日志类型与用途如下(路径为 ADR 默认诊断目录,实际以环境为准):
| 日志类型 |
主要用途 |
典型路径示例 |
| Alert 日志 |
记录实例启动/关闭、关键错误、结构变更等 |
$ORACLE_BASE/diag/rdbms///trace/alert_.log |
| Listener 日志 |
记录客户端连接、监听状态与网络请求 |
$ORACLE_BASE/diag/tnslsnr///trace/listener.log |
| Trace 文件 |
诊断细粒度问题(如进程跟踪) |
$ORACLE_BASE/diag/rdbms///trace/ |
| 归档重做日志 |
介质恢复与时间点恢复的关键 |
由 RMAN/归档进程管理(非文本文件) |
| 系统日志 |
记录 OS 层事件(如服务启动、内核消息) |
/var/log/(如 syslog/messages) |
- 快速查看与状态检查示例:
- 实时查看 Alert:tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
- 监听状态:lsnrctl status
- 归档模式:SELECT log_mode FROM v$database;(返回 ARCHIVELOG 或 NOARCHIVELOG)
二 日志轮转与清理
- 使用 logrotate 管理文本日志(Alert、Listener、SQL*Net 等)
- 基本思路:在 /etc/logrotate.d/ 创建配置,利用 copytruncate 避免重启进程;按 size 或 daily 触发轮转,保留有限历史并压缩归档。
- 示例 1(Listener 日志,按大小滚动,保留 7 份):
/u01/app/oracle/diag/tnslsnr/<listener>/<listener>/trace/listener.log {
daily
size 100M
rotate 7
compress
missingok
notifempty
copytruncate
}
- 示例 2(SQL*Net 网络日志,按大小滚动,保留 4 份):
/u01/product/oracle/network/log/*.log {
notifempty
missingok
size 100M
rotate 4
copytruncate
}
- 测试与生效:
- 手动执行:logrotate -f /etc/logrotate.d/oracle-listener
- 或:logrotate -f /etc/logrotate.d/oracle
- 重要提示:
- 对正在写入的日志优先使用 copytruncate,避免直接 rm 或移动导致句柄未释放、磁盘仍被占用的风险。
- 不建议对 listener.log 使用需要发送信号(如 HUP)的方案,可能影响连接稳定性。
- 归档重做日志(RMAN)
- 归档日志不属于文本日志,应通过 RMAN 进行备份与清理(如 BACKUP ARCHIVELOG + DELETE INPUT/EXPIRED),避免仅依赖 OS 层删除。
三 备份与恢复要点
- 归档模式与切换
- 查看:SELECT log_mode FROM v$database;
- 切换归档:ALTER DATABASE ARCHIVELOG;(需在 MOUNT 状态执行;切换前评估磁盘与性能影响)
- RMAN 备份与清理
- 典型流程:备份数据文件/归档日志 → 删除已备份或过期的归档/备份 → 定期校验与报告
- 作用:保障介质恢复与时间点恢复能力,同时控制 归档目录 增长。
四 监控与告警
- 实时监控
- Alert 日志:tail -f 结合关键字(如 ORA-、Error)快速定位问题
- 监听:lsnrctl status 检查服务与端口
- 系统与集中监控
- 系统层:使用 journalctl、/var/log/ 收集 OS 事件
- 集中化:通过 rsyslog/syslog-ng 将日志发往中央服务器,或用 ELK Stack(Elasticsearch、Logstash、Kibana)进行检索与可视化
- 阈值告警:对日志增长率、关键错误出现、磁盘使用率设置阈值告警。
五 常见问题与处理
- Alert 或 Trace 文件过大
- 避免直接删除正在写入的日志;可用 copytruncate 或“保留尾部 + 清空”方式安全截断(示例:tail -100 alert.log > /tmp/tmp.log && cp /tmp/tmp.log alert.log && rm /tmp/tmp.log)
- Listener 日志增长过快
- 使用 logrotate 的 copytruncate 策略按日/按大小滚动,保留 7–30 天历史并压缩归档
- 无法连接数据库
- 依次检查:lsnrctl status、数据库实例是否启动、网络与防火墙策略
- 归档目录爆满
- 立即备份并清理过期归档(RMAN),同时评估归档保留策略与存储容量。