必须先切换到archivelog模式,否则rman无法做在线备份;执行archive log list确认archive mode: yes且automatic archival: enabled,缺一不可,仅select log_mode from v$database不足以验证自动归档是否启用。
必须先切换到 archivelog 模式,否则 rman 无法做在线备份 —— 这不是可选项,是硬性前提。
确认当前是否处于归档模式
直接执行 ARCHIVE LOG LIST 是最快速的判断方式。输出里如果出现 No Archive Mode 或 Archive Mode: NO,说明还没开归档,不能做热备;若显示 Archive Mode: YES 且 Automatic archival: Enabled,才真正可用。
注意:仅靠 SELECT LOG_MODE FROM V$DATABASE 只能看出模式,但无法知道自动归档是否启用 —— 后者缺了会导致日志堆积、数据库 hang 住。
-
ARCHIVE LOG LIST要在 SQL*Plus 或 SQLcl 中运行,不能在 RMAN 里执行 - 如果数据库是 RAC,每个实例都要单独检查,
V$DATABASE只反映当前实例状态 - 输出中
Archive destination显示USE_DB_RECOVERY_FILE_DEST但没配db_recovery_file_dest参数,归档会失败
切换归档模式的最小必要操作
不能在 OPEN 状态下改归档模式,必须经历 SHUTDOWN IMMEDIATE → STARTUP MOUNT → ALTER DATABASE ARCHIVELOG → ALTER DATABASE OPEN 四步。跳过 MOUNT 直接 ALTER DATABASE 会报错 ORA-01126。
关键点在于:ALTER DATABASE ARCHIVELOG 是 DDL 操作,它会立即更新控制文件并写入归档模式标记 —— 所以重启不是必须的,但 STARTUP MOUNT 这一步不可省。
- 执行前确保
log_archive_dest_1已设(哪怕只是临时指向/tmp),否则ALTER DATABASE OPEN可能卡住 - 不要用
ALTER DATABASE SET LOGMODE ARCHIVE—— 这是旧版本语法,11g+ 已废弃,会报ORA-02000 - 切换后第一次日志切换(
ALTER SYSTEM SWITCH LOGFILE)才能验证归档是否真在工作
归档路径配置的常见陷阱
归档路径不光要存在、有权限,还得满足 Oracle 的路径解析规则。比如用 LOCATION=/u01/arch,Oracle 实际生成的文件名由 log_archive_format 决定,默认是 %t_%s_%r.dbf,其中 %r 是 resetlogs ID —— 如果你之前执行过 RESETLOGS,新归档日志会写进同一目录但序列号重置,容易和旧日志混淆。
-
log_archive_dest_1必须用SCOPE=SPFILE,否则实例重启后失效 - 多路归档(
log_archive_dest_2)建议只用于异地或 NFS 共享路径,本地双路径无实际容灾价值 - 若用快速恢复区(FRA),
db_recovery_file_dest_size必须显式设值,否则默认 2GB 很快填满,触发ORA-19809和数据库挂起 - 路径含空格或特殊字符(如括号)会导致归档失败,错误日志里只显示
ARCn: Failed to archive log,不报具体路径问题
RMAN 在线备份前必须验证的三件事
开了归档 ≠ RMAN 就能热备。RMAN 依赖归档日志连续性做增量和时间点恢复,所以得确认归档链没断。
- 执行
LIST ARCHIVELOG ALL查看是否有 gap(比如序列号跳变),gap 会导致备份后无法完整恢复 - 检查
V$ARCHIVED_LOG中最近几条记录的DELETED列是否为NO,被误删的归档日志会让 RMAN 备份失败 - 运行
BACKUP VALIDATE ARCHIVELOG ALL可快速检测归档日志物理完整性,比等真正备份时报ORA-19505更早发现问题
归档模式本身不难配,难的是让它持续稳定工作 —— 磁盘满、权限丢、路径错、FRA 超限,任何一个都可能让归档停摆,进而导致 RMAN 备份静默失败。别只盯着“开了没”,得盯住“一直在写、没中断、能读取”。











