oracle 23c中rman不直接提供自动故障转移,但通过与raft复制和data guard broker深度协同,实现restore/recover自动对接raft leader节点、pdb时间点恢复免辅助实例、nologging块自动从备库修复,以及fra空间自适应回收。

Oracle 23c 中 RMAN 的自动故障转移恢复能力
RMAN 本身不直接提供“自动故障转移”,但 Oracle 23c 将 Raft 复制与 Data Guard、RMAN 恢复流程深度协同,使 RMAN 参与的恢复操作更可靠、更少人工干预。关键变化在于:当主库因节点故障不可用时,RMAN 不再需要手动指定新目标库或重建归档路径——只要备库已启用 Raft 复制且处于同步状态,RMAN 的 RESTORE 和 RECOVER 命令就能自动从当前活跃的 Raft leader 节点拉取所需归档日志和数据块。
这背后依赖两个前提:
- RMAN 连接的是 Data Guard Broker 管理的数据库服务名(如
mycdb_dgmgrl),而非固定 IP 或单实例 SID - 目标库控制文件中已通过
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT启用实时应用,并且 Raft 配置中声明了复制因子(如REPLICATION_FACTOR = 3)
若仍用传统方式连接 rman target sys/password@standby1,RMAN 无法感知 Raft 成员变更,故障后命令会报错 ORA-01034: ORACLE not available 或 ORA-12514: TNS listener does not currently know of service requested。
RMAN 支持跨 PDB 时间点恢复(TSPITR)的自动化增强
在 Oracle 23c 中,RECOVER PLUGGABLE DATABASE 命令不再强制要求提前创建辅助实例或手动拷贝辅助控制文件。RMAN 可直接在目标 CDB 内启动内存中辅助实例(in-memory auxiliary instance),完成单个 PDB 的时间点恢复,且自动清理临时文件和进程。
典型误操作是沿用 19c 的脚本习惯,在运行前手动执行 CREATE PFILE FROM SPFILE 或 STARTUP NOMOUNT ——这会导致 RMAN 报错 RMAN-06136: ORACLE error from auxiliary database: ORA-01012: not logged on,因为 23c 的 TSPITR 已跳过该步骤。
正确做法只需三步:
- 确保目标 PDB 处于
MOUNT状态(非 OPEN) - 执行:
RECOVER PLUGGABLE DATABASE pdb1 UNTIL TIME "TO_DATE('2026-09-17 10:00:00','YYYY-MM-DD HH24:MI:SS')" - RMAN 自动调用
DUPLICATE流程,从最近可用备份 + 归档中构建临时恢复环境
注意:该功能仅对启用了本地 UNDO 的 PDB 有效;共享 UNDO 模式下仍需传统辅助实例。
RMAN 对无日志记录块(NOLOGGING)的自动验证与修复
Oracle 23c 的 RMAN 在 RESTORE 后执行 RECOVER 时,会主动扫描所有已还原数据文件中的 NOLOGGING 块范围,并自动触发 VALIDATE DATAFILE 检查。若发现块损坏(如介质故障导致的物理坏块),RMAN 不再等待 DBA 手动运行 BACKUP VALIDATE,而是直接尝试从 Data Guard 物理备库或 Raft 同步副本中拉取完好块(前提是已配置 CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2)。
这个过程默认静默执行,但可通过以下方式确认是否启用:
- 检查 RMAN 输出中是否出现类似
retrieving nologging block from standby via SBT的日志行 - 查询视图:
SELECT * FROM V$RMAN_BACKUP_JOB_DETAILS WHERE STATUS LIKE '%NOL%' AND END_TIME > SYSDATE - 1
若未启用 Data Guard 或 Raft,RMAN 仍会报错 ORA-19599: block corruption detected in datafile,但错误信息末尾会多一行提示:Hint: Enable physical standby or Raft replication for automatic nologging block repair。
闪回恢复区(FRA)与 RMAN 自动空间回收的联动强化
23c 中 FRA 的空间管理逻辑与 RMAN 保留策略绑定更紧。当 FRA 使用率超过 85%(硬阈值),RMAN 不再仅删除 OBSOLETE 备份,而是主动评估哪些备份片可被“临时降级”:例如将 7 天保留窗口内的某次 LEVEL 1 增量备份标记为 EXPIRED,但保留在磁盘上供紧急恢复使用,直到空间压力缓解。
这种行为由隐含参数 _rman_fra_adaptive_cleanup 控制(默认 TRUE),但容易被忽略的坑是:如果 DBA 手动执行 DELETE EXPIRED BACKUP,会强制清除这些“临时保留”的备份片,导致后续 RECOVER DATABASE 失败并报错 RMAN-06023: no backup or copy of datafile found to restore。
建议日常维护只用:DELETE OBSOLETE,并定期检查:LIST EXPIRED BACKUP —— 若输出非空,说明 FRA 正在自适应降级,此时不应人工清理。











