RMAN自动还原控制文件的前提是已配置CONTROLFILE AUTOBACKUP ON或执行过BACKUP CURRENT CONTROLFILE,且对应备份可用;否则需手动重建。
控制文件丢失后,rman 能自动还原的前提是:你之前执行过 backup current controlfile 或 configure controlfile autobackup on,且对应备份集(或自动备份)仍可访问。 没有这些前提,rman 无法凭空生成控制文件——它不存储控制文件内容,只管理备份元数据和备份片。
确认控制文件是否真丢失,还是仅损坏或路径错误
Oracle 启动时若报 ORA-00205: error in identifying control file 或 ORA-00210: cannot open the specified control file,先别急着还原。常见误判场景:
- 控制文件物理存在,但权限不对(如
chmod 600缺失,或属主不是oracle用户) - 参数文件(
spfile或pfile)中control_files列出的路径有拼写错误、挂载点未就绪、ASM diskgroup 未MOUNT - 使用 ASM 存储时,
+DATA/dbname/CONTROLFILE/current.xxx路径下仍有最新镜像,但 OCR 或 ASM 实例异常导致不可见
执行 ls -l 和 sqlplus / as sysdba 后用 SHOW PARAMETER control_files 快速交叉验证。
RMAN 自动还原控制文件的两个必要条件
RMAN 不会“猜”该还原哪个控制文件备份——它依赖明确的配置或显式指定。必须满足以下任一组合:
-
CONFIGURE CONTROLFILE AUTOBACKUP ON已启用,且最近一次数据库SHUTDOWN IMMEDIATE或BACKUP DATABASE后生成了自动备份(默认名形如c-1234567890-20240501-01),且 RMAN 能定位到该备份所在设备(磁盘/磁带) - 手动备份过控制文件:
BACKUP CURRENT CONTROLFILE或BACKUP CURRENT CONTROLFILE FORMAT '/u01/bkp/cf_%U.bkp',且该备份片未被CROSSCHECK标记为EXPIRED或被DELETE OBSOLETE清理掉
注意:BACKUP DATABASE PLUS ARCHIVELOG 默认不包含控制文件,除非显式加 INCLUDE CURRENT CONTROLFILE;自动备份只在数据库 SHUTDOWN、BACKUP 或 ARCHIVELOG 切换后触发,非实时。
执行还原的最小可行步骤(无 catalog,仅使用 control file 自身备份)
假设数据库已关闭,且你确认自动备份可用(比如在 $ORACLE_HOME/dbs 或指定磁盘目录下能看到 c-*.bkp 文件):
rman target /
RMAN> STARTUP NOMOUNT
RMAN> SET DBID 1234567890 # 必须设置!DBID 错误会导致找不到备份集,可通过 $ORACLE_HOME``/dbs/spfile<sid>.ora 或之前备份日志查
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
# 若自动备份不在默认路径,需先 RUN { SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/bkp/%F'``; }
RMAN> ALTER DATABASE MOUNT;
RMAN> RESTORE DATABASE; # 控制文件恢复后,必须先 mount 才能识别数据文件状态
RMAN> RECOVER DATABASE; # 应用归档日志(如有)
RMAN> ALTER DATABASE OPEN RESETLOGS;
关键细节:
-
RESTORE CONTROLFILE FROM AUTOBACKUP会搜索所有已知设备(DEVICE TYPE DISK默认路径包括$ORACLE_HOME/dbs、DB_RECOVERY_FILE_DEST),但不会递归子目录;路径不对要先SET CONTROLFILE AUTOBACKUP FORMAT - 如果控制文件还原后,
RESTORE DATABASE报ORA-19870: error reading backup piece,大概率是数据文件路径与控制文件中记录的不一致(例如用了不同主机的备份),需用SWITCH DATABASE TO COPY或SET NEWNAME修正 -
RESETLOGS是强制操作,意味着此前所有归档日志无法再用于后续恢复——确保你清楚这个分界点
没开自动备份,也没有手动控制文件备份怎么办
omegafw.sepis.com.cn
rolexfw.sepis.com.cn
patekfw.sepis.com.cn
omega1.gmcwatch.cn
rolex1.gmcwatch.cn
patek1.gmcwatch.cn
omega1.swatchsh.com
rolex1.swatchsh.com
patek1.swatchsh.com
omegawx.paydyj.com
rolexwx.paydyj.com
patekwx.paydyj.com
omegawx.watchku.com
rolexwx.watchku.com
patekwx.watchku.com
这是最棘手的情况:RMAN 完全无从下手。此时唯一可行路径是重建控制文件,但要求你完整掌握:
- 所有在线日志组成员路径及状态(
GROUP#, STATUS, MEMBER) - 所有数据文件绝对路径(包括系统表空间、临时表空间、undo 表空间)
- 数据库名称、字符集、归档模式等基础属性
命令是 CREATE CONTROLFILE REUSE DATABASE ...,但语法容错极低,一个路径少斜杠或文件名大小写错误就会失败。更现实的做法是:立刻停机,联系 Oracle Support 提供 trace 日志(如 ALTER DATABASE BACKUP CONTROLFILE TO TRACE 的历史输出),否则极易导致数据字典不一致甚至库不可用。