Oracle 老熊 数据恢复案例集

Oracle 老熊 数据恢复案例集

来源:老熊 (Laoxiong) / laoxiong.net 适用版本:Oracle Database 全版本 文档版本:v1.0 / 2026-07-22


1. 关于老熊

老熊,Oracle ACE,国内著名数据库恢复专家[1]。

  • 擅长数据恢复、块损坏、内部机制
  • 大量实战案例
  • 深入数据块结构

2. 老熊恢复理念

2.1 核心原则

- 不要慌张
- 保护现场
- 备份优先
- 工具辅助
- 慎重操作

2.2 步骤

1. 评估损失
2. 保护现场
3. 备份当前状态
4. 分析根因
5. 选择恢复方案
6. 执行
7. 验证

3. 案例 1:DROP TABLE 恢复

3.1 现象

- 误 DROP TABLE
- 无备份
- 紧急

3.2 老熊方案:Flashback

SELECT * FROM recyclebin;
FLASHBACK TABLE emp TO BEFORE DROP;

3.3 注意

- recyclebin 未清空
- SYS 对象不可
- 评估

详细见:Oracle Flashback Table 详解


4. 案例 2:TRUNCATE 恢复

4.1 现象

- 误 TRUNCATE TABLE
- 无备份
- 紧急

4.2 老熊方案

- Flashback Database(如有)
- 或工具恢复(UNDO)
- 或第三方工具

4.3 Flashback Database

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
ALTER DATABASE OPEN RESETLOGS;

4.4 注意

- 影响全库
- 评估
- 备份优先

5. 案例 3:数据文件丢失

5.1 现象

- 数据文件被误删
- ORA-01116
- ORA-01110

5.2 老熊方案

- 有备份:RMAN 恢复
- 无备份:跨文件系统恢复(lsof)

5.3 lsof 恢复

# 进程仍打开文件
lsof | grep deleted
# 找到 PID/FD
cp /proc/PID/fd/FD /u01/oradata/users01.dbf

5.4 RMAN 恢复

RMAN> SQL 'ALTER DATABASE DATAFILE 5 OFFLINE';
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
RMAN> SQL 'ALTER DATABASE DATAFILE 5 ONLINE';

6. 案例 4:Redo Log 丢失

6.1 现象

- Redo Log 被删
- ORA-00312
- ORA-00313

6.2 老熊方案

- INACTIVE:重建
- ACTIVE:不完全恢复
- CURRENT:复杂恢复

6.3 INACTIVE

ALTER DATABASE CLEAR LOGFILE GROUP 3;

6.4 ACTIVE/CURRENT

-- 不完全恢复
STARTUP MOUNT;
RECOVER DATABASE UNTIL CANCEL;
ALTER DATABASE OPEN RESETLOGS;

6.5 老熊警告

- RESETLOGS 丢数据
- 最后手段
- 联系 Oracle Support

7. 案例 5:控制文件丢失

7.1 现象

- 控制文件丢失
- ORA-00205

7.2 老熊方案

- 有备份:RMAN 恢复
- 有 trace:重建
- 无:复杂重建

7.3 RMAN

RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;

详细见:Oracle Eygle 控制文件恢复实战


8. 案例 6:SYSTEM 损坏

8.1 现象

- SYSTEM 表空间损坏
- 数据库无法启动

8.2 老熊方案

- RMAN 恢复
- 不完全恢复
- 评估

8.3 恢复

RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;

8.4 注意

- 严重
- 备份关键
- 联系 Support

9. 案例 7:UNDO 损坏

9.1 现象

- UNDO 表空间损坏
- ORA-00600
- 事务失败

9.2 老熊方案

- 新建 UNDO
- 切换
- 隐含参数(紧急)

9.3 新建

CREATE UNDO TABLESPACE undotbs2 
  DATAFILE '/u01/oradata/undotbs2.dbf' SIZE 1G;
ALTER SYSTEM SET undo_tablespace=undotbs2;
-- 删除旧的
DROP TABLESPACE undotbs1 INCLUDING CONTENTS;

9.4 隐含

- _corrupted_rollback_segments
- 紧急
- 联系 Support

10. 案例 8:ORA-00600

10.1 现象

- ORA-00600
- 内部错误
- 实例崩溃

10.2 老熊方案

- 收集 trace
- 查看参数
- 联系 Oracle Support
- 临时 workaround

10.3 收集

# alert log
# trace 文件
# ORA-00600 参数

10.4 处理

- Patch
- 隐含参数
- 绕过

11. 老熊恢复工具

11.1 内置

- RMAN
- Flashback
- DBMS_REPAIR
- BBED(高级)

11.2 OS

- lsof
- dd
- debugfs

11.3 第三方

- ODUL(老熊工具)
- AUL
- DUL

12. BBED

12.1 作用

- Block Browser and Editor
- 块级编辑
- 高级

12.2 老熊警告

- 危险
- 仅最后手段
- 联系 Support

12.3 典型用途

- 修改块 SCN
- 修复块头
- 数据抢救

13. 恢复原则

13.1 老熊强调

1. 备份优先
2. 保护现场
3. 评估损失
4. 慎重操作
5. 验证

13.2 顺序

- Flashback 优先
- RMAN 次之
- 工具最后
- BBED 极端

13.3 文档

- 记录操作
- 评估
- 总结

14. 预防

14.1 备份

- RMAN 定期
- 多副本
- 异地
- 验证

14.2 Flashback

- Database
- Table
- Archive

14.3 监控

- alert log
- 块检查
- VALIDATE

14.4 权限

- 最小权限
- 审核
- 培训

15. 最佳实践

  1. 备份:定期
  2. 验证:恢复测试
  3. Flashback:启用
  4. 保护现场:不慌
  5. 评估:损失
  6. 慎重:操作
  7. 工具:辅助
  8. 文档:记录
  9. 演练:恢复
  10. Support:联系

16. 参考资料

[1] 老熊, “数据恢复案例”, https://www.laoxiong.net [2] Oracle Database Backup and Recovery User’s Guide 19c