原主库Failover后无法直接复用,必须重建为新主库的备库;因其SCN、日志序列等已落后,强行OPEN会导致ORA-01113等错误及数据不一致,且可能污染新主库归档流。

原主库在Failover后无法直接复用,必须重建为新主库的备库,否则会引发角色冲突或数据错乱。
为什么原主库不能直接启动就用
Failover完成后,新主库已激活并开始生成新SCN、新归档日志;原主库若仍以旧状态启动,其控制文件和数据文件的SCN、检查点、日志序列号全部落后于新主库,且可能包含未传输/未应用的redo。此时强行打开(ALTER DATABASE OPEN)会导致:
- 报错
ORA-01113: file 1 needs media recovery或ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below - 即使绕过校验强制打开,也会出现数据字典不一致、
V$DATABASE.DATABASE_ROLE显示PRIMARY(但实际不是合法主库) - 若误启归档传输,可能向新主库发送旧日志,污染其归档流
RMAN还原方式的关键步骤与坑点
该方法依赖Failover前存在可用的RMAN全备+归档备份,核心是让原主库“回退到新主库升主那一刻的状态”,再转换为物理备库。容易出错的环节:
-
STANDBY_BECAME_PRIMARY_SCN必须从新主库查,不能从原主库或备份集里猜——原主库已不可信;执行SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE后,RMAN中要用SET UNTIL SCN <scn_value></scn_value>,注意加1(即<scn_value> + 1</scn_value>),否则可能漏掉最后一条切换所需的redo -
RESTORE DATABASE前必须确认原主库处于MOUNT状态,且控制文件是Failover前的旧控制文件(不能用新主库的备份控制文件直接覆盖) -
RECOVER DATABASE阶段若报ORA-00283: recovery session canceled due to errors,大概率是归档日志缺失——需检查V$ARCHIVED_LOG中DELETED = 'NO'且THREAD#匹配的日志是否全部可读,缺失则手动注册:ALTER DATABASE REGISTER PHYSICAL LOGFILE '/path/to/arch_1_90.dbf'
转换为物理备库时的强制同步动作
还原+恢复完成后,必须执行 ALTER DATABASE CONVERT TO PHYSICAL STANDBY,这一步会重写控制文件中的数据库角色和日志历史信息。但注意:
- 该命令只能在
MOUNT状态下执行,且执行后必须重启实例(SHUTDOWN IMMEDIATE→STARTUP MOUNT),否则V$DATABASE仍显示PRIMARY - 执行
ALTER DATABASE OPEN READ ONLY是必要验证步骤:它触发数据字典与控制文件的对齐检查,告警日志中若出现Media recovery required提示,说明恢复不完整,不能跳过继续下一步 - 启用Redo Apply前,务必确认
LOG_ARCHIVE_DEST_n指向的是新主库(而非其他旧地址),尤其一主多备环境,避免日志被错误转发
最易被忽略的是:Failover后原主库的监听器配置、tnsnames.ora 和 listener.ora 中的 GLOBAL_DBNAME 仍指向旧主库名(如 PROD_DGMGRL),若未同步更新为新主库的 db_unique_name_DGMGRL,后续DG Broker或日志传输会静默失败。这个配置不在数据库内,却直接影响恢复链路是否真正打通。


















