ORA-01578数据库坏块处理

来源:互联网 发布:哪个编程语言最好学 编辑:程序博客网 时间:2024/05/21 17:38

ORA-01578: ORACLE data block corrupted (file # 4, block # 68198)
通用的oracle数据库检查坏块的语句如下:

                select owner,
                             file_id,
                            segment_name,
                            segment_type,
                            block_id,
                            blocks 
from dba_extents  
where file_id = 4 and 
block_id <= 68198 and (block_id + blocks - 1) >= 68198;
通过这个语句可以查到是数据库的那个对象存在损坏现象;

1:alter session set events='10231 trace name context forever,level 10'; --该语句是允许当前会话对损坏的对象进行查询,查询时遇到坏块会跳过;

2:create table TABLENAME1 as
select * from TABLENAME;--备份可以正常查询到的数据到临时表

3:获取TABLENAME的创建语句;
select dbms_metadata.get_ddl('TABLE','TABLENAME' ) from dual;

4:drop table TABLENAME;

5:恢复数据,
用获取创建源表语句创建表,插入数据
insert into TABLENAME
select * from TABLENAME1;

6:删除临时表,drop table TABLENAME1

推进scn

 alter session set events '10015 trace name adjust_scn level 10';

注:这种修复方式是跳过坏块也就是说会存在数据丢失的风险,如果有备份建议用备份恢复以免造成数据丢失


原创粉丝点击