博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如何检查数据是否有损坏数据块的问题

Posted on 2013-05-02 12:39  徐正柱-  阅读(583)  评论(0编辑  收藏  举报

ORA-01555: snapshot too old: rollback segment number  with name "" too small 
ORA-22924: snapshot too old

能是大字段的段中数据发生了损坏,可以根据以下步骤测试一下:

 

1、先可以使用如下方法定位损坏的LOB值所在记录的rowid:

create table tbl_corrupted_lob_tmp(corrupted_rowid rowid);  
  
set concat off  
  
declare  
  error_1555 exception;  
  pragma exception_init(error_1555,-1555);  
  num number;  
begin  
  for cursor_lob in (select rowid r, ATTACHMENT_CONTENT from TOP_ATTACHMENT_CONTENT) loop  
    begin  
      num := dbms_lob.instr(cursor_lob.ATTACHMENT_CONTENT, hextoraw ('889911')) ;  
    exception  
      when error_1555 then  
        insert into tbl_corrupted_lob_tmp values (cursor_lob.r);  
        commit;  
    end;  
  end loop;  
end;  
/  


2、根据tbl_corrupted_lob_tmp表中存储的rowid值找到出错记录的rowid

 

3、将对应rowid的记录删除:

     delete top_attachment_content where rowid='xxxxxxx';

 

4、重新导出数据。