温馨提示×

oracle日志管理在centos上如何实现

小樊
40
2025-12-27 06:04:30
栏目: 云计算

在 CentOS 上实施 Oracle 日志管理

一 日志类型与默认路径

  • 使用 Oracle 的 ADR(Automatic Diagnostic Repository) 统一管理日志,关键路径由 $ORACLE_BASE$ORACLE_SID 决定。
  • 常见日志与路径示例:
    • Alert 日志$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log
    • Trace 文件:同上目录下的 .trc/.log(如后台进程、用户会话跟踪)
    • 联机重做日志(Redo)$ORACLE_BASE/oradata//redo01.log
    • 归档重做日志(Archive):由 LOG_ARCHIVE_DEST_n 指定(如 /u01/app/oracle/archivelog
    • 监听器日志$ORACLE_BASE/diag/tnslsnr//listener/trace/listener.log
  • 快速定位路径的 SQL:
    • 查询 ADR Trace 目录:SELECT value FROM v$diag_info WHERE name = ‘Diag Trace’;
    • 查询 ADR 根目录:SHOW PARAMETER DIAGNOSTIC_DEST;
  • 建议以 oracle 用户执行相关操作,并确保目录权限正确(如 oracle:oinstall,640)。

二 归档日志模式与重做日志管理

  • 启用归档模式(需停机切换,生产谨慎操作):
    • 步骤:
      • SHUTDOWN IMMEDIATE;
      • STARTUP MOUNT;
      • ALTER DATABASE ARCHIVELOG;
      • 设置归档目标:ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=‘LOCATION=/u01/app/oracle/archivelog’ SCOPE=BOTH;
      • ALTER DATABASE OPEN;
    • 验证:ARCHIVE LOG LIST;(应看到 Database log mode 为 ARCHIVELOG 且目标路径正确)
  • 归档日志的备份与清理(RMAN,推荐):
    • 备份并删除已备份归档:BACKUP ARCHIVELOG ALL DELETE INPUT;
    • 按时间删除(保留最近 7 天):DELETE NOPROMPT ARCHIVELOG UNTIL TIME ‘SYSDATE-7’;
  • 联机重做日志管理:
    • 自动切换:日志写满自动切换;可手动切换用于切换归档或均衡 I/O:ALTER SYSTEM SWITCH LOGFILE;
    • 调整大小/组数:通过 ALTER DATABASE ADD/RESIZE LOGFILE 等命令按需调整(调整前规划停机窗口与组数)。

三 使用 logrotate 管理 Alert 与 Trace 日志

  • 创建配置文件:/etc/logrotate.d/oracle
  • 示例(按实例替换路径与实例名):
    /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/alert_orcl.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        create 640 oracle oinstall
        postrotate
            # 注意:Oracle 不会因 SIGHUP 重新打开 ADR 日志,此行仅为示例
            # 如需“无缝”轮转,建议采用 copytruncate 或将轮转交由外部脚本处理
            /bin/kill -HUP `cat /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/orcl.pid 2>/dev/null` || true
        endscript
    }
    
  • 测试与验证:
    • 强制执行一次:logrotate -f /etc/logrotate.d/oracle
    • 查看状态:/var/lib/logrotate/status
  • 重要提示:
    • ADR 不支持通过信号通知重新打开日志,生产环境更推荐使用 copytruncate 方式(会短暂停写)或编写脚本在轮转后执行必要的“切换/归档”动作,避免日志句柄未更新导致写入失败。

四 日志监控与快速分析

  • 实时查看 Alert 日志:
    • tail -f $ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log
    • 使用 adrci
      • adrci> set home diag/rdbms/orcl/orcl1
      • adrci> show alert -tail -f
      • 关键字检索:adrci> show alert -p “message_text like ‘%ORA-%’”
  • 监听器日志:
    • 实时查看:tail -f $ORACLE_BASE/diag/tnslsnr//listener/trace/listener.log
  • 错误告警脚本示例(每小时检查一次):
    #!/bin/bash
    LOG=/u01/app/oracle/diag/rdbms/orcl/ORCL/trace/alert_orcl.log
    ERR=/tmp/ora_alert_errors.log
    grep "ORA-" "$LOG" > "$ERR"
    if [ -s "$ERR" ]; then
        mail -s "Oracle Alert Log Errors Found" admin@example.com < "$ERR"
    fi
    
    • 加入 crontab:0 * * * * /path/to/script.sh
  • 事务级分析(LogMiner,基于归档/在线日志):
    • 构建数据字典:EXEC DBMS_LOGMNR_D.BUILD(dictionary_filename=>‘dict.ora’, dictionary_location=>‘/u01/oracle/logs’);
    • 添加日志:EXEC DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>‘/u01/app/oracle/oradata/orcl/redo01.log’, Options=>DBMS_LOGMNR.NEW);
    • 启动分析(按时间窗):EXEC DBMS_LOGMNR.START_LOGMNR(StartTime=>to_date(‘2025-11-01 00:00:00’,‘YYYY-MM-DD HH24:MI:SS’), EndTime=>to_date(‘2025-11-01 23:59:59’,‘YYYY-MM-DD HH24:MI:SS’), DictFileName=>‘/u01/oracle/logs/dict.ora’);
    • 查询结果:SELECT sql_redo, username, seg_name FROM v$logmnr_contents WHERE seg_owner=‘HR’;
  • 性能问题定位(AWR/ADDM):
    • SYSDBA 运行:@?/rdbms/admin/awrrpt.sql,选择时间范围生成报告,关注 Top SQL/Top Events 等章节。

五 安全与容量管理最佳实践

  • 权限与合规:
    • 日志目录与文件建议权限 640,属主 oracle:oinstall,避免未授权访问;对含敏感信息的日志可结合 压缩脱敏 策略。
  • 容量与清理:
    • 归档日志:始终通过 RMAN 备份并按策略删除(如 DELETE ARCHIVELOG UNTIL TIME ‘SYSDATE-7’),避免手工误删导致恢复链断裂。
    • Alert/Trace:使用 logrotate 控制保留份数与压缩;定期清理历史 .trc/.log
    • 系统日志:结合 journalctl/rsyslog 做系统级日志集中与轮转,避免 /var 分区被占满。
  • 监控与告警:
    • 建立 磁盘使用率阈值 告警;对 ORA- 错误进行关键字监控与邮件/IM 通知;定期巡检 listener.logalert.log 的增长趋势。
  • 变更与演练:
    • 调整 LOG_ARCHIVE_DEST_n、新增/调整 REDO 组、变更 logrotate 策略等,务必在测试环境验证并安排维护窗口,保留回退方案。

0