想象你有一天,你的ORACLE数据库直接垮掉,没有任何征兆,纵然你有良好的习惯,定期备份。可是,如果备份文件不起作用?我的天,不能想象。看一下以下几个苛刻的情况吧。
- 完全丢失系统表空间
- 系统表空间有坏块
- 表空间被删除,但数据文件还存在
- 表被删除后,马上停止操作,空间未被重用
- 表被清空(Truncate)后马上停止操作,空间未被重用
- 一个表空间丢失了部份文件,或文件中有坏块,无法自我修复
- Oracle ASM存贮损坏,或Oracle ASM磁盘损坏
- 其他无法正常打开数据库或无法查询数据的情况
AUL,你值得拥有。
以下是事件还原记录.
1 下载AUL,[这里](链接: https://pan.baidu.com/s/15EGkTOfTcP5Ft_lpFskXqA) 提取码: ab49
2 解压aul6.zip,在aul6.exe同级目录下建两个文件,1.cfg和2.cfg,1.cfg中使用的两个dbf是oracle系统的dbf,2.cfg中使用的dbf是你的表空间数据库中存放数据的dbf,其不含有表名/结构等信息,仅存放裸数据。
1.cfg
2.cfg
Paste_Image.pngDBF文件说明
dbf文件主要分类:
system01.dbf:记录系统运行信息,包含所有数据库字典,PL/SQL程序代码及其他系统信息
undotbs01.dbf:存放回退信息,即DML操作后的旧数据信息
sysaux01.dbf:system文件的辅助文件,存放支持oracle系统活动的多种工具如logminer
users01.dbf:新建用户未指定存储空间是,默认数据存放在该文件中
3 解压dbf文件头信息
3.1 运行aul6.exe,自动进入cmd命令行模式。
3.2 输入命令:open 1.cfg,回车,正常情况,系统会如下显示:
3.3 依次输入下列命令,每输完一条命令,回车执行:
unload table user$;
unload table obj$;
unload table tab$;
unload table col$;
3.4 完成之后,会产生如下四个文件
里面有你想恢复的用户,表等信息。比如我们找到的用户为test。
3.5 生成待解压的执行脚本,执行命令:open 2.cfg,回车,正常情况,效果应与打开1.cfg时效果相同,输出数据块大小、数量等信息。
4 解压数据库表结构,数据信息
执行命令:list table test to test.txt;回车,生成所有待导出数据表脚本,此处test即数据表的用户名。在aul6.exe同级目录下找到test.txt,正常情况该文件大小不为0,打开,找到待恢复的数据表,把其它记录(大多为系统表)全部删除,保存,将文件扩展名改为sql。如下图:
5 执行命令:@test.sql; 执行完后
Paste_Image.png这个就是解压之后的数据表,其中以_sqlldr.ctl结尾的是描述表结构信息,以_syntax.sql结尾的就是创建表的脚本,以txt结尾的就是这个表的数据(这个很关键 )
6 恢复数据
6.1 打开plsql,连接一个目标数据库,执行所有以_syntax.sql 结尾的文件,先创建表.确认创建OK之后查看左边PL/SQL的菜单,相关表有没有真正创建成功。
6.2 使用oracle自带的sqlldr命令装载文本数据,新开cmd窗口,将路径切换到aul6.exe同级目录下,执行命令:
sqlldr test/123456@orcl control=C:\aul6\TEST_TABLE_sqlldr.ctl
如果有多个表,就重复多次,只是表名不一样了。
当你遇到开头的极端情况(很不幸,我是其中的一员),并且没有有效备份(客户有备份动作,备份不起作用的情况也遇到过)用来恢复数据时, AUL(MyDUL)往往是你最后的机会. 他们的一直坚持的原则就是“拯救数据,帮助客户”!谢谢你,AUL.
网友评论