oracle rman 12c起controlfile autobackup默认为on,执行backup database等成功命令会立即生成独立控制文件自动备份(含spfile),该行为是内置容灾机制,并非“顺带”,而是明确设计。
rman 12c 默认开启 controlfile autobackup,且 backup database 隐式触发它——不是“顺带”,而是明确设计的行为。
CONFIGURE CONTROLFILE AUTOBACKUP ON 是默认行为
Oracle 12c(COMPATIBLE ≥ 12.0)起,CONFIGURE CONTROLFILE AUTOBACKUP 默认为 ON。这意味着只要执行一次成功的 BACKUP 或 COPY 命令(哪怕只备份一个数据文件),RMAN 就会立即生成一份独立的控制文件自动备份(含 spfile,如果数据库用的是 spfile 启动)。
这不是 bug,也不是配置遗漏——是 Oracle 内置的容灾保障机制:确保哪怕控制文件、spfile、恢复目录全丢,也能靠这个自动备份恢复启动。
验证当前状态只需在 RMAN 中运行:SHOW CONTROLFILE AUTOBACKUP;,输出应为 ON。
BACKUP DATABASE 不等于“只备份数据文件”
当执行 BACKUP DATABASE 时,RMAN 的实际行为分两层:
- 主备份任务:打包所有数据文件、当前控制文件(如果未启用 AUTOBACKUP)、spfile(若存在)进同一个备份集 —— 这是“显式包含”
- 附加动作:因
CONTROLFILE AUTOBACKUP ON生效,再额外生成一个独立的二进制文件(命名含%F,如c-1234567890-20260610-00),不进备份集,也不受DELETE OBSOLETE影响
所以你看到的“多出来的控制文件备份”,大概率就是这个自动备份文件,而不是主备份集里的副本。
注意:如果数据库没用 spfile(而用 pfile 启动),则自动备份里不会包含参数文件。
为什么不能关掉 AUTOBACKUP 就以为“不备份控制文件”了
即使你执行了 CONFIGURE CONTROLFILE AUTOBACKUP OFF,BACKUP DATABASE 仍可能把控制文件和 spfile 打包进备份集——只要它备份了数据文件 1(SYSTEM 表空间所在文件)。这是 RMAN 的硬编码逻辑,与 AUTOBACKUP 开关无关。
换句话说:
-
AUTOBACKUP ON→ 一定有独立控制文件备份 + 可能有备份集内副本 -
AUTOBACKUP OFF→ 没有独立备份,但仍有概率在备份集中出现(尤其当datafile 1被包含时)
真正想彻底排除控制文件,得用 BACKUP DATABASE NOINCLUDE CURRENT CONTROLFILE(12c+ 支持),但极少推荐:失去控制文件,备份就基本不可恢复。
路径和命名容易静默失败
自动备份默认写入快速恢复区(db_recovery_file_dest),但如果该路径满、权限不足、或 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT 中漏了 %F(比如写成 '/bk/cf.bak'),RMAN 不报错,只是后续所有自动备份都静默跳过。
查日志确认是否真执行了自动备份,最可靠方式是看 ADR 中的 alert 日志,搜索关键词 autobackup 或 control file backup;光看 RMAN 输出或目录列表容易误判。
别忽略 PDB 场景:在 CDB 中连接到某个 PDB 执行备份,自动备份可能落在以 PDB GUID 命名的子目录下(如 /fast_recovery_area/CDB/67FDCE20C52E0518E0531202A8C0E70F/autobackup/),不是所有 DBA 都会定期巡检这些路径。











