首先注意要做好系统数据的一个完全备份,把oracle服务停掉,退后完全拷贝oracle文件夹。
下面开始使用AUL恢复数据:
1、导出数据
写配置文件前先查数据库使用到的数据文件
SQL>SELECT FILE#,RFILE#,NAME FROM V$DATAFILE;
我查询结果如下:
FILE# RFILE# NAME
---------- ---------- --------------------------------------------------------------------------------
1 1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10\SYSTEM01.DBF
2 2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10\UNDOTBS01.DBF
3 3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10\SYSAUX01.DBF
4 4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10\USERS01.DBF
5 5 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_BAS_DAT.DBF
6 6 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_BAS_IDX.DBF
7 7 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_FIN_DAT.DBF
8 8 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_FIN_IDX.DBF
9 9 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_INV_DAT.DBF
10 10 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_INV_IDX.DBF
11 11 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_MSC_DAT.DBF
12 12 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_MSC_IDX.DBF
13 13 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_STO_DAT.DBF
14 14 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_STO_IDX.DBF
15 15 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_SYNC_DAT.DBF
16 16 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_SYNC_IDX.DBF
17 17 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_PRESENT_DAT.DBF
18 18 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\ERP_PRESENT_IDX.DBF
19 19 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\WPSALE_DAT.DBF
此次我要恢复的就是WPSALE_DAT.DBF,因为这个文件已经报错损坏了。
写配置文件1.cfg( 写俩个就可以了,因为用的免费的只能打开2个,而且只能打开前521M)
0 0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10\SYSTEM01.DBF
0 0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10\UNDOTBS01.DBF
然后
AUL>open 1.cfg
然后在根据系统表空间生成数据字典
AUL>UNLOAD TABLE USER$;
....
AUL>UNLOAD TABLE OBJ$;
....
AUL>UNLOAD TABLE TAB$;
....
AUL>UNLOAD TABLE COL$;
....
然后在写配置文件2.cfg
0 0 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\WPSALE_DAT.DBF
接着
AUL>open 2.cfg
AUL>list table wpsale to wpsale.txt
这个是生成所有待导出数据库表脚本,然后把 这个wpsale.txt改为wpsale.sql
执行
AUL>@wpsale.sql
执行完后在当前目录下一个表会生成3个文件
T_CONTRAINDICATION.txt 数据文件
T_CONTRAINDICATION_sqlldr.ctl 装载控制文件
T_CONTRAINDICATION_syntax.sql 创建表脚本
好了,数据全部导出来了
2、导入数据
上面我们已经利用AUL导出了数据,现在我们把用户WPSALE删除,并且把对应数据文件删除,然后在重建用户和表空间。先前我有利用以前库把所有表名导出来。
先建表,用excel把所有表处理成 如下样式 @T_ACC_INFO_syntax.sql
@T_AP_ACC_CUST_syntax.sql
。。。。。。。。。。。
保存为name.sql文件,完了后,然后SQL>@name.sql创建完所有的表
然后使用oracle自带的sqlldr装载文本数据
编写SQLLDR脚本如下形式
sqlldr wpsale/wpsale control=T_ACC_INFO_sqlldr.ctl
pause
sqlldr wpsale/wpsale control=T_ACC_PERIOD_sqlldr.ctl
pause
.............................
把上面的做成批处理,加个pause是因为如果有的数据导入需要时间,如果接着执行下面语句会报错,所以加上最后在当前目录下面双击执行该批处理,直到数据导入完成。(如何每俩个中间加pause是有技巧的,首先把所有表导出来,然后给他们按奇数编码,而下面在编相同数目的偶数行,并且偶数行添上内容pause,然后在按序号排序既可);
3、存储过程,函数,触发器,序列从旧库重新导入,并修改至正确值
评论