1.插入数据
2.损坏数据文件
关闭数据库后用Ultredit编辑数据文件,随便更改几个字符.然后启动数据库.
此时如果查询该表,会出现错误,数据块损坏无法读取.
有个内部工具BBED也可以用来编辑数据块的内容
3.使用DBV检查数据文件
dbv检测到坏块.
4.寻求恢复
在这种情况下,如果有备份,需要从备份中恢复
如果没有备份,那么坏块部分的数据肯定要丢失了
在这个时候导出是不允许的:
5.恢复步骤
当然,对于不同的情况需要区别对待
首先你需要检查损坏的对象,使用以下SQL:
如果损失的是数据,ok
我们可以设置内部事件,使exp跳过这些损坏的block
note:
ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10' ;
内部事件,设置在全表扫描时跳过损坏的数据块.
然后我们可以导出未损坏的数据
这时候数据成功导出.
然后我们可以drop table,recreate,然后导入数据
本例中
我们损失了
8192 - 8036 = 156 行数据
完成数据恢复
作者:eygle | English Version 【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明】
链接:http://www.eygle.com/archives/2004/06/oracle_block_recovery.html