************************************************************************************
根据错误提示,数据文件user09.dbf中存在坏块,建议通过下面的步骤1进行确认,
步骤2直接跳过这个坏块。跳过坏块后,这个坏块中存放的数据将会丢失,请确认这部
分数据可以丢失,然后进行步骤2。
************************************************************************************
1. 收集出错表的信息,确认是哪张表。
查询坏块的语句
set tablespace_name format a20
set owner format a10
set segment_name format a20
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 30
and 289883 between block_id AND block_id + blocks - 1;
查询结果:
将会得到如下类似结果,例:
SQL> l
1 SELECT tablespace_name, segment_type, owner, segment_name
2 FROM dba_extents
3 WHERE file_id = 23
4* and 154823 between block_id AND block_id + blocks - 1
SQL> /
TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
--------------- --------------- --------------- ---------------
TSP_INPBILL TABLE INPBILL INP_BILL_DETAIL
2.跳过坏块的语句(跳过这个坏块后,这个坏块上原来存放的数据将不可找回)
execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('INPBILL','INP_BILL_DETAIL');
说明:execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('所有者OWNER','段名SEGMENT_NAME');
SQL> conn / as sysdba;
Connected.
SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('ERP','GL_A_CURRENT_ACCOUNTS');
PL/SQL procedure successfully completed.
3.执行相同的操作,验证是否还会报错。