csdn 发表于 2015-4-18 23:11:46

oracle数据库:利用AUL工具恢复dbf文件中的数据

问题:最近重做系统,忘记备份oracle中的数据,好在我的数据库文件存放目录不在系统盘,找到数据库文件存放目录,发现一堆dbf文件,现在要从这1G+的文件中恢复我珍贵的两张表的数据。dbf数据文件如下图:



解决方法:

(1)下载aul工具,官网:http://www.mydul.net/,右侧有下载链接,我使用的是AUL6 for Windows,工具体积不大,zip包1.6M,一个exe文件+一个dll。

(2)解压aul6.zip,在aul6.exe同级目录下建两个文件,1.cfg和2.cfg,1.cfg中使用的两个dbf是oracle系统的dbf,2.cfg中使用的dbf是新建数据库中存放数据的dbf,其不含有表名/结构等信息,仅存放裸数据。

1.cfg:

0   0   F:\backup\orcl\SYSTEM01.DBF

0   0   F:\backup\orcl\UNDOTBS01.DBF

2.cfg:

0       0   F:\backup\orcl\DOTR.DBF

(3)运行aul6.exe,自动进入cmd命令行模式。

(4)输入命令:open 1.cfg,回车,正常情况,系统会如下显示:



依次输入下列命令,每输完一条命令,回车执行:

unloadtable user$;

unloadtable obj$;

unloadtable tab$;

unloadtable col$;

执行完毕后,aul6.exe同级目录下会生产四个文件:aulusr.txt, aulobj.txt,aultab.txt, aulcol.txt,每个文件大小均不为0。

(5)打开aulusr.txt,查看以前数据表的用户是否存在,正常结果是存在。若忘记以前数据表的用户名,则打开aulobj.txt,找到你要恢复的数据表表名,该表名的左侧的数字即用户名编号,根据编号在aulusr.txt中找到用户名。如:

Aulobj.txt:57356,62,ACCOUNT_MANAGE,,2,

Aulusr.txt:62,MINI,

待恢复数据表表名为ACCOUNT_MANAGE,用户名为mini。

(6)执行命令:open 2.cfg,回车,正常情况,效果应与打开1.cfg时效果相同,输出数据块大小、数量等信息。

(7)执行命令:list table mini to mini.txt;回车,生成所有待导出数据表脚本,此处mini即数据表的用户名。在aul6.exe同级目录下找到mini.txt,正常情况该文件大小不为0,打开,找到待恢复的数据表,把其它记录(大多为系统表)全部删除,保存,将文件扩展名改为sql。如下图:



(8)执行命令:@mini.sql; 执行完后,aul6.exe同级目录下一个表会生成3个文件,如:

ACCOUNT_MANAGE.txt数据文件

ACCOUNT_MANAGE_sqlldr.ctl装载控制文件

ACCOUNT_MANAGE_syntax.sql创建表脚步

该三个文件大小均不为0,若仅txt文件大小为0,则说明2.cfg中dbf文件选取错误,修改为其它dbf文件,重新执行步骤6及以后步骤(我在此处卡了好久,开始用USERS01.dbf,txt大小为0,改为TEMP01.dbf,还是为0,改为DOTR.dbf,txt中终于有数据了)。此时,可以打开txt和sql文件,验证是否是待恢复的数据。至此,数据已全部导出来了,下面将其导入到当前数据库中。

(9)打开plsql,连接一个数据库,执行ACCOUNT_MANAGE_syntax.sql中脚本,可能会报“exit;为无效语句错误”,无需理会,待所有sql脚步执行完毕,查看plsql左侧树形结构中tables节点下是否生成待恢复的表。

(10)使用oracle自带的sqlldr命令装载文本数据,新开cmd窗口,将路径切换到aul6.exe同级目录下,执行命令:sqlldrsystem/admincontrol=ACCOUNT_MANAGE_sqlldr.ctl;回车,system/admin为你当前数据库的用户名/密码,需与plsql登录时用户名/密码相同。正常情况命令执行结束时会输出逻辑记录计数,表示插入了多少条记录,且在aul6.exe同级目录下生成日志文件account_manage_sqlldr.log,包含执行结果的详细信息。

(11)在plsql中验证待恢复的数据表中数据是否已导入成功,若未成功,则重新操作。

注:

(1)aul,又名mydul,oracle及oracle asm数据恢复工具,官网提供试用版,建议从官网下载,国内站点提供的资源中部分带毒,差点害的我再次重做系统。

(2)dbf文件主要分类:
system01.dbf:记录系统运行信息,包含所有数据库字典,PL/SQL程序代码及其他系统信息
undotbs01.dbf:存放回退信息,即DML操作后的旧数据信息
sysaux01.dbf:system文件的辅助文件,存放支持oracle系统活动的多种工具如logminer
users01.dbf:新建用户未指定存储空间是,默认数据存放在该文件中
example01.dbf:存放示例数据信息

(3)想恢复数据,步骤8很重要,该步骤中生成的txt文件,即是待恢复的裸数据文件,实际上,得到txt数据文件,数据恢复就基本结束了,后续操作不过是再现它的使用状态(将其导入到数据库中)。我在此处卡了好久,开始用USERS01.dbf,txt大小为0,改为TEMP01.dbf,还是为0,改为DOTR.dbf,txt中终于有数据了。在此必须要感谢一位兄长,抱着试一试的态度,我逐次将2.cfg中的dbf文件名替换为其它dbf,直至数据正确生成。试一试的态度 便是他教给我的。

(4)步骤9、10为导入数据方式,如果待恢复的数据表比较多,可以写个脚本,以实现批量导入sql。

参考文献:http://liumanghao.blog.163.com/blog/static/85408220077243382811/
页: [1]
查看完整版本: oracle数据库:利用AUL工具恢复dbf文件中的数据