关于 数据坏块 的整理和总结

数据库中表,出现了坏块。对于这个问题,在网上早就有了各种各样的讨论和解决办法,现在总结如下,以希望在关键时刻能用得上:
一、 数据表出现坏块,设置10231事件来进行EXP,然后在IMP的方法
对于这种情况来说,如果没有热备份,或者时间匆忙,来不及从备份中恢复,那么我们只能丢失一部分数据,先尽可能的修复在说了。 一般情况下,出现数据坏块,并不影响数据库的启动(非system 数据库文件损坏),但是一旦我们使用到了相关数据,就会报出类似如下信息的错误:ORA-01578: ORACLE 数据块损坏(文件号4,块号35),我们需要用以下的sql来进行查询,以确保损坏的仅仅是我们数据库中的表的数据:
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id =4 AND 35 between block_id AND block_id + blocks - 1 (注意:如果是TEMP坏,则没有返回值)
这个时候,用dbv来检查文件号为4的数据文件,将会报错误信息;
由于出现坏块,EXP 在这个时候是不能进行的,我们必须设置如下事件,以让数据库在进行FTS的时候绕过数据坏块:
ALTER SYTEM set EVENTS = '100231 trace name context forever, level 10';
再次进行EXP,就可以导出数据了。
二、 用dbms_repair包 exec DBMS_REPAIR.ADMIN_TABLES('REPAIR_TABLE',1,1,'USERS');
exec DBMS_REPAIR.ADMIN_TABLES('ORPHAN_TABLE',2,1,'USERS');
exec dbms_repair.check_object(schema_name => 'SYSTEM',object_name => 'TEST',corrupt_count => cc);
select *from repair_table;
exec dbms_repair.fix_corrupt_blocks(schema_name => 'SYSTEM',object_name => 'TEST',fix_count => cc);
exec dbms_repair.skip_corrupt_blocks(schema_name => 'SYSTEM',object_name => 'TEST',flags => 1);
exec dbms_repair.dump_orphan_keys(schema_name => 'SYSTEM',object_name => 'I_TEST',object_type => 2,
repair_table_name => 'REPAIR_TABLE',orphan_table_name => 'ORPHAN_TABLE',key_count => CC);
exec dbms_repair.rebuild_freelists(schema_name => 'SYSTEM',object_name => 'TEST');

三、 用 9i 的特性:blockrecover 来修复坏块 RMAN > RUN {
BLOCKRECOVER DATAFILE 2 BLOCK 12, 13 DATAFILE 7 BLOCK 5, 98, 99 DATAFILE 9 BLOCK 19;
}
RMAN > RUN {
BLOCKRECOVER DATAFILE 3 BLOCK 2,3,4,5
TABLESPACE sales DBA 4194405, 4194409, 4194412
FROM DATAFILECOPY
}

Rman > RUN {
BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404, 4194405 RESTORE UNTIL TIME 'SYSDATE-2';
}
Rman>run{blockrecover datafile 5 block 11,16 restore until sequence 8505;}
RMAN> blockrecover datafile 2 block 14 from backupset;
四、 用BBED 来修复坏块
五、 数据块损坏后,如何创建索引?
对于一般的索引,我们可以删除掉该索引,然后重建;如果该索引为主键,我们只能先disable该主键,disable后,相关索引也自然没有了,然后我们再重建索引
六、 模拟数据坏块 我们一般用UE、winhex等软件可以来模拟坏块的情况。这些都是windows的情况,在unix的情况下,我们可以通过以下方法来处理: a. dd命令 b. orapatch 命令:
$orapatch open tools001.dbf write
patch>set hex --要用十六进制
patch>display 177 --orapatch以512字节为工作模式,假定想破坏第11个block即为:8k/512*11+1(file header)
patch>find 00400003 --选一个要编辑的点
patch>modify 00400002 --破坏
patch>exit

http://www.itpub.net/showthread.php?s=&threadid=201766&perpage=15&pagenumber=1

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7916042/viewspace-915080/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7916042/viewspace-915080/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值