Oracle RMAN 不完全恢复详解
Oracle RMAN 不完全恢复详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
RMAN 不完全恢复将数据库恢复到过去某点[1]:
2. 类型
2.1 时间点
RUN {
SET UNTIL TIME "TO_DATE('2026-07-21 10:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
2.2 SCN
RUN {
SET UNTIL SCN 1234567;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
2.3 SEQUENCE
RUN {
SET UNTIL SEQUENCE 123 THREAD 1;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
2.4 RESTORE POINT
RUN {
SET UNTIL RESTORE POINT 'before_upgrade';
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
3. RESETLOGS
3.1 必要性
- 不完全恢复后
- 重置 Redo 日志
- 新的 Incarnation
3.2 操作
ALTER DATABASE OPEN RESETLOGS;
3.3 验证
SELECT resetlogs_change#, resetlogs_time, incarnation#
FROM v$database;
4. Incarnation
4.1 概念
- RESETLOGS 创建新 Incarnation
- 数据库版本
4.2 查看
SELECT incarnation#, resetlogs_change#, status
FROM v$database_incarnation;
4.3 切换
-- 重置到旧 Incarnation
STARTUP MOUNT;
RESET DATABASE TO INCARNATION 2;
RESTORE DATABASE;
RECOVER DATABASE UNTIL ...;
ALTER DATABASE OPEN RESETLOGS;
5. 表空间 TSPITR
5.1 概念
- 表空间级时间点恢复
- 不影响其他表空间
5.2 命令
RMAN> RECOVER TABLESPACE users
UNTIL TIME "TO_DATE('2026-07-21 10:00:00', 'YYYY-MM-DD HH24:MI:SS')"
AUXILIARY DESTINATION '/tmp/aux';
详细见:Oracle TTS 传输表空间详解。
6. 表级恢复
6.1 RMAN Table Recovery(12c+)
RMAN> RECOVER TABLE scott.emp
UNTIL TIME "SYSDATE-1"
AUXILIARY DESTINATION '/tmp/aux'
REMAP TABLE scott.emp:scott.emp_rec;
6.2 优势
- 不影响全库
- 单表恢复
- 重映射
7. 应用场景
7.1 误操作
- 误 DROP TABLE
- 误 TRUNCATE
- 误 UPDATE/DELETE
- 恢复到误操作前
7.2 大事务错误
- 错误的大批量更新
- 恢复到事务前
7.3 升级失败
- 升级前 RESTORE POINT
- 升级失败回退
7.4 块损坏
- 恢复到损坏前
8. 完整流程
8.1 准备
-- 关闭
SHUTDOWN IMMEDIATE;
-- 启动 MOUNT
STARTUP MOUNT;
8.2 恢复
RUN {
SET UNTIL TIME "TO_DATE('2026-07-21 10:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
8.3 打开
ALTER DATABASE OPEN RESETLOGS;
8.4 验证
SELECT open_mode, log_mode, resetlogs_time
FROM v$database;
8.5 备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
9. 限制
9.1 数据丢失
- RESETLOGS 后点之后数据丢失
- 需要重新同步
9.2 备份依赖
- 需要恢复点之前的备份
- 归档日志完整
9.3 时间
- 恢复时间长
- 全库
10. 与 Flashback 对比
10.1 Flashback Database
- 快(分钟级)
- 需启用 Flashback
- FRA 空间
- 时间范围内
10.2 RMAN PITR
- 慢(小时级)
- 需备份
- 任意时间
- RESETLOGS
详细见:Oracle Flashback Database 详解。
11. 常见坑与排错
11.1 ORA-01547
- RESETLOGS 警告
- 检查恢复
11.2 ORA-19809
- FRA 满
- 增大 FRA
11.3 备份不足
- 没有恢复点前备份
- 检查 LIST BACKUP
12. 最佳实践
- RESTORE POINT:关键操作前
- 归档完整:保留
- 备份充足:定期
- 测试:演练
- RESETLOGS 后:立即备份
- Incarnation:管理
- 时间精确:避免数据丢失
- 监控:归档
- 文档:流程
- 回退:预案
13. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c, “Performing Incomplete Recovery” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/