Oracle日常问题-坏块修复

来源:这里教程网 时间:2026-03-03 15:10:59 作者:

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 出现三个索引坏块 (2) 检查 nnc_index02.dbf 文件 dbv file='/oradata/nc/nnc_index0 2 .dbf'

结论:file_id=8(nnc_index02.dbf),block=169072 出现一个索引坏块 (3) 检查 nnc_data01.dbf 文件 dbv file='/oradata/nc/nnc_ data 01.dbf'

结论:file_id=5(nnc_data01.dbf) 无坏块 (4) 检查 nnc_data02.dbf 文件 dbv file='/oradata/nc/nnc_ data 0 2 .dbf'

结论:file_id=7(nnc_data02.dbf),block=336465 出现一个数据坏块 (5) 检查 nnc_user01.dbf 文件 dbv file='/oradata/nc/nnc_ user 01.dbf' ...... (6) 检查 nnc_undotbs01.dbf 文件 dbv file='/oradata/nc/nnc_ undotbs 01.dbf' ...... (7) 检查 nnc_sysaux01.dbf 文件 dbv file='/oradata/nc/nnc_ sysaux .dbf' ...... (8) 检查 nnc_system01.dbf 文件 dbv file='/oradata/nc/nnc_ system01.d bf' ...... 六:查看坏块所属段及类型 (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",共同学习,共同成长!!!

相关推荐