Oracle数据库的日志体系涵盖**重做日志(Redo Log)、归档日志(Archived Log)、监听器日志(Listener Log)、告警日志(Alert Log)**等核心类型,其默认路径与命名规则如下:
$ORACLE_BASE/oradata/<数据库名>/目录下,文件名为redo01.log、redo02.log、redo03.log(循环使用,记录所有数据库更改)。$ORACLE_HOME/dbs(PFILE配置)或$ORACLE_BASE/flash_recovery_area(SPFILE默认快速恢复区),文件名格式为%t_%s_%r.arc(%t=线程号、%s=序列号、%r=重置日志ID)。$ORACLE_HOME/network/log目录,文件名为listener.log(记录客户端连接请求)。$ORACLE_BASE/diag/rdbms/<数据库名>/<实例名>/trace/alert_<实例名>.log(记录数据库启动、关闭、错误等关键事件)。tail -f $ORACLE_HOME/network/log/listener.log实时查看最新连接请求;cat或vi命令查看历史记录。less $ORACLE_BASE/diag/rdbms/<数据库名>/<实例名>/trace/alert_<实例名>.log查看数据库关键事件(如错误、备份状态)。SQL*Plus执行ALTER SYSTEM SWITCH LOGFILE切换日志,或使用LogMiner分析重做日志内容)。SHOW PARAMETER BACKGROUND_DUMP_DEST,返回的路径即为告警日志所在目录。SELECT * FROM V$ARCHIVED_LOG,可获取归档日志的序列号、名称、创建时间、是否可用等详情。编辑$ORACLE_HOME/network/admin/listener.ora文件,添加或修改以下参数:
LOG_FILE = listener.log       # 日志文件名
LOG_FILE_SIZE = 100M          # 单个日志文件最大大小
LOG_FILE_ROTATION = YES       # 启用日志轮转
LOG_FILE_COUNT = 5            # 保留的旧日志文件数量(最多5个)
修改后执行lsnrctl reload使配置生效,当日志达到LOG_FILE_SIZE时,会自动创建新日志文件并保留指定数量的旧文件。
为Oracle日志创建专用配置文件/etc/logrotate.d/oracle,内容示例如下:
/u01/app/oracle/diag/rdbms/*/trace/*.log {
    daily                   # 每天轮转
    rotate 7                # 保留7个旧日志
    compress                # 压缩旧日志(节省空间)
    missingok               # 若日志不存在也不报错
    notifempty              # 若日志为空则不轮转
    sharedscripts           # 所有日志处理完成后执行脚本
    postrotate
        /usr/bin/killall -HUP oracle  # 通知Oracle重新打开日志文件(需根据实际进程名调整)
    endscript
}
系统会每日自动执行轮转任务,压缩旧日志并保留7天。
若数据库未开启归档模式,需执行以下步骤:
-- 1. 关闭数据库
SHUTDOWN IMMEDIATE;
-- 2. 启动到挂载状态
STARTUP MOUNT;
-- 3. 开启归档模式
ALTER DATABASE ARCHIVELOG;
-- 4. 打开数据库
ALTER DATABASE OPEN;
-- 5. 验证归档模式
ARCHIVE LOG LIST;
开启后,数据库会自动将重做日志切换为归档日志,确保数据可完全恢复。
ALTER SYSTEM命令指定归档目录(优先使用快速恢复区):ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/flash_recovery_area' SCOPE=SPFILE;
%s(序列号)、%t(线程号)、%r(重置日志ID),避免重复:ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='ARC_%s_%t_%r.arc' SCOPE=SPFILE;
修改后需重启数据库使参数生效。
DB_RECOVERY_FILE_DEST),可通过RMAN设置保留策略(如保留7天):RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
此命令会自动删除超过7天的归档日志。RMAN删除指定归档日志:RMAN> DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';  -- 删除7天前的归档日志
Oracle日志文件需严格控制访问权限,确保仅Oracle用户(如oracle)可读写:
chown -R oracle:oinstall $ORACLE_BASE/diag/rdbms/*
chmod -R 750 $ORACLE_BASE/diag/rdbms/*
chown -R oracle:oinstall $ORACLE_HOME/network/log
chmod -R 750 $ORACLE_HOME/network/log
定期检查告警日志和监听器日志,关注以下关键信息:
ORA-错误(如ORA-00257归档日志满)、ORA-01555快照过旧等;FAILED登录记录),及时采取措施(如修改密码、限制IP访问)。