能实现,但必须满足归档开启、平台兼容、版本一致三个硬条件,否则增量恢复会卡在recover database阶段报错;需验证archive log list为archive mode、scn连续、归档路径空间充足,并正确执行level 0+level 1备份及恢复流程。
能实现,但必须满足归档开启、平台兼容、版本一致三个硬条件,否则增量恢复会卡在recover database阶段报错。
确认源库已开启归档且SCN连续
停机时间短的前提是归档日志不中断、SCN链不断。如果源库没开归档,或中间执行过ALTER DATABASE NOARCHIVELOG,后续所有增量备份都不可用。
- 检查命令:
ARCHIVE LOG LIST,输出必须含Database log mode: Archive Mode - 验证SCN连续性:迁移前执行一次
SELECT CURRENT_SCN FROM V$DATABASE;,记录值;迁移当天再查一次,差值不能突变(比如跳涨千万级),否则说明有日志丢失 - 归档路径需有足够空间——
df -h查DB_RECOVERY_FILE_DEST或自定义LOG_ARCHIVE_DEST_1目录,剩余空间建议 ≥ 全库大小的1.5倍
RMAN全量+增量备份的正确组合写法
很多人误以为BACKUP INCREMENTAL LEVEL 0和BACKUP DATABASE等价,其实不然:LEVEL 0 是为增量链打基础,必须显式带上PLUS ARCHIVELOG DELETE INPUT,否则归档堆积会导致目标端恢复失败。
- 全量备份(源库执行):
RMAN> RUN {<br> ALLOCATE CHANNEL c1 DEVICE TYPE DISK;<br> BACKUP INCREMENTAL LEVEL 0 DATABASE FORMAT '/backup/level0_%d_%T_%U.bkp' PLUS ARCHIVELOG DELETE INPUT;<br> BACKUP CURRENT CONTROLFILE FORMAT '/backup/ctl_%d_%T.bkp';<br> RELEASE CHANNEL c1;<br>} - 每日增量(源库执行):
BACKUP INCREMENTAL LEVEL 1 DATABASE FORMAT '/backup/incr_%d_%T_%U.bkp',注意不要加PLUS ARCHIVELOG——归档已在全量时清过,增量只需数据文件变更 - 迁移当日最后一次增量前,先执行
ALTER SYSTEM SWITCH LOGFILE;,确保当前归档完整落盘
目标端恢复时最容易卡住的三个点
恢复不是把文件拷过去就能OPEN,RMAN对路径、权限、参数顺序极其敏感。
-
RESTORE CONTROLFILE后必须立即STARTUP MOUNT,不能NOMOUNT——否则RESTORE DATABASE报错ORA-01102: cannot mount database in EXCLUSIVE mode - 数据文件路径要提前对齐:用
RESTORE DATABASE PREVIEW看RMAN打算恢复到哪,如果目标端路径和源库不一致,得提前在RMAN里用SET NEWNAME重映射,而不是靠DB_FILE_NAME_CONVERT - 应用增量时顺序不能错:
RECOVER DATABASE默认只认最近一次备份集,必须用RECOVER DATABASE FROM TAG 'TAG20260607'明确指定标签,否则可能跳过某次LEVEL 1备份
最后一步OPEN前必做的校验
别急着ALTER DATABASE OPEN RESETLOGS,先确认两件事:
- 执行
SELECT * FROM V$RECOVER_FILE;,结果集必须为空——有记录说明还有文件没恢复完 - 查
V$ARCHIVED_LOG中APPLIED='YES'的最新归档序列号,和源库LIST ARCHIVELOG ALL末尾比对,确保迁移当日的归档全部应用完毕 - 如果数据库含PDB,
RECOVER DATABASE后要额外执行ALTER PLUGGABLE DATABASE ALL OPEN,否则PDB仍处于MOUNTED状态
跨平台迁移时,ENDIAN_FORMAT不一致会导致RESTORE静默失败——哪怕日志没报错,数据文件头也可能是乱码,这点常被忽略。











