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;
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. 最佳实践
- 备份:定期
- 验证:恢复测试
- Flashback:启用
- 保护现场:不慌
- 评估:损失
- 慎重:操作
- 工具:辅助
- 文档:记录
- 演练:恢复
- Support:联系
16. 参考资料
[1] 老熊, “数据恢复案例”, https://www.laoxiong.net [2] Oracle Database Backup and Recovery User’s Guide 19c