Oracle 19c中BACKUP DATABASE默认不备份归档日志,因其仅处理数据文件;必须显式使用BACKUP DATABASE PLUS ARCHIVELOG才能触发归档备份,并配合DELETE INPUT等策略安全清理。
oracle 19c rman 默认不备份归档日志,是因为 backup database 命令本身不包含归档日志处理逻辑 —— 它只管数据文件,其余一概不管。
BACKUP DATABASE 命令默认行为就是只备份数据文件
RMAN 的 BACKUP DATABASE 是一个“纯数据文件”操作:它扫描控制文件中记录的所有在线数据文件(SYSTEM、SYSAUX、USERS 等),打包成备份集,但完全忽略归档日志的存在。哪怕数据库处于归档模式,哪怕归档目录里堆满了 1_100_1234567890.arc 这类文件,BACKUP DATABASE 也不会碰它们一下。
常见错误现象:
- 执行
BACKUP DATABASE;后,用LIST ARCHIVELOG ALL;查看,发现归档日志仍全在磁盘上,且LIST BACKUP OF ARCHIVELOG返回空结果 - 后续做时间点恢复(PITR)失败,报错
ORA-01152: file 1 was not restored from a backup或提示“找不到归档日志” - 误以为“全库备份”=“所有东西都备了”,实际只备了数据文件,控制文件和归档日志都漏了
必须显式加 PLUS ARCHIVELOG 才触发归档日志备份
PLUS ARCHIVELOG 不是可选修饰词,而是独立的归档日志调度指令。它会让 RMAN 在备份数据文件前后自动执行三件事:
- 先切换当前日志(
ALTER SYSTEM ARCHIVE LOG CURRENT),确保最新事务落盘 - 再备份所有未被备份过的归档日志(即
ARCHIVED LOG ALL中状态为AVAILABLE且未被BACKED UP 1 TIMES的) - 最后才开始备份数据文件(避免备份过程中新日志产生导致不一致)
所以正确写法只有这一种组合:
BACKUP DATABASE PLUS ARCHIVELOG;
注意:PLUS ARCHIVELOG 必须紧跟在 BACKUP DATABASE 后面,不能拆开,也不能写成 BACKUP DATABASE AND ARCHIVELOG 或 BACKUP DATABASE + ARCHIVELOG —— 后两者语法直接报错 RMAN-00571。
DELETE INPUT 和 DELETE ALL INPUT 的区别很关键
很多用户加了 PLUS ARCHIVELOG 却仍发现归档没删,是因为没配删除动作,或配错了参数:
-
DELETE INPUT:只删本次备份中实际被读取并写入备份集的那些归档日志(安全,推荐) -
DELETE ALL INPUT:会删掉所有已备份过的归档日志,不管是否被这次PLUS ARCHIVELOG覆盖 —— 容易误删备库还没应用的日志,尤其在 ADG 环境下极其危险 - 如果用了 ADG,还必须在备库执行
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;,否则主库执行DELETE INPUT时可能报RMAN-08591
冷备份场景下 PLUS ARCHIVELOG 会失效
如果数据库是 SHUTDOWN IMMEDIATE 后再启动到 MOUNT 状态执行 BACKUP DATABASE PLUS ARCHIVELOG,RMAN 会报错:
RMAN-03009: failure of backup command on ORA_DISK_1 channel at ...<br>ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
原因:数据库在 MOUNT 但未 OPEN 时,无法执行 ARCHIVE LOG CURRENT,也就无法保证归档日志完整性。此时必须:
- 要么先
ALTER DATABASE OPEN,再备份(热备) - 要么放弃
PLUS ARCHIVELOG,改用BACKUP DATABASE+ 单独BACKUP ARCHIVELOG ALL(需手动保证顺序) - 冷备时归档日志本身应已全部归档完毕,但 RMAN 不会自动识别“哪些该备”,必须显式调用
真正容易被忽略的是:归档日志不是“自动附带”的资源,它是独立生命周期对象;RMAN 对它的处理永远需要明确动词驱动 —— 没有 PLUS ARCHIVELOG,就没有归档备份,就这么简单直接。


















