坏块问题(摘抄总结)

--产生坏块问题的常见原因:

1、 Oracle 的数据库 server 打开了异步 I/O(async io) 或增加了写进程。

2、 硬件的 I/O 出现了错误。

3、 操作系统的 I/O 或缓存出现问题,比如操作系统对于异步 I/O 的补丁没有打。

4、 手动的修改了数据文件中的数据,我模拟这个错误用的便是这种方式。

--常用的处理方法:

? 恢复数据文件

1) 先offline受影响的数据文件,执行以下的语句:
   ALTER DATABASE DATAFILE 'name_file' OFFLINE;
2) 保留有坏块的数据文件,然后拷贝备份的数据文件。如果恢复的数据文件要求路径不同,执行以下的语句:
   ALTER DATABASE RENAME FILE 'old_name' TO 'new_name';
3) 恢复数据文件,执行以下语句:
   RECOVER DATAFILE 'name_of_file';
4) Online恢复后的数据文件,执行以下的语句:
   ALTER DATABASE DATAFILE 'name_of_file' ONLINE;

? RMAN恢复坏的block(9i以上版本可用)
 使用这种方法要求数据库版本是9.2.0以上,要求配置了Rman的catalog数据库,数据库为归档方式,并且有完整的物理备份。
 使用RMAN的BLOCKRECOVER命令
 Rman>run{blockrecover datafile 5 block 11,16;}
 也可以强制使用某个SCN号之前的备份,恢复数据块。
 Rman>run{blockrecover datafile 5 block 11,16 restore until sequence 8505;}

? 使用10231诊断事件,在做全表扫描的时候跳过坏块

? 通过ROWID RANGE SCAN 保存数据

? 使用DBMS_REPAIR

--诊断步骤:

1、解决这种问题的第一步是首先你要确定是什么段、哪个段坏了,是索引还是表?

A、 打开 alter.log ,找到 ORA-01578 的报错信息,并记录下 file# 及 block 的值,我这里是 126 和 88490 。
    ORA-01578: ORACLE data block corrupted (file # 126, block # 88490)
    ORA-01110: data file 126: '/dev/vgjf7/rdata471'

B、 执行以下语句看哪个段坏了

SQL>Select * from dba_extents where file_id= and between block_id and block_id+blocks-1;

这里的 F 指的是 file#,B 指的是 block#,我的显示结果指出是 tg_bill03 出现了坏块

2 、如果确定下来坏的是索引段,只要把这个索相删除然后重建一下就可以了。

3、 如果出现坏的是表段,记录下这个表的建表语句

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 to tg_bill03;

D、 在 tg_bill03 上重新创建索引、约束、授权、 trigger 等对象

E、 利用表之间的业务关系,把坏块中的数据补足。


四、 如何尽量减少问题及问题的损失

1、 在为提高性能为操作系统打开异步 I/O 时,一定要与 oracle 及操作系统技术支持联系把操作系统与异步 I/O 相关的补丁要打全。

2、 制定一个良好的备份恢复策略,最好有表的 exp 备份

3、 要及时的检查硬件的状态,及时更换驱动器部件。

结篇:其实坏块涉及的内容很多的,如果坏块发生的回滚段表空间、数据字典 (system 表空间 ) 或联机日志,这些处理都是特难的,需要与 oracle 的 supporter 联系。


--Oracle的专门工具dbv来检查坏块

关键字     说明 (默认)
---------------------------------------------------
FILE       要验证的文件 (无)
START      起始块 (文件的第一个块)
END        结束块 (文件的最后一个块)
BLOCKSIZE  逻辑块大小 (2048)
LOGFILE    输出日志 (无)
FEEDBACK   显示进度 (0)
PARFILE    参数文件 (无)
USERID     用户名/口令 (无)
SEGMENT_ID 段 ID (tsn.relfile.block) (无)

用法:
c:\>dbv file=d:\oracle\oradata\ora816\system01.dbf logfile=d:\a.log blocksize=8192

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

转载于:http://blog.itpub.net/7478833/viewspace-484140/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值