Oracle数据库生成的日志主要分为三类,用于记录数据库运行状态、故障排查及恢复:
$ORACLE_HOME/network/log/listener.log(默认监听端口1521)。$ORACLE_BASE/diag/rdbms/<数据库名>/<实例名>/trace/alert_<实例名>.log。在Debian系统中,Oracle日志默认存储在/u01/app/oracle目录下(需根据安装时的ORACLE_BASE配置调整),其中重做日志位于oradata/<实例名>/redo,告警日志和监听器日志位于diag/rdbms/<数据库名>/<实例名>/trace。
adrci(Oracle诊断工具)实时查看或过滤告警日志:$ORACLE_HOME/bin/adrci
adrci> set home diag/rdbms/orcl/ORCL # 切换到目标实例路径(orcl为实例名)
adrci> show alert -tail -f # 实时输出告警日志
adrci> show alert -p "message_text like '%ORA-600%'" # 过滤包含ORA-600错误的日志
adrci> exit
tail命令实时查看:tail -f $ORACLE_HOME/network/log/listener.log
journalctl查看(需root权限):sudo journalctl -u oracle.service # 查看Oracle服务日志
sudo journalctl --since "2025-11-01" --until "2025-11-05" # 按时间范围过滤
SHOW PARAMETER BACKGROUND_DUMP_DEST; # 显示告警日志存储路径
SELECT GROUP#, STATUS, SEQUENCE#, BYTES, MEMBERS
FROM V$LOG; -- 查看联机重做日志状态
SELECT NAME, STATUS FROM V$ARCHIVED_LOG; -- 查看归档重做日志状态
日志轮转用于自动压缩、删除旧日志,释放磁盘空间。Debian推荐使用logrotate工具,结合Oracle自身特性配置:
创建/etc/logrotate.d/oracle文件,添加以下内容(以归档日志为例):
/u01/app/oracle/archivelog/* {
daily # 每日轮转
rotate 30 # 保留30个归档日志
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(避免影响当前日志)
missingok # 忽略缺失文件
notifempty # 空日志不轮转
create 0640 oracle oinstall # 新日志权限(oracle用户,oinstall组)
sharedscripts # 所有日志处理完成后执行脚本
postrotate
$ORACLE_HOME/bin/rman target / <<EOF
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; # 删除7天前的归档日志
EXIT;
EOF
endscript
}
sudo logrotate -d /etc/logrotate.d/oracle # 调试模式(查看执行流程)
sudo logrotate -f /etc/logrotate.d/oracle # 强制立即执行
归档日志是数据库恢复的核心,需定期清理以避免磁盘空间耗尽:
SHUTDOWN IMMEDIATE; -- 关闭数据库
STARTUP MOUNT; -- 挂载数据库
ALTER DATABASE ARCHIVELOG; -- 开启归档模式
ALTER DATABASE OPEN; -- 打开数据库
ARCHIVE LOG LIST; -- 验证归档模式(显示"Database log mode: Archive Mode")
通过RMAN设置保留策略,自动删除过期归档日志:
rman target /
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; -- 保留7天内的归档日志
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT; -- 备份并删除已备份的归档日志
RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; -- 删除7天前的归档日志
设置每日凌晨2点自动清理归档日志:
crontab -e
添加以下内容:
0 2 * * * /u01/app/oracle/product/19c/bin/rman target / <<EOF
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
EXIT;
EOF
oracle用户和oinstall组拥有,避免其他用户修改:chown -R oracle:oinstall $ORACLE_BASE/diag/rdbms
chmod -R 750 $ORACLE_BASE/diag/rdbms
ORA-错误(如ORA-01555快照过旧、ORA-01653表空间不足),及时处理潜在问题。通过以上步骤,可实现Debian环境下Oracle日志的有效管理,确保数据库运行的稳定性与可恢复性。