温馨提示×

Ubuntu Oracle数据库日志如何管理

小樊
39
2025-12-18 18:33:33
栏目: 云计算

Ubuntu 上 Oracle 数据库日志管理实操指南

一 日志类型与定位

  • 警报日志 alert.log:记录数据库启动/关闭、结构变更、错误等,路径通常为:$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_.log。实时查看可用:tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
  • 跟踪与诊断文件:进程跟踪文件(如 ora_*.trc)、进程诊断转储(如 cdmp_*.bmp)均在 diag 的 trace 目录。
  • 监听器日志 listener.log:网络监听相关日志,路径通常为:$ORACLE_HOME/network/log/listener.log
  • 联机重做日志 Redo:记录数据块变更,用于实例恢复与介质恢复,文件通常位于:$ORACLE_BASE/oradata//redo*.log
  • 归档重做日志 Archive:数据库处于归档模式时由 ARCn 进程生成,位置由 LOG_ARCHIVE_DEST_nDB_RECOVERY_FILE_DEST(FRA) 决定。
  • 旧版转储目录:早期版本可能使用 $ORACLE_BASE/admin//bdump/alert_.log,新版本以 diag 目录为主。

二 常用查看与监控

  • 查看数据库日志模式与归档状态:
    • archive log list;
    • SELECT name, log_mode FROM v$database;
  • 定位警报日志与跟踪文件:
    • 警报日志:tail -f $ORACLE_BASE/diag/rdbms/<db>/<inst>/trace/alert_<inst>.log
    • 跟踪文件:tail -f $ORACLE_BASE/diag/rdbms/<db>/<inst>/trace/ora_*.trc
  • 格式化跟踪文件便于分析:tkprof /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ora_1234.trc analysis.txt explain scott/tiger@orcl
  • 快速筛查错误:grep -i ORA- $ORACLE_BASE/diag/rdbms/<db>/<inst>/trace/alert_<inst>.log

三 归档日志模式与配置

  • 启用归档(单实例,10g 及以后):
    1. 创建归档目录并赋权:mkdir -p /u01/app/oracle/arch && chown oracle:oinstall /u01/app/oracle/arch
    2. 配置归档目的地与命名格式:
      • ALTER SYSTEM SET log_archive_dest_1='location=/u01/app/oracle/arch' SCOPE=spfile;
      • ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.dbf' SCOPE=spfile;(静态参数,需重启)
    3. 切换到归档模式:
      • SHUTDOWN IMMEDIATE;
      • STARTUP MOUNT;
      • ALTER DATABASE ARCHIVELOG;
      • ALTER DATABASE OPEN;
    4. 验证:archive log list;SELECT log_mode FROM v$database;
  • 归档目的地优先级:LOG_ARCHIVE_DEST_n > DB_RECOVERY_FILE_DEST(FRA) > $ORACLE_HOME/dbs
  • RAC 要点:归档命令需在数据库以独占方式装载时执行,通常需停库后在单节点装载执行 ALTER DATABASE ARCHIVELOG,再启动集群。

四 联机重做日志与空间管理

  • 查看与状态:
    • 组与成员:SELECT * FROM v$log; SELECT * FROM v$logfile;
    • 状态含义:UNUSED、CURRENT、ACTIVE、CLEARING 等。
  • 维护操作:
    • 添加成员:ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo1.log' TO GROUP 1;
    • 删除成员:ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo1.log';
    • 日志切换:ALTER SYSTEM SWITCH LOGFILE;(促使当前组归档/轮转)
    • 重定位/重命名:先 OS 拷贝,再 ALTER DATABASE RENAME FILE '/old/redo01.log' TO '/new/redo01.rdo';
    • 清空日志组:
      • 非当前且已归档:ALTER DATABASE CLEAR LOGFILE GROUP 3;
      • 未归档且需强制:ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;(存在数据丢失风险,谨慎)
  • 容量与性能建议:
    • 合理设置组数与成员数,避免频繁日志切换导致性能抖动。
    • 归档日志建议纳入 RMAN 备份与定期清理策略,防止占满磁盘。

五 系统级日志轮转与清理

  • 警报日志与跟踪文件:不建议直接删除或截断正在写入的文件。推荐做法:
    • 使用 logrotate$ORACLE_BASE/diag/**/trace/*.log 做按日轮转、压缩与保留策略(postrotate 无需信号 Oracle,Oracle 会继续写原 inode 指向的新文件)。
    • 若必须“截断”大文件,可先 tail -n 100000 alert.log > /tmp/alert_tail.log && cp /tmp/alert_tail.log alert.log && rm /tmp/alert_tail.log,确保文件句柄有效。
  • 监听器日志 listener.log:
    • 临时关闭写日志:lsnrctl set log_status off
    • 备份并清空:cp listener.log listener_$(date +%F).log && > listener.log
    • 恢复写日志:lsnrctl set log_status on
  • 归档日志:纳入 RMAN 备份与删除策略(如 BACKUP ARCHIVELOG ALL DELETE INPUT;),避免仅依赖 OS 删除导致恢复链断裂。
  • 风险提示:任何在线日志的删除/清空操作都可能带来恢复风险,务必在备份完成、窗口期内执行,并先在测试环境验证。

0