如何在Linux上管理Oracle日志
导读:Linux上Oracle日志管理实操指南 一 日志类型与定位 常见日志类型与典型路径如下(实际以环境变量与安装路径为准): 告警日志 alert_sid.log:记录数据库启停、结构变更、错误等,常见路径为:$ORACLE_BASE/d...
Linux上Oracle日志管理实操指南
一 日志类型与定位
- 常见日志类型与典型路径如下(实际以环境变量与安装路径为准):
- 告警日志 alert_sid.log:记录数据库启停、结构变更、错误等,常见路径为:$ORACLE_BASE/diag/rdbms///trace/alert_.log(新版本)或 $ORACLE_BASE/admin//bdump/alert_.log(旧版本)。
- 监听日志 listener.log:记录网络连接与监听活动,路径:$ORACLE_HOME/network/log/listener.log。
- 安装日志:安装器日志位于 ORACLE_INVENTORY_LOCATION/logs;若未知 Inventory 位置,可在 $ORACLE_HOME/oraInst.loc 中查看。
- 重做日志 Redo 与归档日志 Archived:联机重做日志默认在 $ORACLE_BASE/oradata//(如 redo01.log 等);归档日志位置由 LOG_ARCHIVE_DEST_n 等参数决定。
- 审计与跟踪文件:审计文件 $ORACLE_BASE/admin//adump/*.aud;服务器进程跟踪 $ORACLE_BASE/admin//bdump/*.trc、用户进程跟踪 $ORACLE_BASE/admin//udump/*.trc。
二 告警日志与监听日志的安全轮转与清理
- 告警日志(alert_sid.log)
- 推荐做法:使用“复制+清空”方式保留文件句柄,避免直接删除或移动导致句柄失效与空间不释放。
- 示例脚本(以 oracle 用户执行):
- 备份并截断:
LG=alert_${ ORACLE_SID} .log BDUMP_DIR=$ORACLE_BASE/diag/rdbms/$(echo $ORACLE_SID | tr '[:upper:]' '[:lower:]')/${ ORACLE_SID} /trace mkdir -p $BDUMP_DIR/bak cp $BDUMP_DIR/$LG $BDUMP_DIR/bak/${ LG} .bak.$(date +%F).gz gzip -9c $BDUMP_DIR/bak/${ LG} .bak.$(date +%F).gz > $BDUMP_DIR/$LG - 错误快速筛查:
grep -i ORA- $BDUMP_DIR/$LG > $BDUMP_DIR/bak/ORA_errors_$(date +%F).log
- 备份并截断:
- 监听日志(listener.log)
- 必须按“停写—备份—清空—开写”的顺序操作,避免日志丢失与句柄问题。
- 示例:
lsnrctl < < EOF set log_status off EOF mv $ORACLE_HOME/network/log/listener.log $ORACLE_HOME/network/log/listener_$(date +%F).log > $ORACLE_HOME/network/log/listener.log lsnrctl < < EOF set log_status on EOF - 如监听设置了密码,需在交互中输入或在脚本中使用
set password。
三 归档重做日志的备份与清理
- 使用 RMAN 进行“交叉校验—删除过期—按时间/数量删除”,避免仅用 OS 命令删除导致控制文件不一致。
- 常用 RMAN 例程(以 oracle 用户执行):
rman target / CROSSCHECK ARCHIVELOG ALL; DELETE EXPIRED ARCHIVELOG ALL; # 删除 7 天前已完成的归档 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; # 或按序列号保留最近 N 个 # DELETE ARCHIVELOG FROM SEQUENCE < start_seq> UNTIL SEQUENCE < end_seq> ; EXIT - 建议将 RMAN 脚本加入 crontab 定时执行,并保留执行日志以便审计。
四 审计与跟踪文件的生命周期管理
- 使用 find 按时间清理历史文件,避免目录膨胀(示例保留最近 2 天):
# 审计文件 find $ORACLE_BASE/admin/${ ORACLE_SID} /adump -name "*.aud" -mtime +2 -delete # 跟踪文件 find $ORACLE_BASE/admin/${ ORACLE_SID} /bdump -name "*.trc" -mtime +2 -delete find $ORACLE_BASE/admin/${ ORACLE_SID} /udump -name "*.trc" -mtime +2 -delete - 可将上述命令放入脚本,由 crontab 每日执行,并记录执行历史以便追溯。
五 自动化与集中化实践
- 使用 logrotate 管理可被外部进程重开的文本日志(如 listener.log),示例配置 /etc/logrotate.d/oracle-listener:
/u01/app/oracle/diag/tnslsnr/*/trace/listener.log { daily rotate 30 compress delaycompress missingok notifempty create 0640 oracle oinstall sharedscripts postrotate lsnrctl < < < "set log_status off" lsnrctl < < < "set log_status on" endscript }- 注意:告警日志不建议用 logrotate 直接轮转,优先采用“复制+清空”方案;仅在确保应用支持“重新打开日志”的场景使用 logrotate 的 postrotate 触发重开。
- 集中化与监控:
- 使用 rsyslog/syslog-ng 或 ELK(Elasticsearch/Logstash/Kibana) 收集与可视化日志;
- 使用 Nagios/Zabbix 监控日志目录容量与增长速率,设置阈值告警;
- 统一备份策略:告警/监听日志压缩归档,RMAN 备份归档日志并定期清理过期备份。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Linux上管理Oracle日志
本文地址: https://pptw.com/jishu/751267.html
