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

ORA-01578:Oracle data block corrupted

Posted on 2012-06-29 18:19  徐正柱-  阅读(1935)  评论(0编辑  收藏  举报
ORA-01578:Oracle data block corrupted(file # num,block # num)
  
  产生原因:当ORACLE访问一个数据块时,由于1、硬件的I/O错误;2、操作系统的I/O错误或缓冲问题;3、内存或paging问题;4、ORACLE试图访问一个未被格式化的系统块失败;5、数据文件部分溢出等上述几种情况的一种引起了逻辑坏块或者物理坏块,这时就会报ORA-01578的错误。
  
  解决方式:由于ORACLE只有在访问到有问题的数据文件时才会报错,所以报错的时间有可能会比实际出错的时间要晚,如果ORA-01578出错信息提示数据坏块指向的是用户自己的数据文件,则用以下方法来解决:
  
  如果通过下面的SQL语句查出的坏块出现有索引上,则只需重建索引即可
  
  SQL>Select owner,segment_name,segment_type from dba_extents where file_id=<F> and <B> between block_id and block_id+blocks-1;(<F>和<B>分别是ORA-01578报出的坏块出现的文件号和块号)
  
  如果坏块出现在表上,先用以下语句分析是否为永久性坏块(建议多执行一两次,有助于鉴别数据坏块是永久性的(硬盘上的物理坏块)还是随机性的(内存或硬件错误引起)):
  
  SQL>Analyze table <table_name> validate structure cascade;