坏块的解决办法

写的比较片面目前 今天遇到坏块了 主要原因是重启数据库的时候用了shutdown abort造成,该块是是位于para_cell_w表上

解决方法是跳过这个坏块重建表,想到了用exp导出数据但发现会报错,所以用了两种方法 1.找到该坏块的最低的rowid,找到这个块的后一个块最低rowid 这样根据rowid把不在坏块上的数据搞出来建立表就可以了:

 

1 alter session set events='10231 trace name context forever,level 10';

  

    这个命令可以跳过坏块建表

 

   create table para_cell_w_bak as select * from para_cell_w;

 

 

2

      The "LOW_RID" is the lowest rowid INSIDE the corrupt block:

 

       SELECT dbms_rowid.rowid_create(1,<DATA_OBJECT_ID>,<RFN>,<BL>,0) LOW_RID from DUAL;

 

      The "HI_RID" is the first rowid AFTER the corrupt block:

 

       SELECT dbms_rowid.rowid_create(1,<DATA_OBJECT_ID>,<RFN>,<BL>+1,0) HI_RID  from DUAL;

   

It is now possible to use CREATE TABLE AS SELECT or INSERT ... SELECT
   to get data without accessing the corrupt block using a query of the
   form:

 

 CREATE TABLE salvage_table AS
 SELECT /*+ ROWID(A) */ * FROM <owner.tablename> A
 WHERE rowid < '<low_rid>'
 ;

 INSERT INTO salvage_table 
 SELECT /*+ ROWID(A) */ * FROM <owner.tablename> A
 WHERE rowid >= '<hi_rid>'

 

 

 

  SELECT dbms_rowid.rowid_create(1,'600613',20,648278,0) LOW_RID
  from DUAL;  

 AACSolAAUAACeRWAAA
  
   SELECT dbms_rowid.rowid_create(1,'600613',20,648279,0) HI_RID
  from DUAL; 

 AACSolAAUAACeRXAAA

 

 

即将导出指定的表通过常规路径...
. . 正在导出表                     PARA_CELL_W
EXP-00056: 遇到 ORACLE 错误 1578
ORA-01578: ORACLE 数据块损坏 (文件号 20, 块号 648278)
ORA-01110: 数据文件 20: '/oradata4/wcdma/WCDMA_DATA06.dbf'
导出成功终止, 但出现警告。

 

根据dba_objects查看obj_id

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值