一、由于数据库或者操作系统bug、IO错误、内存异常等原因,可能会导致数据库产生坏块,针对是否存在坏块可使用rman进行检查。
二、查找表的file_Id
三、针对存在的file_Id进行检测
RMAN> backup check logical validate datafile 8;
Starting backup at 2022-06-09 14:20:01
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00008 name=+DGROUP1/cab/datafile/data_s03.dbf
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
8 OK 0 1 2097152 15913565598284
File Name: +DGROUP1/cab/datafile/data_s03.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 1874205
Index 0 211121
Other 0 11825
Finished backup at 2022-06-09 14:20:56
四、发现坏块后,首先要获得坏块的所属对象、文件号及块位置。如果是索引、视图等坏块,可以删除重建。
如果是表可以使用rman恢复
RMAN> backup validate datafile 5; --检测数据文件物理坏块信息RMAN> run {blockrecover datafile 5 block 1345;} --修复单个坏块RMAN> run {blockrecover corruption list;} ----修复所有记录在V$DATABASE_BLOCK_CORRUPTION中的逻辑坏块。RMAN> recover datafile ‘/xxx/xx’; --修复数据文件