温馨提示×

Ubuntu Oracle如何进行日志管理

小樊
35
2025-12-26 13:36:13
栏目: 云计算

Ubuntu 上 Oracle 日志管理实操指南

一 日志类型与定位

  • 警报日志 Alert Log:记录数据库启动/关闭、结构变更、错误等,路径通常为:$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_.log
  • 跟踪与诊断文件:按会话/进程生成,位于同一 trace 目录,如 ora_*.trc
  • 监听日志 Listener Log:记录网络连接请求,路径通常为:$ORACLE_HOME/network/log/listener.log
  • 重做日志 Redo Logs:数据库事务日志,路径由控制文件/参数决定,可用 SQL 查询具体成员。
  • 归档日志 Archive Logs:数据库在 ARCHIVELOG 模式下产生的历史重做日志,用于恢复与备份。
    以上路径与定位方法适用于 Ubuntu 上的 Oracle 单实例环境,具体目录以实际安装为准。

二 查看与实时监控

  • 实时查看警报日志:
    tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
  • 查看跟踪文件:
    tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ora_1234.trc
  • 格式化跟踪文件(便于阅读):
    tkprof /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ora_1234.trc output.txt explain scott/tiger@orcl
  • 监听日志查看:
    tail -f $ORACLE_HOME/network/log/listener.log
    以上命令覆盖日常排错与审计中最常用的日志查看方式。

三 数据库内日志管理 SQL 要点

  • 查看当前日志模式与数据库信息:
    SELECT log_mode FROM v$database;
    SELECT dbid, name, created, log_mode FROM v$database;
  • 切换归档模式(需停机到 mount 再打开):
    shutdown immediate;
    startup mount;
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
  • 归档相关查询与维护:
    SELECT recid, stamp, thread#, sequence#, name FROM v$archived_log;
    SELECT dest_name, status, destination FROM v$archive_dest;
    ALTER SYSTEM ARCHIVE LOG ALL;
  • 重做日志组与成员管理:
    SELECT * FROM v$log;
    SELECT * FROM v$logfile;
    ALTER DATABASE ADD LOGFILE GROUP 4 (‘/u02/oradata/redo04a.log’,‘/u03/oradata/redo04b.log’) SIZE 100M;
    ALTER DATABASE DROP LOGFILE GROUP 4;
    ALTER DATABASE ADD LOGFILE MEMBER ‘/u02/oradata/redo01b.log’ TO GROUP 1;
    ALTER DATABASE DROP LOGFILE MEMBER ‘/u02/oradata/redo01b.log’;
  • 强制日志切换与检查点:
    ALTER SYSTEM SWITCH LOGFILE;
    ALTER SYSTEM CHECKPOINT;
  • 归档目的地空间与清理(RMAN):
    SELECT space_limit/1024/1024/1024 AS quota_g, space_used/1024/1024 AS used_m,
    space_used/space_limit*100 AS used_pct, number_of_files
    FROM v$recovery_file_dest;
    ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=40G;
    RMAN> LIST ARCHIVELOG ALL;
    RMAN> DELETE ARCHIVELOG UNTIL TIME ‘SYSDATE-1’;
    RMAN> CROSSCHECK ARCHIVELOG ALL;
    RMAN> DELETE EXPIRED ARCHIVELOG ALL;
    以上 SQL 覆盖归档模式切换、日志组维护、空间监控与归档日志生命周期管理。

四 系统级日志轮转与清理

  • 使用 logrotate 管理 Oracle 文本日志(如 alert、listener、trace 等):
    1. 新建配置:/etc/logrotate.d/oracle
      /u01/app/oracle/diag/rdbms///trace/alert_.log
      /u01/app/oracle/diag/tnslsnr/
      //trace/.log
      /u01/app/oracle/network/log/*.log
      {
      daily
      rotate 30
      compress
      delaycompress
      missingok
      notifempty
      create 0640 oracle oinstall
      sharedscripts
      postrotate
      /bin/kill -HUP $(cat /var/run/oracle.pid 2>/dev/null) 2>/dev/null || true
      endscript
      }
    2. 测试与强制执行:
      logrotate -d /etc/logrotate.d/oracle # 预演
      logrotate -f /etc/logrotate.d/oracle # 强制执行
  • 监听日志的安全截断(避免直接 rm 导致句柄写入异常):
    lsnrctl set log_status off
    mv $ORACLE_HOME/network/log/listener.log $ORACLE_HOME/network/log/listener_$(date +%F).log

    $ORACLE_HOME/network/log/listener.log
    lsnrctl set log_status on

  • 系统日志与审计:
    journalctl -u oracle.service -f # 若以 systemd 托管 Oracle 服务
    tail -f /var/log/syslog
    以上做法确保文本日志按策略轮转、压缩与清理,同时避免在线删除导致文件句柄占用问题。

五 备份恢复与日志挖掘

  • 归档日志备份与清理:使用 RMAN 进行定期备份与过期清理,例如:
    RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
    RMAN> DELETE ARCHIVELOG UNTIL TIME ‘SYSDATE-7’;
  • 日志挖掘 LogMiner(分析重做日志内容):
    1. 构建数据字典:
      EXEC DBMS_LOGMNR_D.BUILD(‘dict.ora’, ‘/u01/app/oracle/logmnr’);
    2. 添加日志文件:
      EXEC DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME=>‘/u02/oradata/redo01.log’, OPTIONS=>DBMS_LOGMNR.NEW);
    3. 启动分析(可按时间/SCN 限制):
      EXEC DBMS_LOGMNR.START_LOGMNR(DICTFILENAME=>‘/u01/app/oracle/logmnr/dict.ora’,
      STARTTIME=>TO_DATE(‘2025-04-01’,‘YYYY-MM-DD’),
      ENDTIME=>TO_DATE(‘2025-04-30’,‘YYYY-MM-DD’));
    4. 查询分析结果:
      SELECT scn, timestamp, username, sql_redo FROM V$LOGMNR_CONTENTS WHERE username=‘SCOTT’;
    5. 结束分析:
      EXEC DBMS_LOGMNR.END_LOGMNR;
      以上流程适用于误操作审计、变更追踪与历史事务分析。

0