RMAN 恢复怎么做
RMAN 的完全恢复流程很固定:实例进 mount 状态、RESTORE 还原数据文件、RECOVER 应用归档日志与在线重做,最后 OPEN 打开数据库。需要恢复到过去某个时间点时走不完全恢复,用 SET UNTIL 指定目标,重启时必须带 RESETLOGS——这会开启一个新的数据库化身,之后的备份基于新化身评估。
基本信息
| 适用平台 | Oracle Database 11g 及以上,使用 RMAN 客户端 |
|---|---|
| 前提状态 | 数据库需处于 MOUNT(或 NOMOUNT 配合控制文件恢复)状态 |
| 关键参数 | SET UNTIL TIME / SCN / SEQUENCE 指定不完全恢复目标 |
| RESETLOGS | 不完全恢复后必须用它打开数据库,并开启新化身 |
典型使用场景
- 介质损坏恢复:数据文件丢失或损坏时从备份还原并应用归档
- 误操作回退:用不完全恢复回到误删或批量更新之前的时间点
- 表空间级恢复:只还原受损表空间,减少整体影响面
- 恢复演练:在克隆环境按流程走一遍,验证备份与归档可用
- 控制文件恢复:控制文件全部丢失时用 NOMOUNT 状态先恢复控制文件
完全恢复
完全恢复
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;
-- 恢复前先确认归档日志齐全,缺归档会在 RECOVER 阶段中止
RMAN> LIST ARCHIVELOG ALL;时间点恢复(不完全恢复)
时间点恢复(不完全恢复)
RMAN> STARTUP MOUNT;
RMAN> RUN {
SET UNTIL TIME "TO_DATE('2026-10-12 10:30','YYYY-MM-DD HH24:MI')";
RESTORE DATABASE;
RECOVER DATABASE;
}
RMAN> ALTER DATABASE OPEN RESETLOGS; # 开启新化身,此前的备份需重新评估恢复阶段与观察点
| 阶段 | 做什么 | 异常表现 |
|---|---|---|
| STARTUP MOUNT | 以装载状态启动实例,准备还原 | 无法启动时先排查控制文件与参数文件 |
| RESTORE | 从备份集还原数据文件与控制文件 | 报错通常指向备份集缺失或位置不可达 |
| RECOVER | 应用归档与在线重做日志 | 缺归档会中止,恢复无法推进到目标时间点 |
| OPEN | 打开数据库对外提供服务 | 不完全恢复未加 RESETLOGS 时打开失败 |
| 恢复后核对 | 校验数据文件、表空间与业务数据 | 跳过核对会把不完整状态当作恢复完成 |
RESETLOGS 会开启新的数据库化身:此前备份需要重新评估可用性,执行前先备份控制文件与归档日志,避免后续备份链断裂。
不完全恢复必须以新环境或充分备份为前提:恢复到过去时间点意味着该时间点之后的数据全部放弃,务必先与业务方确认。