noarchivelog模式下rman全库备份必须在mount状态执行,open状态下运行backup database必然失败并报ora-19602错误;这是oracle强制安全拦截,因无归档日志无法保证活动数据文件一致性。

NOARCHIVELOG模式下RMAN全库备份必须在MOUNT状态执行
直接在OPEN状态下运行 BACKUP DATABASE 必然失败,报错 ORA-19602: cannot backup or copy active file in noarchivelog mode。这不是权限或配置问题,而是Oracle的强制安全拦截——非归档模式下,活动数据文件无法保证一致性,RMAN拒绝备份。
唯一能绕过这个限制的操作是 BACKUP CURRENT CONTROLFILE 或 BACKUP SPFILE,它们不依赖数据文件状态;但全库备份(BACKUP DATABASE)不行,哪怕数据库是只读打开(ALTER DATABASE OPEN READ ONLY)也不行。
- 必须先执行
SHUTDOWN IMMEDIATE(避免用SHUTDOWN ABORT,否则下次启动可能需实例恢复,失败风险高) - 再执行
STARTUP MOUNT(确认v$instance.status为MOUNTED,不是OPEN) - 然后
rman target /连入,运行BACKUP DATABASE
RMAN冷备时控制文件和SPFILE要不要显式备份
默认开启 CONTROLFILE AUTOBACKUP(可通过 SHOW ALL 查看),那么 BACKUP DATABASE 执行完后,RMAN会自动触发一次控制文件和SPFILE的自动备份,生成类似 c-1234567890-20260515-01 的文件。
但要注意:这个自动备份只发生在备份命令成功完成之后。如果备份中途失败(比如磁盘空间不足、路径无写权限),自动备份也不会发生。
- 保险起见,可在
RUN块中显式加上INCLUDE CURRENT CONTROLFILE,例如:BACKUP DATABASE INCLUDE CURRENT CONTROLFILE FORMAT '/backup/db_%U.bkp' - 单独备份SPFILE更稳妥:
BACKUP SPFILE FORMAT '/backup/spfile_%U.bkp' - 若已关闭自动备份(
CONFIGURE CONTROLFILE AUTOBACKUP OFF),则必须手动加INCLUDE或单独执行BACKUP CURRENT CONTROLFILE
备份路径、格式与存储权限容易被忽略的细节
备份目标路径必须由Oracle用户有写权限,且所在文件系统有足够空间。RMAN不会自动创建父目录,路径不存在会直接报错 RMAN-06172: no default device specified, must specify a device type 或更底层的I/O错误。
常见疏漏点:
- Linux下提前建好目录(如
/full),并执行chown -R oracle:oinstall /full,不能只改owner不改group - Windows下注意路径分隔符用反斜杠
,且需转义或用双引号包裹,例如:FORMAT 'D:\backup\%U.bkp' - 不指定
FORMAT时,RMAN默认存到$ORACLE_HOME/dbs(不是ORACLE_HOME/database,旧文档常写错),该目录空间通常极小,极易填满 -
%U是推荐的格式变量(唯一文件名),避免用%d_%T等组合导致重名覆盖
非归档模式下还原的关键约束:只能恢复到备份时刻
没有归档日志,就无法做时间点恢复(PITR)或应用增量变更。还原后数据库状态严格等于备份那一刻——包括未提交事务的回滚、已提交但尚未写盘的数据等,都按备份时的一致性快照重建。
还原流程本身不复杂,但有两个硬性动作不可省略:
- 若控制文件损坏,必须先
STARTUP NOMOUNT→RESTORE CONTROLFILE FROM AUTOBACKUP→ALTER DATABASE MOUNT - 最后一步必须用
RECOVER DATABASE NOREDO(不是RECOVER DATABASE),否则RMAN会尝试找归档日志,报错退出 - 打开数据库必须用
ALTER DATABASE OPEN RESETLOGS,因为重做日志序列已断,需重建在线日志组
整个过程没有“选择恢复到哪一天”的余地,备份集就是唯一可信源;任何试图跳过 NOREDO 或漏掉 RESETLOGS 的操作,都会卡在挂载态或报错终止。











