AUL(MyDUL) Oracle及Oracle ASM数据恢复,原本是想下Windows版本的,这linux 版本的留着备用吧
最近重做系统,忘记备份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同级目录下,执行命令:sqlldr system/admin control=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
140.5M / 09-05
76.4M / 03-25
55M / 06-05
237.9M / 04-13
900.9M / 03-02
96.2M / 07-06
311.2M / 07-06
335M / 07-06
200M / 07-06
413.8M / 07-06
484.7M / 09-27
165.4M / 09-05
353.9M / 06-05
131.8M / 04-13
195.6M / 03-03
45.6M / 09-08
665.2M / 07-06
2.84G / 07-06
93M / 07-06
338.3M / 07-06
1.38G / 07-26
488.3M / 07-16
109.8M / 06-03
142M / 01-08
1.2M / 11-23
548.8M / 04-13
1.6M / 04-13
1.48G / 03-18
646.6M / 03-03
133.7M / 03-03
110.5M / 09-05
33.4M / 09-05
325.8M / 08-12
60M / 04-29
254M / 04-25
659M / 04-23
1M / 12-26
253.4M / 12-08
253M / 12-08
1.19G / 11-16
369M / 09-22
181.5M / 09-22
201.2M / 09-05
488.3M / 07-16
248.9M / 12-08
248.9M / 12-08
100.6M / 03-06
148.9M / 03-06
1.12G / 07-06
1.25G / 07-06
126.7M / 02-04
1.76G / 09-22
1.92G / 04-17
201.5M / 04-13
7.31G / 07-01
94.3M / 07-06
2.48G / 07-06
7.63G / 07-06
1M / 07-06
778.1M / 07-06
561.8M / 07-11
72M / 07-06
548.7M / 07-06
1.00G / 07-06
9.13G / 07-06
126.2M / 07-06
72M / 07-06
105.1M / 07-06
132M / 07-06
132M / 07-06