+ -
当前位置:首页 → 问答吧 → 如果坏块出现后, 这个有坏块的数据文件最终要怎么处理呢?

如果坏块出现后, 这个有坏块的数据文件最终要怎么处理呢?

时间:2011-09-02

来源:互联网

Version: 8.1.7.4
每日都有备份。

alert log显示有坏块:
Fri Sep  2 17:18:49 2011
ARC1: Beginning to archive log# 4 seq# 1119
Fri Sep  2 17:18:49 2011
ORA-01171: datafile 5 going offline due to error advancing checkpoint
ORA-01122: database file 5 failed verification check
ORA-01110: data file 5: '/u01/prim/datafile/s2.dbf'
ORA-01251: Unknown File Header Version read for file number 5
Fri Sep  2 17:18:49 2011
Completed checkpoint up to RBA [0x45f.2.10], SCN: 0x0002.22b55a96

根据SQL>
SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents
         WHERE file_id = 5 and 2 between block_id AND block_id + blocks - 1;
可以找出segment 并导出。

问题:
导出后  这个有坏块的数据文件怎么处理呢?

我觉得有这几个方案:

1, offline数据文件,
    alter database create datafile '/u01/prim/datafile/s2.dbf' as '/u01/prim/datafile/s2.dbf';
      recover datafile 5;
      online datafile 5;
这个方案可行,但是需要从datafile创建来的所有archived log。但是创建已经几年了,不可能把所有的archived log 都找出来。

2.  全库导出
   删除 有坏块的数据文件
   全库导入
   这个工作量也不小,如果是生产,也很危险。不可能全库重新导入。

3. 通过dba_extent  找出分布在有坏块的数据文件的所有 segment。
   导出。
   然后删除这些segment, 删除有坏块的数据文件。
   重新导入。
   但是生产环境的话  也会波及很多无辜的表,有风险。

请问
如果坏块出现后, 这个有坏块的数据文件最终要怎么处理呢?
一定要重建吗? 有没有简单的修复的。
是生产环境,保险安全的办法
有什么好的方案呢?

作者: lifesunson   发布时间: 2011-09-02

Unknown File Header Version read for file number 5

这是文件头损坏了,要找到原因,看看是硬件原因,仅仅损坏文件头,还是整个文件都有问题。

作者: eygle   发布时间: 2011-09-02