3 and between block_id and block_id+blocks-1;
这里的F指的是file#,B指的是block#
我的显示结果指出是tg_bill03出现了坏块。
2、如果确定下来坏的是索引段,这时你就可以轻舒一口气了,只要把这个索相删除然后重建一下就可以了,如果出现坏的是表段,则应往下走了。
3、 记录下这个表的建表语句
为我方便,建议使用PL/SQL Developer来完成,如果你没有可以在http://www.allroundautomations.com/plsqldev.html去下载一个,操作步骤是这样的。
A、 以表的owner用pl/sql developer连入oracle
B、 在左面的树状栏中找到这个表tg_bill03,右击该表->view->View SQL,记录下sql,以备以下步骤中重建索引。
4、 实际处理了,以我的那个表为例
A、 以tg_bill03的owner连入oracle
B、 使用诊断事件10231
SQL> ALTER SYSTEM SET EVENTS ‘10231 trace name context forever,level 10’;
C、创建一个临时表tg_bill_tmp的表中除坏块的数据都检索出来
SQL>CREATE TABLE tg_bill03_tmp as select * from tg_bill03;
C、 更名原表,并把tg_bill03_tmp为tg_bill03
SQL>alter table tg_bill03 rename to tg_bill03_bak;
SQL>alter table tg_bill03_tmp rename to tg_bill03;
D、在tg_bill03上重新创建索引、约束、授权、trigger等对象
E、 利用表之间的业务关系,把坏块中的数据补足。
四、如何尽量减少问题及问题的损失呢
分析了产生问题的原因,我认为可以采取以下几个措施
1、 在为提高性能为操作系统打开异步I/O时,一定要与oracle及操作系统技术支持联系把操作系统与异步I/O相关的补丁要打全。
2、 制定一个良好的备份恢复策略,最好有表的exp备份
3、 要及时的检查硬件的状态,及时更换驱动器部件。
结篇:其实坏块涉及的内容很多的,如果坏块发生的回滚段表空间、数据字典(system表空间)或联机日志,这些处理都是特难的,需要与oracle的supporter联系。不过这些方面的坏的机率很少很少的,在以后的文章中我也会做介绍。(