记一次磁盘发生坏块情况处理

一、发现问题

日检查发现异常情况,告警日志没出现明显坏块情况。EM报有坏块

二、确认问题

dbv工具测试有坏块,rman检查没有坏块,视图V$DATABASE_BLOCK_CORRUPTION显示有坏块。

确定坏块在sysawu文件上

三、解决问题(重建数据库避开坏块,库名不能更改)

重命名原数据库的数据文件,复制一份重命名为原数据文件名称(目的,卸载原数据库且不删除 原数据文件防止坏块转移)

dbca卸载库,dbca建库

数据库能正常运行。暂时恢复生产,等待新服务器并迁移。

四、验证并恢复生产

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

遇到坏块问题的解决方法及思路

一、RMAN(Recovery Manager)工具

在线使用Recovery Manager扫描坏块和备份时,需要数据库运行在归档
模式(archive log),否则只能在数据库未打开(mount)的情况下进
行;

RMAN>backup check logical validate datafile n ; 

以上命令可以检查数据文件是否包含坏块,同时并不产生实际的备份输
出。

而且当使用Recovery Manager进行实际的数据库备份时,同时也就进行
了坏块检查。

直接使用RMAN的命令:backup validate check logical database;


合V$DATABASE_BLOCK_CORRUPTION视图更方便。

二、告警日志中快速识别

遇到坏块问题时,数据库的异常表现通常有: 

报告ORA-01578错误。 

报告ORA-1110错误。 

报告ORA-00600错误。其中,第一个参数为2000-8000,Cache layer 2000 – 4000,Transaction layer 4000 – 6000,Data layer 6000 - 8000。 

Trace文件中出现Corrupt block dba: 0x160c5958 . found。 分析对象失败。 

后台进程,如DBWR,LGWR出现长时间异常等待,如LGWR wait for redo copy。

三、

修复数据库坏块
  dbv
  你也可以用dbv工具看一下你现在其他的数据文件有没有还有坏块的
  dbv file='yourfilename'

 


确定发生坏块的数据库对象

  SELECT tablespace_name,
  segment_type,
  owner,
  segment_name
  FROM dba_extents
  WHERE file_id =
  AND between block_id AND block_id+blocks-1;   (定位数据库坏块位置)

 

 

用Oracle提供的DBMS_REPAIR包标记出坏块
  exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');
  4.使用Create table as select命令将表中其它块上的记录保存到另一张表上
  create table corrupt_table_bak
  as
  select * from corrupt_table;
  5.用DROP TABLE命令删除有坏块的表
  drop table corrupt_table;
  6.用alter table rename命令恢复原来的表
  alter table corrupt_table_bak
  rename to corrupt_table;
  7.如果表上存在索引,则要重建表上的索引
  PART2
  2014.7.22研究恢复数据库坏块:

 

posted @ 2018-12-17 09:46  Warden_king  阅读(902)  评论(0编辑  收藏  举报