Oracle 恢复实战案例
Oracle 恢复实战案例
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
数据库恢复实战案例[1]:
场景:
- 数据文件损坏
- 控制文件损坏
- Redo Log 损坏
- 误操作
- 实例失败
详细见:Oracle RMAN 备份恢复。
2. 数据文件损坏
2.1 场景
- 磁盘损坏
- 文件被删
- ORA-01157 / ORA-01110
2.2 恢复
-- 1. 检查
SELECT file#, status, name FROM v$datafile;
-- 2. OFFLINE
ALTER DATABASE DATAFILE 5 OFFLINE;
-- 3. 恢复
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
-- 4. ONLINE
ALTER DATABASE DATAFILE 5 ONLINE;
3. SYSTEM 数据文件损坏
3.1 严重
- 系统表空间
- 必须关闭
3.2 恢复
RMAN> SHUTDOWN ABORT;
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATAFILE 1;
RMAN> RECOVER DATAFILE 1;
RMAN> ALTER DATABASE OPEN;
4. 控制文件损坏
4.1 单个
-- 用好的覆盖
!cp /u02/oradata/control02.ctl /u01/oradata/control01.ctl
STARTUP;
4.2 全部
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
详细见:Oracle 控制文件管理详细。
5. Redo Log 损坏
5.1 INACTIVE
ALTER DATABASE CLEAR LOGFILE GROUP 3;
-- 或
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;
5.2 ACTIVE / CURRENT
-- 严重
-- 需要介质恢复
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE UNTIL CANCEL;
SQL> ALTER DATABASE OPEN RESETLOGS;
详细见:Oracle Redo 日志配置与管理。
6. 误操作
6.1 误 DELETE
-- Flashback Query
SELECT * FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
-- 恢复
INSERT INTO employees
SELECT * FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR)
WHERE id IN (1, 2, 3);
6.2 误 DROP TABLE
-- 检查回收站
SHOW RECYCLEBIN;
-- 恢复
FLASHBACK TABLE employees TO BEFORE DROP;
-- 重命名
FLASHBACK TABLE employees TO BEFORE DROP RENAME TO employees_restored;
6.3 误 TRUNCATE
- 不能 Flashback Table
- Flashback Database
- 或 PITR
6.4 误 DROP USER
- Flashback Database
- 或 PITR
- 或导入备份
7. 实例失败
7.1 崩溃
- 掉电
- 实例崩溃
- SMON 自动恢复
7.2 启动失败
-- 1. 检查告警
SHOW PARAMETER diagnostic_dest;
-- 2. 数据文件状态
SELECT file#, status, fuzzy, checkpoint_change#
FROM v$datafile_header;
-- 3. 恢复
RECOVER DATABASE;
ALTER DATABASE OPEN;
8. 介质失败
8.1 全部磁盘
- 全部数据文件丢失
- 备份恢复
8.2 恢复
RMAN> STARTUP NOMOUNT;
RMAN> SET DBID 1234567890;
RMAN> RESTORE SPFILE FROM AUTOBACKUP;
RMAN> STARTUP NOMOUNT FORCE;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
9. 不完全恢复
9.1 时间点
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> RUN {
SET UNTIL TIME "TO_DATE('2026-07-21 15:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
RMAN> ALTER DATABASE OPEN RESETLOGS;
9.2 取消
RMAN> RECOVER DATABASE UNTIL CANCEL;
SQL> ALTER DATABASE OPEN RESETLOGS;
9.3 SCN
RMAN> RUN {
SET UNTIL SCN 1234567;
RESTORE DATABASE;
RECOVER DATABASE;
}
10. 块损坏
10.1 RMAN
RMAN> RECOVER DATAFILE 5 BLOCK 100, 101;
RMAN> RECOVER CORRUPTION LIST;
10.2 DBMS_REPAIR
EXEC DBMS_REPAIR.ADMIN_TABLES('REPAIR_ADMIN', 1, 1, 'USERS');
EXEC DBMS_REPAIR.CHECK_OBJECT('SCOTT', 'EMPLOYEES', CORRUPT_INFO => 'REPAIR_ADMIN');
EXEC DBMS_REPAIR.FIX_CORRUPT_BLOCKS('SCOTT', 'EMPLOYEES', ...);
EXEC DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('SCOTT', 'EMPLOYEES', 1);
11. 表级恢复(12c+)
RMAN> RECOVER TABLE scott.employees
UNTIL TIME "..."
AUXILIARY DESTINATION '/u01/aux'
REMAP TABLE scott.employees:employees_recovered;
12. PDB 恢复
12.1 PDB 完全
RMAN> ALTER PLUGGABLE DATABASE hrpdb CLOSE;
RMAN> RESTORE PLUGGABLE DATABASE hrpdb;
RMAN> RECOVER PLUGGABLE DATABASE hrpdb;
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN;
12.2 PDB PITR
RMAN> RECOVER PLUGGABLE DATABASE hrpdb
UNTIL TIME "..."
AUXILIARY DESTINATION '/u01/aux';
13. Data Guard Failover
13.1 失败主库
- 主库失败
- 备库变主
13.2 操作
-- 备库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
ALTER DATABASE OPEN;
14. 恢复流程
14.1 评估
1. 故障类型
2. 影响范围
3. RTO / RPO
4. 备份可用
14.2 方案
1. Flashback(最快)
2. RMAN 恢复(标准)
3. 重建(最后)
14.3 验证
1. 数据完整性
2. 业务测试
3. 性能评估
14.4 文档
1. 故障原因
2. 恢复过程
3. 改进措施
15. 常见错误
15.1 ORA-01113
- 文件需要恢复
- RECOVER DATAFILE
15.2 ORA-01589
- RESETLOGS / NORESETLOGS
- 不完全:RESETLOGS
15.3 ORA-01194
- 文件需要更多恢复
- 归档缺失
15.4 ORA-27046
- 文件大小错误
- 介质问题
16. 最佳实践
- Flashback 优先:快
- RMAN 标准:可靠
- 测试环境验证:可行
- 业务低峰:影响小
- 数据完整检查:质量
- 文档化:流程
- 定期演练:熟练
- 监控告警:及时
- 备份多副本:保护
- 团队培训:能力
17. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/