Oracle数据库的核心日志包括三类:
在CentOS系统中,Oracle日志文件的默认存储路径由$ORACLE_BASE(Oracle软件安装目录的父目录)和$ORACLE_SID(数据库实例名)决定:
$ORACLE_BASE/oradata/$ORACLE_SID/redo01.log、redo02.log、redo03.log(共3组,循环使用)。$ORACLE_BASE/fast_recovery_area/$ORACLE_SID/archivelog;若自定义LOG_ARCHIVE_DEST参数,则为指定目录。$ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/alert_$ORACLE_SID.log。$ORACLE_HOME/network/log/listener.log(默认路径,可通过lsnrctl修改)。归档模式是生成归档日志的前提,需通过以下步骤开启:
-- 以SYSDBA身份登录
sqlplus / as sysdba
-- 查询归档模式
archive log list;
输出结果中,“Database log mode”显示为NOARCHIVELOG表示未开启,“ARCHIVELOG”表示已开启。
-- 关闭数据库
shutdown immediate;
-- 启动到MOUNT状态(需挂载控制文件)
startup mount;
-- 开启归档模式
alter database archivelog;
-- 打开数据库(允许用户访问)
alter database open;
-- 再次查询归档模式
archive log list;
-- 或通过视图查询
select log_mode from v$database;
正常结果应显示“Database log mode: ARCHIVELOG”。
归档日志的存储路径可通过快速恢复区(FRA)或自定义路径配置:
FRA是Oracle提供的统一存储区域,可同时存放归档日志、RMAN备份、闪回日志等。
-- 设置FRA路径(需提前创建目录)
alter system set db_recovery_file_dest='/u01/app/oracle/fra' scope=both;
-- 设置FRA最大大小(如20GB)
alter system set db_recovery_file_dest_size=20G scope=both;
开启归档模式后,归档日志会自动存储到FRA的archivelog子目录下。
若需将归档日志存储到特定目录,可通过LOG_ARCHIVE_DEST_n参数配置:
-- 设置第一个归档路径(本地目录)
alter system set log_archive_dest_1='location=/u01/app/oracle/archlog/orcl' scope=both;
-- 可选:设置第二个归档路径(如远程服务器)
alter system set log_archive_dest_2='service=remote_db_name' scope=both;
-- 设置归档日志格式(必须包含%s序列号、%t线程号、%r重置ID)
alter system set log_archive_format='orcl_%t_%s_%r.arc' scope=spfile;
修改后需重启数据库使参数生效。
-- 查看FRA空间使用情况(若使用FRA)
col name format a40;
select name, space_limit/1024/1024 "总大小(MB)", space_used/1024/1024 "已用空间(MB)",
space_reclaimable/1024/1024 "可回收空间(MB)", number_of_files "文件数"
from v$recovery_file_dest;
-- 查看归档日志占用比例(重点关注ARCHIVED LOG类型)
set pagesize 100 linesize 200;
col file_type format a20;
col percent_space_used format 999.99;
select file_type, percent_space_used, percent_space_reclaimable, number_of_files
from v$flash_recovery_area_usage
where file_type = 'ARCHIVED LOG';
若“percent_space_used”超过90%,需清理旧归档日志或扩容FRA。
-- 删除2025-01-01前的归档日志(保留最近3个月)
delete noprompt archivelog until time 'sysdate-90';
-- 或按SCN删除
delete noprompt archivelog until scn 123456789;
-- 提交删除操作
commit;
-- 设置保留策略(保留最近7天的备份)
configure retention policy to recovery window of 7 days;
-- 执行备份(自动清理过期归档日志)
rman target /;
run {
backup database plus archivelog delete input;
}
# 实时查看告警日志(需root或oracle用户权限)
tail -f $ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/alert_$ORACLE_SID.log
# 使用grep过滤关键错误(如ORA-)
grep -i "ora-" $ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/alert_$ORACLE_SID.log
Oracle的alert日志和监听日志可通过CentOS的logrotate工具定期轮转(如每天一次,保留7天):
# 创建Oracle日志轮转配置文件
vi /etc/logrotate.d/oracle
添加以下内容:
$ORACLE_BASE/diag/rdbms/*/trace/alert_*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
$ORACLE_HOME/network/log/listener.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
保存后,logrotate会每天自动执行轮转(可通过logrotate -f /etc/logrotate.d/oracle手动触发)。
oracle用户和oinstall组,确保Oracle进程有读写权限:chown -R oracle:oinstall /u01/app/oracle/archlog
chmod -R 750 /u01/app/oracle/archlog