首页主机资讯如何在Linux上管理Oracle日志

如何在Linux上管理Oracle日志

时间2025-11-19 16:00:05发布访客分类主机资讯浏览1223
导读: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-ngELK(Elasticsearch/Logstash/Kibana) 收集与可视化日志;
    • 使用 Nagios/Zabbix 监控日志目录容量与增长速率,设置阈值告警;
    • 统一备份策略:告警/监听日志压缩归档,RMAN 备份归档日志并定期清理过期备份。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在Linux上管理Oracle日志
本文地址: https://pptw.com/jishu/751267.html
Oracle Linux环境下如何配置监听器 Ubuntu Python 安装后如何启动 Python

游客 回复需填写必要信息