Oracle数据库的**归档模式(ARCHIVELOG)**是保障数据可恢复性的核心配置。与非归档模式(NOARCHIVELOG)相比,归档模式会保留重做日志的历史副本,确保介质故障时可通过归档日志+重做日志+数据文件备份完成完整恢复。
操作步骤:
SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN;ARCHIVE LOG LIST;(查看归档模式状态及路径)SELECT log_mode FROM v$database;(确认日志模式为ARCHIVELOG)。归档日志的存储路径和命名格式直接影响日志的可管理性。建议通过LOG_ARCHIVE_DEST_n参数配置多个本地或远程归档位置,并使用LOG_ARCHIVE_FORMAT定义包含关键信息的文件名(如线程号、序列号、Resetlogs ID)。
配置示例:
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/archivelogs VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' SCOPE=SPFILE;ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE;ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/FRA' SCOPE=SPFILE;ALTER SYSTEM SET db_recovery_file_dest_size=20G SCOPE=SPFILE;LOG_ARCHIVE_DEST_n和FRA,日志会优先归档至LOG_ARCHIVE_DEST_n指定的目录;若需同时存入FRA,可添加log_archive_dest_2='LOCATION=USE_DB_RECOVERY_FILE_DEST'。定期监控归档日志的状态、使用量及剩余空间,可提前预警磁盘空间不足或归档失败问题。
关键监控命令:
SELECT dest_name, status, destination, error FROM v$archive_dest;(STATUS为VALID表示正常,ERROR需排查具体问题)SELECT file_type, percent_space_used, percent_space_reclaimable FROM v$recovery_area_usage;(重点关注ARCHIVED LOG类型的占比)SELECT COUNT(*), SUM(BLOCKS*BLOCK_SIZE)/1024/1024 AS size_mb FROM v$archived_log WHERE deleted='NO';。归档日志会持续占用磁盘空间,需定期清理已备份的过期日志。建议通过RMAN(Recovery Manager)自动化执行清理任务。
清理方法:
RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';/u01/app/oracle/scripts/cleanup_archivelogs.sh,内容如下:#!/bin/bash
rman target / <<EOF
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
EXIT;
EOF
0 2 * * * /u01/app/oracle/scripts/cleanup_archivelogs.sh >> /u01/app/oracle/logs/cleanup_archivelogs.log 2>&1。Ubuntu系统自带的logrotate工具可实现Oracle alert日志、trace日志的自动轮转(分割、压缩、删除旧日志),避免单个日志文件过大。
配置步骤:
/etc/logrotate.d/oracle/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
}
daily:每日轮转;rotate 30:保留30个历史日志;compress:压缩旧日志(节省空间);copytruncate:复制原日志后清空,避免Oracle进程无法写入。日志是数据库故障诊断的关键依据,需定期分析alert日志(记录数据库关键事件)和trace日志(记录进程详细错误)。
常用分析方法:
tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.loggrep过滤错误信息:grep -i "error\|ORA-" /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.logEXEC DBMS_LOGMNR.START_LOGMNR(STARTTIME => SYSDATE-1, ENDTIME => SYSDATE, OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
SELECT sql_redo FROM v$logmnr_contents WHERE seg_owner = 'SCHEMA_NAME';
EXEC DBMS_LOGMNR.END_LOGMNR;
```。
以上实践覆盖了Ubuntu环境下Oracle数据库日志管理的全生命周期,从模式配置到监控清理,再到分析与故障排查,可有效提升数据库的可靠性与可维护性。