RMAN在MOUNT状态下全备可获一致性备份,因实例启动、控制文件已读、数据文件头SCN同步且无用户写入;但须满足NOARCHIVELOG模式且全程不OPEN,否则备份失效或无法直接OPEN/RESETLOGS。
在 mount 状态下用 rman 做全备,能拿到一致性备份,但必须满足两个硬条件:数据库处于 noarchivelog 模式,且备份全程不被 open —— 一旦执行 alter database open,备份就失效了。
为什么 MOUNT 状态下 RMAN 全备是一致的
因为 MOUNT 时实例已启动、控制文件已读取、所有数据文件头 SCN 已同步,但没有任何用户写入或日志活动。此时 RMAN 备份的是“静止快照”,不需要后续 RECOVER 就能直接 RESTORE + OPEN RESETLOGS(NOARCHIVELOG 下)或 OPEN(ARCHIVELOG 下)。这和冷备效果等价,但不用关实例,操作窗口更灵活。
常见错误现象:RMAN-06059: expected archived log not found —— 这通常发生在 ARCHIVELOG 模式下误用 MOUNT 备份后又试图做不完全恢复;或者备份中途数据库被意外 OPEN。
- NOARCHIVELOG 模式:MOUNT 下 RMAN 全备 = 一致性冷备,还原后可直接
OPEN RESETLOGS - ARCHIVELOG 模式:MOUNT 下 RMAN 全备仍是“一致的”,但因 online redo log 未归档,还原后若要前滚到最新,必须依赖归档日志 + 当前 online log(而 MOUNT 时 online log 不会被备份)
- 只要数据库在备份过程中始终没执行
ALTER DATABASE OPEN,RMAN 就不会报错,但语义上它只保证“备份时刻的一致性”,不承诺可恢复到任意时间点
RMAN 在 MOUNT 状态执行全备的实操步骤
注意:目标数据库必须是 NOARCHIVELOG 模式,否则 RMAN 会尝试读取归档日志链,导致失败或结果不可控。
- 先确认状态:
SELECT LOG_MODE FROM V$DATABASE;,如果不是NOARCHIVELOG,得先关库:SHUTDOWN IMMEDIATE - 启动到 MOUNT:
STARTUP MOUNT(不能用STARTUP,那会直跳 OPEN) - 连接 RMAN 并执行:
RMAN TARGET / RUN { ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/backup/full_%U.bak'; BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT; }⚠️ 这里PLUS ARCHIVELOG在 NOARCHIVELOG 下实际无归档可删,但语法允许;若确定无归档,可简化为BACKUP DATABASE - 备份完成后,不要执行
ALTER DATABASE OPEN—— 若需验证,应在另一套环境还原测试
容易踩的坑:MOUNT 备份 vs 归档模式下的行为差异
很多人以为“MOUNT 就安全”,结果在 ARCHIVELOG 模式下照样翻车。关键差异不在 RMAN 命令本身,而在 Oracle 内部对 SCN 和日志流的处理逻辑。
-
BACKUP DATABASE在 MOUNT 下不会触发日志切换,因此如果上次日志切换是 2 小时前,备份反映的就是那个时间点的数据 —— 但你无法靠它恢复到“现在” - 归档路径配置(如
LOG_ARCHIVE_DEST_1)在 MOUNT 下无效,RMAN 不读这个参数;它只关心控制文件里记录的当前数据文件状态 - 如果数据库是 RAC,必须在所有节点都 STOP 后,仅在一个节点执行
STARTUP MOUNT,再运行 RMAN —— RMAN 不支持跨实例并行挂载备份 -
BACKUP AS COPY在 MOUNT 下可用,但生成的是镜像副本(非备份集),占用空间大、校验慢,且不能跨平台传输
还原时的关键动作:别跳过 RESETLOGS
从 MOUNT 状态备份还原后,即使原库是 NOARCHIVELOG,也必须用 ALTER DATABASE OPEN RESETLOGS —— 因为控制文件里的 RESETLOGS_ID 和 INCARNATION# 已变,直接 OPEN 会报 ORA-01139: RESETLOGS operation is not allowed。
还原流程示例:
RMAN TARGET / RESTORE DATABASE; RECOVER DATABASE NOREDO; -- 关键:显式禁用日志应用 ALTER DATABASE OPEN RESETLOGS;若漏掉
RESETLOGS,数据库会拒绝打开,且下次备份的 Incarnation 会断开,影响后续增量策略。
最常被忽略的一点:MOUNT 状态备份虽“一致”,但它不包含任何归档日志、不记录 backup piece 的完整元数据到控制文件以外的地方 —— 所以务必在备份后立即用 LIST BACKUP 确认,并把 CONTROLFILE AUTOBACKUP 打开(CONFIGURE CONTROLFILE AUTOBACKUP ON),否则还原时可能找不到匹配的控制文件。


















