备份恢复 & 迁移14 分钟阅读
Oracle RMAN 备份恢复 100 条命令
RMAN 是 Oracle 数据库物理备份和介质恢复的主要工具。备份记录保存在目标库控制文件中,也可以同步到恢复目录;恢复时,RMAN 根据这些记录查找备份片和归档日志。
2026年9月15日阅读—点赞—收藏—
dba100oraclescenario
100 条命令系列文章专栏
RMAN 是 Oracle 数据库物理备份和介质恢复的主要工具。备份记录保存在目标库控制文件中,也可以同步到恢复目录;恢复时,RMAN 根据这些记录查找备份片和归档日志。
RMAN 是 Oracle 数据库物理备份和介质恢复的主要工具。备份记录保存在目标库控制文件中,也可以同步到恢复目录;恢复时,RMAN 根据这些记录查找备份片和归档日志。
Oracle RMAN 备份恢复架构示意图
备份作业显示成功,只能说明任务执行结束。恢复所需的备份片能否读取、归档是否连续、控制文件能否找到,还得通过交叉检查、恢复校验和实际演练确认。
本文整理了 RMAN 配置、备份、校验、恢复和备份维护常用的 100 条命令,建议收藏备用。
文中以 Linux 和 Oracle Database 19c 为例,路径、DBID、SCN、时间及文件号请根据实际环境修改。
1$ORACLE_HOME/bin/rman target /1$ORACLE_HOME/bin/rman target sys@orcl1$ORACLE_HOME/bin/rman target / catalog rman@rcat1$ORACLE_HOME/bin/rman -version1REPORT SCHEMA;1REPORT SCHEMA AT SCN 123456789;1LIST INCARNATION OF DATABASE;Incarnation 是每次 OPEN RESETLOGS 后形成的数据库分支。做时间点恢复前先确认要使用哪一个分支。
1LIST BACKUP SUMMARY;SUMMARY 适合快速看备份类型和状态;要确认具体备份片和包含的文件,再执行完整的 LIST BACKUP。
1SELECT session_key, input_type, status, start_time, end_time2FROM v$rman_backup_job_details3WHERE status <> 'COMPLETED'4ORDER BY start_time DESC FETCH FIRST 20 ROWS ONLY;作业状态为 COMPLETED 不等于备份一定可恢复,还需要做 RESTORE ... VALIDATE。
1SELECT input_type, status, elapsed_seconds,2 input_bytes_per_sec_display, output_bytes_per_sec_display3FROM v$rman_backup_job_details4ORDER BY start_time DESC FETCH FIRST 20 ROWS ONLY;INPUT_BYTES_PER_SEC 便于比较近期作业速度。突然下降时再看存储、压缩和通道数是否有变化。
1SHOW ALL;SHOW ALL 是修改配置前必须保留的一份现场信息,后续排查备份策略时也靠它。
1SHOW RETENTION POLICY;1# 修改前记录原配置2CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;恢复窗口和冗余度是两种保留策略,设置其中一种会替换另一种。
1# 与恢复窗口二选一,按备份策略设置2CONFIGURE RETENTION POLICY TO REDUNDANCY 2;1CONFIGURE RETENTION POLICY CLEAR;1CONFIGURE CONTROLFILE AUTOBACKUP ON;控制文件自动备份在控制文件丢失时很关键,启用后还要确认保存位置和清理策略。
1CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';1CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;并行度增加会同时增加数据库和存储负载,不要只按 CPU 数量设置。
1CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 32G;MAXPIECESIZE 限制单个备份片大小,不会限制整个备份集的总大小。
1CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR;1BACKUP DATABASE;1BACKUP DATABASE PLUS ARCHIVELOG;PLUS ARCHIVELOG 会在备份前后处理归档日志,使全库备份更容易得到完整的恢复链。
1BACKUP AS COMPRESSED BACKUPSET DATABASE;1BACKUP DATABASE FORMAT '/backup/db_%d_%T_%U.bkp';1BACKUP TABLESPACE users;1BACKUP DATAFILE 4;1BACKUP CURRENT CONTROLFILE;1BACKUP SPFILE;1BACKUP CURRENT CONTROLFILE FOR STANDBY;2BACKUP SPFILE;这条实际备份的是当前控制文件,并按备用控制文件用途生成;SPFILE 仍要另外确认。
1BACKUP AS COPY DATAFILE 4 FORMAT '/backup/users01.dbf';1BACKUP INCREMENTAL LEVEL 0 DATABASE;Level 0 可以作为后续增量备份的基础,但它在 RMAN 中仍属于增量备份,不等同于普通全备。
1BACKUP INCREMENTAL LEVEL 1 DATABASE;差异 Level 1 只包含上一次 Level 0 或 Level 1 之后的变化,备份较小,恢复时需要更多增量链。
1BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;累积 Level 1 包含最近一次 Level 0 以来的变化,备份较大,但恢复链更短。
1BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE;1BACKUP INCREMENTAL LEVEL 0 DATABASE TAG 'WEEKLY_L0';1BACKUP INCREMENTAL LEVEL 1 DATABASE TAG 'DAILY_L1';1BACKUP AS COPY DATABASE FORMAT '/backup/copy/%U';1RECOVER COPY OF DATABASE WITH TAG 'ROLLING_COPY';这条把已有增量应用到镜像副本上。TAG 必须与生成增量时使用的 TAG 一致。
1BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'ROLLING_COPY' DATABASE;它为滚动副本生成下一批增量,本身不会更新镜像副本;更新由上一条 RECOVER COPY 完成。
1LIST BACKUP TAG WEEKLY_L0;1BACKUP ARCHIVELOG ALL;1BACKUP ARCHIVELOG ALL NOT BACKED UP 1 TIMES;NOT BACKED UP 1 TIMES 只选尚未达到一次备份的归档,适合避免重复备份。
1BACKUP ARCHIVELOG FROM TIME 'SYSDATE-1';1BACKUP ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 200 THREAD 1;RAC 环境的归档按线程编号,指定序号范围时不要漏掉其他线程。
1SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';2BACKUP ARCHIVELOG ALL;1LIST BACKUP OF ARCHIVELOG ALL;1SELECT name, space_limit, space_used, space_reclaimable, number_of_files2FROM v$recovery_file_dest;1SELECT file_type, percent_space_used, percent_space_reclaimable, number_of_files2FROM v$flash_recovery_area_usage3ORDER BY file_type;1SHOW ARCHIVELOG DELETION POLICY;1# Data Guard 环境先核对传输与应用状态2CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;Data Guard 环境使用这项策略前,先确认 RMAN 能正确识别备库应用状态。
1LIST BACKUP;1LIST BACKUP OF DATABASE;1LIST BACKUP OF CONTROLFILE;1LIST BACKUP OF SPFILE;1LIST COPY OF DATABASE;1LIST EXPIRED BACKUP;EXPIRED 表示 RMAN 交叉检查时找不到文件,并不等于文件已经从磁盘删除。
1REPORT OBSOLETE;OBSOLETE 由当前保留策略计算。保留策略配置不对,报告结果也会跟着错。
1REPORT NEED BACKUP;1REPORT NEED BACKUP RECOVERY WINDOW OF 7 DAYS;1REPORT UNRECOVERABLE;1VALIDATE DATABASE;VALIDATE DATABASE 会读取数据文件并检查物理损坏,不生成备份。
1VALIDATE CHECK LOGICAL DATABASE;CHECK LOGICAL 还会检查块内逻辑结构,耗时和 I/O 通常高于普通校验。
1VALIDATE DATAFILE 4;1RESTORE CURRENT CONTROLFILE VALIDATE;1RESTORE SPFILE VALIDATE;1RESTORE DATABASE VALIDATE;这里只验证恢复所需备份能否找到和读取,不会真正还原数据库。
1RESTORE ARCHIVELOG ALL VALIDATE;1CROSSCHECK BACKUP;CROSSCHECK 不删除备份,只把找不到的文件标成 EXPIRED。
1CROSSCHECK ARCHIVELOG ALL;1CATALOG START WITH '/backup/' NOPROMPT;CATALOG START WITH 会把目录下识别到的备份登记进 RMAN,异机恢复时常用。
1RESTORE DATABASE PREVIEW;PREVIEW 只列出计划使用的备份和归档,不读取全部内容;下一步可执行 RESTORE DATABASE VALIDATE。
1RESTORE DATABASE PREVIEW SUMMARY;1RESTORE TABLESPACE users PREVIEW;1RESTORE DATAFILE 4 PREVIEW;1LIST FAILURE;Data Recovery Advisor 只在检测到并记录了 failure 时才会给出结果。
1ADVISE FAILURE;1LIST BACKUP OF CONTROLFILE;1SELECT file#, name, checkpoint_change# FROM v$datafile_header ORDER BY file#;1SELECT current_scn FROM v$database;1SELECT name, scn, time, guarantee_flashback_database FROM v$restore_point ORDER BY scn DESC;还原点提供明确的 SCN 和时间。保证还原点还会影响闪回日志的保留和 FRA 空间。
1# 数据库 MOUNT;先完成恢复预演并保存当前状态2RESTORE DATABASE;3RECOVER DATABASE;这两步会真正写回数据文件。执行前数据库应处于正确状态,并确认备份链和归档完整。
1# 表空间离线或数据库 MOUNT;确认影响范围2RESTORE TABLESPACE users;3RECOVER TABLESPACE users;1# 数据文件离线或数据库 MOUNT2RESTORE DATAFILE 4;3RECOVER DATAFILE 4;1# 实例 NOMOUNT;确认 DBID 和备份来源2RESTORE CONTROLFILE FROM AUTOBACKUP;控制文件丢失时通常还需要先设置 DBID,尤其是依赖自动备份查找控制文件时。
1# 实例 NOMOUNT;确认 DBID 和目标路径2RESTORE SPFILE FROM AUTOBACKUP;1# 数据库 MOUNT;时间点按现场填写2RUN {3 SET UNTIL TIME "TO_DATE('2026-09-15 00:00:00','YYYY-MM-DD HH24:MI:SS')";4 RESTORE DATABASE;5 RECOVER DATABASE;6}时间点恢复使用的是数据库时间,先确认时区和目标时间,再用 PREVIEW 检查所需归档。
1# 数据库 MOUNT;SCN 按预演结果填写2RUN {3 SET UNTIL SCN 123456789;4 RESTORE DATABASE;5 RECOVER DATABASE;6}1# 数据库 MOUNT;先核对新路径空间和权限2RUN {3 SET NEWNAME FOR DATAFILE 4 TO '/oradata/ORCL/users01.dbf';4 RESTORE DATAFILE 4;5 SWITCH DATAFILE 4;6 RECOVER DATAFILE 4;7}SET NEWNAME 只指定还原位置,恢复后还要 SWITCH DATAFILE ALL 更新控制文件中的路径。
1# 数据库 MOUNT;先确认副本完整且路径可用2SWITCH DATAFILE 4 TO COPY;切换到副本后,控制文件会把该副本当作当前数据文件;先确认副本的检查点和路径。
1# 仅在不完全恢复成功并确认目标时间点后执行2SQL 'ALTER DATABASE OPEN RESETLOGS';不完全恢复后必须用 RESETLOGS 打开,这会创建新的 incarnation。打开前确认恢复终点正确。
1# 先执行 CROSSCHECK 并检查清单2DELETE NOPROMPT EXPIRED BACKUP;先执行 CROSSCHECK,再删除 EXPIRED 记录。否则 RMAN 可能仍把临时不可见的文件当成丢失。
1# 只清理 RMAN 标记为 EXPIRED 的记录2DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;1# 先核对保留策略、备库和恢复目标2DELETE NOPROMPT OBSOLETE;删除 OBSOLETE 前复核保留策略和恢复目标,Data Guard 环境还要考虑备库需求。
1# 确认备份可读且 Data Guard 不再需要2DELETE NOPROMPT ARCHIVELOG ALL BACKED UP 1 TIMES TO DEVICE TYPE DISK;1# Data Guard 环境先核对应用状态2BACKUP ARCHIVELOG ALL DELETE INPUT;DELETE INPUT 会在备份成功后删除输入归档。空间紧张时常用,但要先确认备库不再需要。
1# 确认文件真实存在且可读2CHANGE BACKUPPIECE '/backup/piece.bkp' AVAILABLE;1# 仅隔离已确认不可用的备份片2CHANGE BACKUPPIECE '/backup/piece.bkp' UNAVAILABLE;1# 确认该记录不再用于任何恢复链2CHANGE BACKUPPIECE '/backup/piece.bkp' UNCATALOG;UNCATALOG 只删 RMAN 记录,不删除磁盘上的文件;以后需要时可以重新 CATALOG。
1# 高风险:确认不完全恢复目标和正确 incarnation 编号2RESET DATABASE TO INCARNATION 2;重置 incarnation 会改变 RMAN 当前使用的恢复分支,只在恢复方案明确时执行。
1# 最后手段:确认备份片损坏且不再需要恢复2DELETE FORCE NOPROMPT BACKUPPIECE '/backup/piece.bkp';FORCE 会绕过部分状态检查。除非备份片确定损坏且不再用于任何恢复,否则不要使用。
恢复前先用 LIST、PREVIEW 和 RESTORE ... VALIDATE 核对所需备份,再确认目标时间点、归档范围和数据文件路径。删除备份或执行 OPEN RESETLOGS 会影响后续恢复链,原配置和当前分支信息要提前保存。

更多数据库运维命令,见 ORA100 · DBA100:
也可以在微信搜索小程序 「三笠的百令册」。