rman增量备份能绕过归档丢失,是因为它不依赖归档日志而基于scn构建新数据快照:从备库最小checkpoint_change#(取current_scn、x$kcvfh.fhscn、v$datafile_header中三者最小值)开始备份变更块,跳过中断的归档链,直接将缺失更新打包恢复,从而修复gap。
为什么rman增量备份能绕过归档丢失
物理备库卡在 gap 不是因为“没日志”,而是因为恢复链断了:mrp 进程只认连续归档,一旦 select * from v$archive_gap 返回结果,它就停住不动。rman 增量备份不依赖归档日志本身,而是基于 scn 构建一个“跳过中间段”的新数据快照——只要备库当前数据文件的最小 checkpoint_change# 可查,就能从那个点开始做增量,把缺失归档覆盖的变更直接打包进去。
备库上必须先停掉MRP并确认最低SCN
不取消应用就查SCN,结果不可靠;不查对最低SCN就做备份,可能漏掉某个数据文件的旧状态。常见错误是只查 CURRENT_SCN,但实际应取三个来源的最小值:
SELECT CURRENT_SCN FROM V$DATABASESELECT MIN(fhscn) FROM x$kcvfhSELECT MIN(f.fhscn) FROM x$kcvfh f, v$datafile d WHERE f.hxfil = d.file# AND d.enabled != 'READ ONLY'
这三个值中最小的那个,才是增量起点。如果只用 CURRENT_SCN,而某数据文件 checkpoint 滞后(比如只读表空间未更新),后续恢复会报 ORA-01157: cannot identify/lock data file。
主库执行增量备份时的关键参数
备份命令看着简单,但漏掉任一参数都可能让备库无法识别:
- 必须用
BACKUP INCREMENTAL FROM SCN <scn> DATABASE</scn>,不能用LEVEL 1—— 后者依赖上次 LEVEL 0,而备库没有这个上下文 -
FORMAT路径要可写且空间充足;DB_RECOVERY_FILE_DEST不够大会导致控制文件自动备份失败,进而影响后续新控制文件生成 - 务必加
TAG,例如TAG 'FORSTANDBY_20260625',方便在备库用CATALOG精确定位
示例:RMAN> BACKUP INCREMENTAL FROM SCN 1768269 DATABASE FORMAT '/u01/bak/inc_%U' TAG 'FORSTANDBY_20260625';
备库恢复阶段最容易忽略的两件事
很多人传完备份、注册完就直接 RECOVER DATABASE NOREDO,结果报错退出。真正卡点在这两个地方:
- 恢复前必须
SHUTDOWN IMMEDIATE→STARTUP MOUNT,不能在 OPEN 状态下操作;否则 RMAN 会拒绝RECOVER DATABASE - 增量恢复后,必须用主库新生成的 standby 控制文件替换旧的——不是简单拷贝,而是用
RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY生成,再cp过去,否则ALTER DATABASE RECOVER MANAGED STANDBY DATABASE会因控制文件中RESETLOGS_ID不匹配而失败
最后一步重启 MRP 前,别忘了验证 V$ARCHIVED_LOG.RESETLOGS_ID 和 V$DATABASE.RESETLOGS_ID 是否一致——这是所有跨库操作里最常被跳过的校验。











