Oracle Database在CentOS上的日志管理指南
一、Oracle日志类型概述
Oracle数据库的核心日志包括三类:
- 重做日志(Redo Log):记录所有数据修改操作(INSERT/UPDATE/DELETE),用于实例恢复(如崩溃恢复),以循环方式写入(redo01.log→redo02.log→redo03.log→redo01.log)。
- 归档日志(Archived Log):重做日志的备份(当重做日志被覆盖前,将其保存为归档格式),用于介质恢复(如磁盘损坏)。仅在归档模式下生成。
- 告警日志(Alert Log):记录数据库关键事件(启动/关闭、错误、备份恢复等),是故障排查的重要依据。
- 监听日志(Listener Log):记录客户端连接请求(IP、端口、用户名等),用于网络访问监控。
二、日志文件默认路径
在CentOS系统中,Oracle日志文件的默认存储路径由$ORACLE_BASE(Oracle软件安装目录的父目录)和$ORACLE_SID(数据库实例名)决定:
- 重做日志:
$ORACLE_BASE/oradata/$ORACLE_SID/redo01.log、redo02.log、redo03.log(共3组,循环使用)。 - 归档日志:若使用快速恢复区(FRA),路径为
$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修改)。
三、归档模式配置(关键步骤)
归档模式是生成归档日志的前提,需通过以下步骤开启:
1. 查看当前归档模式
-- 以SYSDBA身份登录
sqlplus / as sysdba
-- 查询归档模式
archive log list;
输出结果中,“Database log mode”显示为NOARCHIVELOG表示未开启,“ARCHIVELOG”表示已开启。
2. 关闭数据库并进入MOUNT状态
-- 关闭数据库
shutdown immediate;
-- 启动到MOUNT状态(需挂载控制文件)
startup mount;
3. 开启归档模式
-- 开启归档模式
alter database archivelog;
-- 打开数据库(允许用户访问)
alter database open;
4. 验证归档模式
-- 再次查询归档模式
archive log list;
-- 或通过视图查询
select log_mode from v$database;
正常结果应显示“Database log mode: ARCHIVELOG”。
四、归档日志路径配置
归档日志的存储路径可通过快速恢复区(FRA)或自定义路径配置:
1. 使用快速恢复区(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子目录下。
2. 自定义归档路径(多路径可选)
若需将归档日志存储到特定目录,可通过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;
修改后需重启数据库使参数生效。
五、日志监控与管理
1. 监控归档日志空间使用
-- 查看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。
2. 清理归档日志
手动清理(指定时间范围)
-- 删除2025-01-01前的归档日志(保留最近3个月)
delete noprompt archivelog until time 'sysdate-90';
-- 或按SCN删除
delete noprompt archivelog until scn 123456789;
-- 提交删除操作
commit;
自动清理(通过RMAN保留策略)
-- 设置保留策略(保留最近7天的备份)
configure retention policy to recovery window of 7 days;
-- 执行备份(自动清理过期归档日志)
rman target /;
run {
backup database plus archivelog delete input;
}
3. 监控告警日志
# 实时查看告警日志(需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
4. 日志轮转(使用logrotate工具)
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手动触发)。
六、注意事项
- 归档模式必要性:若需实现介质恢复(如磁盘损坏),必须开启归档模式;若仅需实例恢复(如崩溃恢复),可使用非归档模式。
- 磁盘空间规划:归档日志会持续增长,需预留足够的磁盘空间(建议FRA大小为数据库大小的1.5-2倍)。
- 权限设置:归档日志目录需属于
oracle用户和oinstall组,确保Oracle进程有读写权限:chown -R oracle:oinstall /u01/app/oracle/archlog chmod -R 750 /u01/app/oracle/archlog - 备份策略:归档日志需定期备份到异地(如磁带库、云存储),避免本地磁盘故障导致数据丢失。
以上就是关于“oracle数据库在centos上的日志管理怎么做”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm