SELECT tablespace_name,
segment_type,
owner,
segment_name
FROM dba_extents
WHERE file_id =
AND between block_id AND block_id+blocks-1;
(2)决定修复方法
假如发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;假如发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;假如有数据库的备份,则恢复数据库的方法来进行修复;假如表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据坏上的记录取出来,然后对这个表进行重建。
(3)用Oracle提供的DBMS_REPAIR包标记出坏块
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');
(4)使用Create table as select命令将表中其它块上的记录保存到另一张表上
create table corrupt_table_bak
as
select * from corrupt_table;
(5)用DROP TABLE命令删除有坏块的表
drop table corrupt_table;
(6)用alter table rename命令恢复原来的表
alter table corrupt_table_bak
rename to corrupt_table;
(7)假如表上存在索引,则要重建表上的索引
文章来源于领测软件测试网 https://www.ltesting.net/