前段时间数据库故障
600
内部错误导致部分两个
schema
下部分数据丢失,包含普通表
数据和分区表数据。尝试过许多方法都没能恢复回来,最后通过
AUL6
做恢复,现在这次
的恢复做一个简单总结。
(1)
恢复流程
1.1
创建
AUL6
的
cfg
配制文件,
主要包括需要恢复的数据文件
(
必须包括
system.dbf
,
否则即使
AUL6
恢复流程不报错,却不会导出文本数据
)
,格式如下示
:
0
0
D:\AUL_TEST\SUN.DBF
0
0
D:\AUL_TEST\SYSTEM01.DBF
1.2
将
AUL
导出的文本数据通过
oracle
的
sqlloader
装载入与要恢复表结果完全相同
的一张临时表。导出文本格式如下示
:
7369|SMITH|CLERK|7902|1980-12-17 00:00:00|800||20
7499|ALLEN|SALESMAN|7698|1981-02-20 00:00:00|1600|300|30
7521|WARD|SALESMAN|7698|1981-02-22 00:00:00|1250|500|30
7566|JONES|MANAGER|7839|1981-04-02 00:00:00|2975||20
7654|MARTIN|SALESMAN|7698|1981-09-28 00:00:00|1250|1400|30
7698|BLAKE|MANAGER|7839|1981-05-01 00:00:00|2850||30
7782|CLARK|MANAGER|7839|1981-06-09 00:00:00|2450||10
7788|SCOTT|ANAL
YST|7566|1987-04-19 00:00:00|3000||20
7839|KING|PRESIDENT||1981-11-17 00:00:00|5000||10
7844|TURNER|SALESMAN|7698|1981-09-08 00:00:00|1500|0|30
7876|ADAMS|CLERK|7788|1987-05-23 00:00:00|1100||20
7900|JAMES|CLERK|7698|1981-12-03 00:00:00|950||30
7902|FORD|ANAL
YST|7566|1981-12-03 00:00:00|3000||20
7934|MILLER|CLERK|7782|1982-01-23 00:00:00|1300||10
1.3
通过核心主键字段做
minus
找出需要恢复的纪录,插入到新建的另外一张临时表
中,脚本如下示
:
create
table
org_info_temp
as
(select
*
from
org_info_bk
t1
where
t1.org_name
in
(select
t2.org_name from org_info_bk t2 minus(select t3.org_name from org_info t3) ));
1.4
将校对出的丢失数据通过
plsql
导出成
sql
脚本,
然后批量
append
插入到需要恢复
的表中,当然最好事先做个数据库备份
.
1.5
个人感觉此次恢复过程难度不大,
细节很重要,
如果不是分区表,
表数据又很大,
单单
AUL6
导出数据就需要不少时间,还有一个需要注意的东西就是
sqlloader
做批量导入
时的文本格式,由其字段是日期格式的,处理过程中还发现
AUL6
导出文本数据时有时会
漏了表最后几个字段值
(
如果是空的话
).
1.6
最后
,
和大家分享海伦
.
凯勒的一句话
:
一个人要想获得真才实学,
必须自己去攀登奇
峻险峰
.