oracle 11g物理备库不支持真正的自动增量恢复,所谓“自动”仅指通过fal参数配置实现归档gap的自动检测与拉取(日志存在时),而归档丢失时必须人工执行六步增量修复流程:创建备库控制文件、主库增量备份、传输文件、备库mount、rman注册恢复、重启mrp。
oracle 11g 物理备库本身不支持“自动增量恢复”——rman 增量备份只是修复 gap 的手段,不是持续运行的自动机制。所谓“自动”,实际是指通过合理配置让 gap 被及时发现、快速触发人工干预流程,而非后台默默完成增量同步。
为什么不能真自动:增量恢复必须手动介入
物理备库的恢复链依赖归档日志连续性。ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 只能应用已接收的归档,无法跨 GAP 自动拉取缺失 SCN 区间的数据。一旦出现归档丢失(比如 FAL[client]: Failed to request gap sequence),MRP 进程会卡住并报错,必须人工执行以下操作:
- 在备库停掉 MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 查出最小可用 SCN(
SELECT min(fhscn) FROM x$kcvfh或SELECT CURRENT_SCN FROM V$DATABASE) - 在主库用 RMAN 做
BACKUP INCREMENTAL FROM SCN <scn> DATABASE</scn> - 传输备份集 + 新控制文件到备库
- 在备库 mount 状态下注册备份、恢复、重启 MRP
整个过程无标准自动化脚本支撑,Oracle 11g 没有内置调度器或事件触发器来串联这些步骤。
让 GAP 修复“尽可能快”的关键配置
虽然不能全自动,但可通过以下配置大幅缩短人工响应时间、避免二次 GAP:
-
LOG_ARCHIVE_DEST_STATE_2=ENABLE(确保归档传输不被意外 disable) -
FAL_SERVER和FAL_CLIENT必须设为有效 TNS 别名(否则FAL[client]错误不会触发任何重试) -
CONTROL_FILE_RECORD_KEEP_TIME≥ 14(默认 7 天太短,GAP 若超过此值,备库无法反查主库缺失哪些归档) - 主库开启
CONFIGURE CONTROLFILE AUTOBACKUP ON;,且DB_RECOVERY_FILE_DEST有足够空间(避免增量备份时找不到最近的 controlfile snapshot) - 备库定期检查
V$ARCHIVE_GAP(非空即表示 GAP 存在,可写监控脚本告警)
增量备份时最容易踩的坑
主库执行 BACKUP INCREMENTAL FROM SCN <n> DATABASE</n> 前,务必确认:
- SCN 必须 ≤ 备库当前
min(fhscn),不能用CURRENT_SCN直接填——后者可能已包含未传到备库的新事务 - 备份路径需有足够空间,且备库能直接 scp 或 nfs 访问;Windows 下注意路径斜杠方向和空格(如
'C:\backup\%U'需加双引号) - 若主库在此 SCN 后新增过数据文件(
ALTER TABLESPACE ADD DATAFILE),增量备份必须包含它,否则备库恢复时报ORA-01157: cannot identify/lock data file - 不要漏掉
ALTER DATABASE CREATE STANDBY CONTROLFILE AS ...——旧控制文件无法识别增量备份中的新数据块头
备库启动恢复前的强制检查项
把增量备份集拷到备库后,别急着 RESTORE,先验证三件事:
- 备库是否处于
MOUNT状态(OPEN READ ONLY下无法恢复) - RMAN 中是否已
CATALOG START WITH '/path/to/backup';(否则LIST BACKUP看不到新备份) - 执行
RECOVER DATABASE NOREDO;前,确认输出里没有datafile <n> needs media recovery</n>以外的报错(比如 control file version mismatch)
最后一步 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT; 启动 MRP 前,建议先 SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# DESC; 确认最新归档已应用完毕——否则可能覆盖刚恢复的增量块。











