暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle故障处理-坏块修复

IT小Chen 2021-04-14
1608

Oracle故障处理-坏块修复

 

一:问题现象

(1)NC进行收款结算时报错(ORA-01578)

(2)数据备份日志 (exp)报错:

(3)数据库警告日志报错:

二:问题原因

服务器意外断电,导致数据库出现坏块;

三:基本信息

(1)数据库服务器操作系统:

(2)数据库版本

四:查看数据文件号及名称

select file_id,tablespace_name,file_name,bytes/1024/1024 from dba_data_files order by 1;

五:通过DBV检查所有数据文件是否有坏块

(1) 检查nnc_index01.dbf文件

dbv file='/oradata/nc/nnc_index01.dbf'

结论file_id=6(nnc_index01.dbf),block=196373,643867,459202出现三个索引坏块

结论:file_id=8(nnc_index02.dbf),block=169072出现一个索引坏块

(3) 检查nnc_data01.dbf文件

dbv file='/oradata/nc/nnc_data01.dbf'

结论:file_id=5(nnc_data01.dbf)无坏块

(4) 检查nnc_data02.dbf文件

dbv file='/oradata/nc/nnc_data02.dbf'

结论:file_id=7(nnc_data02.dbf),block=336465出现一个数据坏块

(5) 检查nnc_user01.dbf文件

dbv file='/oradata/nc/nnc_user01.dbf'

......

(6) 检查nnc_undotbs01.dbf文件

dbv file='/oradata/nc/nnc_undotbs01.dbf'

......

(7) 检查nnc_sysaux01.dbf文件

dbv file='/oradata/nc/nnc_sysaux.dbf'

......

(8) 检查nnc_system01.dbf文件

dbv file='/oradata/nc/nnc_system01.dbf'

......

六:查看坏块所属段及类型

(1) 查看file=6(459202)对应段类型及名称

select tablespace_name, segment_type, owner, segment_name

  from dba_extents

 where file_id = 6

   and 459202 between block_id and block_id + blocks - 1;

(2) ) 查看file=6(643867)对应段类型及名称

select tablespace_name, segment_type, owner, segment_name

  from dba_extents

 where file_id = 6

   and 643867 between block_id and block_id + blocks - 1;

(3) 查看file=6(1963727)对应段类型及名称

select tablespace_name, segment_type, owner, segment_name

  from dba_extents

 where file_id = 6

   and 1963727 between block_id and block_id + blocks - 1;

(4) 查看file=8(169072)对应段类型及名称

select tablespace_name, segment_type, owner, segment_name

  from dba_extents

 where file_id = 8

   and 169072 between block_id and block_id + blocks - 1;

(5) 查看file=7(336465)对应段类型及名称

select tablespace_name, segment_type, owner, segment_name

  from dba_extents

 where file_id = 7

   and 336465 between block_id and block_id + blocks - 1;

七:恢复之前需要先备份损坏数据块对应的表

通过exp备份不能直接备份出有坏块的表,需要设置内部事件

ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10';

通过expdp备份可以直接跳过坏块;

查看数据库备份

归档模式,并且有rman备份,有前两天的Rman全备以及全备到今天的所有归档日志;

八:恢复

---RMAN数据块恢复

(1) 恢复datafile=7的所有坏块

RMAN>backup validate datafile 7;

select * from v$database_block_corruption where file#=4;

RMAN>blockrecover datafile 7 block 336465 from backupset;

验证坏块位置

进行恢复

RMAN>blockrecover datafile 7 block 336465;

检查是否恢复成功

(2) 恢复datafile=6的所有坏块

RMAN>backup validate datafile 6;

select * from v$database_block_corruption where file#=6;

RMAN>blockrecover datafile 6 block 459202, 643867, 1963727;

验证坏块位置

进行恢复

检查是否恢复成功

(3) 恢复datafile=8的所有坏块

RMAN>backup validate datafile 8;

RMAN>blockrecover datafile 8 block 169072;

验证坏块位置

进行恢复

检查是否恢复成功

文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论