Oracle 简单描述oracle坏块修复步骤

本文详细介绍了Oracle坏块的修复过程,包括如何确认坏块属于表或索引,以及三种检测坏块的方法:dbv、rman和analyze命令。在有rman备份的情况下,可通过特定步骤抢救受损数据。同时,提供了相关博文链接作为参考。
摘要由CSDN通过智能技术生成

1.确认坏块部分是表还是索引

SELECT owner,segment_name,segment_type,block_id
FROM dba_extents
WHERE block_id <= &block_id
AND block_id + blocks -1 > &block_id
AND file_id = &file_id;
1.1 如果是索引,rebuild 即可

1.2 如果是表

1)有rman备份

rman>blockrecover datafile file# block block#

2) 把受损数据块标记成"software corrupt",oracle在扫描时跳过这些块,然后通过CTAS方法把数据抢救出来

a)把数据块标记成"corrupt"
  如果遇到ORA-1578错误,说明数据块已经被标识为"software corrupt";
  如果遇到ORA-600,就需要使用DBMS_REPAIR包把数据块标识成"software corrupt",这时再扫描到这个数据块时会抛出ORA-1578错误
b)扫描是跳过"software corrupt"数据块
  可以使用dbms_repair.skip_corrupt_blocks跳过坏块
  或者使用10231事件
  可以从视图dba_tables.skip_corrupt字段可以看出表是否设置了这个标志
如果使用CTAS方法重建表,最好是在session、实例级别设置10231事件
如果通过exp方式重建表,则需要在实例级别设置或者使用dbms_repair包

可以参照如下步骤:

A、 使用诊断事件 10231,跳过坏块检查
SQL> ALTER SESSION SET EVENTS '10231 trace name context forever,level 10';
B 、创建一个临时表 tab_tmp 的表中除坏块的数据都检索出来
SQL>CREATE TABLE tab_tmp as select * from tab;
SQL>ALTER SESSION SET EVENTS '10231 trace name context off';
C、 更名原表,并把 tab_tmp 更名为 tab
SQL>alter table tab rename to tab_bak;
SQ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值