RAC恢复前须确认ORACLE_SID、实例状态、ASM自动备份存在、catalog连接及归档路径一致性;控制文件须从共享存储还原并正确挂载;还原与恢复需按序执行SET UNTIL TIME、RESTORE、RECOVER;OPEN RESETLOGS后须用srvctl启动其他节点并验证实例状态和FRA配置。
恢复前必须确认的 RAC 环境状态
rac 恢复不是单实例的简单复刻,oracle_sid、instance_name、集群注册信息都直接影响 rman 是否能识别归档和控制文件。常见错误是直接在某个节点上启动 nomount 后执行 restore controlfile,结果报错 ora-01507: database not mounted 或 rman-06172: no autobackup found——这往往是因为没用对实例环境。
- 确保当前 shell 的
ORACLE_SID与待恢复的目标实例名一致(如racdb1),且该实例已通过srvctl start instance -d racdb -i racdb1启动到nomount状态 - 检查
+FRA/racdb/AUTOBACKUP(或你实际配置的 FRA 路径)中是否存在最近的控制文件自动备份,用ASMCMD进入后执行ls -l AUTOBACKUP/,别只看本地磁盘 - 若使用 catalog,确认
RCVCAT连接正常;若仅用 control file repository,确保恢复目标实例的控制文件备份时间早于你要恢复到的时间点
RMAN 中还原控制文件并挂载数据库
RAC 下控制文件必须从共享存储(ASM 或集群文件系统)还原,不能还原到本地文件系统路径。否则后续 ALTER DATABASE MOUNT 会因节点间路径不一致失败。
- 在目标节点以
rman target /连接(不要加catalog参数除非你确定 catalog 已同步最新元数据) - 执行
RESTORE CONTROLFILE FROM '+FRA/racdb/AUTOBACKUP/2024_05_12/s_1167890123.345.123456789';(路径必须完整、精确,RMAN 不支持通配符) - 成功后立即
ALTER DATABASE MOUNT,而非STARTUP MOUNT——后者会尝试启动所有实例,而此时其他节点可能未就绪 - 若报错
ORA-01102: cannot mount database in EXCLUSIVE mode,说明其他实例仍在运行,需先srvctl stop instance -d racdb -i racdb2
还原数据文件并执行不完全恢复
RAC 数据文件默认都在 ASM 共享磁盘组,还原时无需指定节点本地路径,但要注意 SET UNTIL TIME 必须在 RESTORE DATABASE 前设置,否则 RMAN 会按最新备份还原,跳过时间点控制。
- 运行
SET UNTIL TIME "TO_DATE('2024-05-12 14:23:00','YYYY-MM-DD HH24:MI:SS')"(注意引号和格式,Oracle 对字符串极其敏感) - 执行
RESTORE DATABASE;—— 此步只还原数据文件,不应用归档 - 接着
RECOVER DATABASE;—— RMAN 自动扫描所有归档位置(包括 +FRA 和 +DATA 归档目录),应用日志至设定时间点 - 如果遇到
RMAN-06054: media recovery requesting unknown log,说明归档缺失,需检查V$ARCHIVED_LOG视图确认对应时间范围内的归档是否全部存在于 ASM 中
打开数据库并验证节点状态
不完全恢复完成后,OPEN RESETLOGS 会重置日志序列并生成新 incarnation,这是不可逆操作。RAC 下尤其要避免只在一个节点执行,否则其他节点无法加入。
- 在已挂载的节点执行
ALTER DATABASE OPEN RESETLOGS; - 随即用
srvctl start instance -d racdb -i racdb2启动第二个实例(注意:不是startup,而是用 srvctl) - 登录后立刻查
SELECT INST_ID, STATUS FROM GV$INSTANCE;,确认两个实例都为OPEN - 检查
SELECT NAME, IS_RECOVERY_DEST_FILE FROM V$RECOVERY_FILE_DEST;,确保 FRA 路径仍指向共享 ASM 组,避免误切到本地路径导致下次备份失败
RAC 时间点恢复最易被忽略的是归档日志的跨节点可见性——哪怕 ASM 路径正确,如果某节点的 LOG_ARCHIVE_DEST_1 指向了本地目录,该节点产生的归档就不会被其他节点的 RMAN 识别。恢复前务必统一检查所有实例的归档配置。


















