Oracle数据库的日志体系是其高可用性和可恢复性的基础,主要包括两类核心日志:
使用以下命令确认数据库是否开启归档模式:
ARCHIVE LOG LIST;
-- 或查询数据字典
SELECT log_mode FROM v$database;
若log_mode显示为ARCHIVELOG则表示开启,NOARCHIVELOG则表示关闭。
若当前为非归档模式,需按以下步骤切换:
-- 1. 关闭数据库(正常关闭)
SHUTDOWN IMMEDIATE;
-- 2. 启动到挂载状态(不打开数据库)
STARTUP MOUNT;
-- 3. 开启归档模式
ALTER DATABASE ARCHIVELOG;
-- 4. 打开数据库
ALTER DATABASE OPEN;
切换完成后,需确认归档进程(ARCn)是否启动:
SELECT archiver FROM v$instance;
-- 若STATUS为'STOPPED',需检查alert日志排查问题
若无需介质恢复,可切换至非归档模式以节省存储空间:
-- 1. 关闭数据库
SHUTDOWN IMMEDIATE;
-- 2. 启动到挂载状态
STARTUP MOUNT;
-- 3. 关闭归档模式
ALTER DATABASE NOARCHIVELOG;
-- 4. 打开数据库
ALTER DATABASE OPEN;
在线重做日志的默认路径由LOG_FILE_NAME_CONVERT参数或初始化参数文件(spfile)中的LOG_ARCHIVE_DEST_n指定。可通过以下命令查询:
SELECT group#, member FROM v$logfile;
示例输出:
GROUP# MEMBER
------ ------------------------------
1 /u01/app/oracle/oradata/ORCL/redo01.log
2 /u01/app/oracle/oradata/ORCL/redo02.log
3 /u01/app/oracle/oradata/ORCL/redo03.log
归档日志的默认路径由LOG_ARCHIVE_DEST参数指定,常见路径包括:
/u01/app/oracle/archive;DB_RECOVERY_FILE_DEST参数设置(默认路径为$ORACLE_BASE/flash_recovery_area)。SHOW PARAMETER LOG_ARCHIVE_DEST;
SHOW PARAMETER DB_RECOVERY_FILE_DEST;
当日志文件未填满但需切换时(如定期备份前),可使用以下命令强制切换:
ALTER SYSTEM SWITCH LOGFILE;
若需定期自动切换(如每小时一次),可通过DBMS_SCHEDULER创建作业:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'hourly_log_switch',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN EXECUTE IMMEDIATE ''ALTER SYSTEM SWITCH LOGFILE''; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
enabled => TRUE
);
END;
/
归档日志占用过多空间会导致数据库宕机,需定期监控:
-- 查询闪回恢复区使用情况
SELECT * FROM v$recovery_file_dest;
-- 查询归档日志占比
SELECT
ROUND(SPACE_USED/SPACE_LIMIT*100, 2) AS USED_PERCENT,
SPACE_USED/1024/1024 AS USED_MB,
SPACE_LIMIT/1024/1024 AS LIMIT_MB
FROM v$recovery_file_dest;
若USED_PERCENT接近90%,需及时清理或扩容。
-- 连接到RMAN
rman target /
-- 交叉检查归档日志(确保状态准确)
CROSSCHECK ARCHIVELOG ALL;
-- 删除过期的归档日志(如超过7天)
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
-- 删除指定时间前的归档日志(如保留最近1天)
DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-1';
cd /u01/app/oracle/archive
find . -name "*.log" -mtime +7 -exec rm -f {} \;
若在线重做日志频繁切换(如每分钟1次),需调整其大小或增加组数:
ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/app/oracle/oradata/ORCL/redo04.log') SIZE 200M;
-- 1. 删除旧组(如组1)
ALTER DATABASE DROP LOGFILE GROUP 1;
-- 2. 添加新组(大小调整为200M)
ALTER DATABASE ADD LOGFILE GROUP 1 ('/u01/app/oracle/oradata/ORCL/redo01.log') SIZE 200M;
OEM提供可视化的日志监控界面,可实时查看在线重做日志和归档日志的状态、大小、剩余空间等信息,并设置告警阈值(如归档日志空间使用率超过80%时触发邮件告警)。
通过Zabbix、Nagios等工具监控以下指标:
使用grep、awk等命令分析alert日志中的重做日志错误:
grep -i "redo log" /u01/app/oracle/diag/rdbms/ORCL/trace/alert_ORCL.log
或使用ELK Stack(Elasticsearch+Logstash+Kibana)收集、存储和分析日志,实现可视化故障排查。