坏块分为逻辑坏块和物理坏块
如果有有备份,逻辑坏块可以根据备份修复
下面提供3中方法解决没有备份的坏块(坏块中数据会丢失)
还有一种rman利用备份恢复坏块。
提供模拟环境
create tablespace bl datafile 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\BL.DBF' size 1m
create table scott.tb(name varchar2(200)) tablespace bl;
insert into scott.tb select * from scott.tb;
select * from dba_data_files
用rman备份表空间(用于恢复)
数据库要在归档模式
RMAN> backup tablespace bl;
用UE打开,改下面数据部分内容(不能改头部) ,修改事,表空间应该离线,负责修改的无法保存
利用dbv查看文件中的坏块详情
C:\>dbv file=F:\APP\ADMINISTRATOR\ORADATA\ORCL\BL.DBF blocksize=8192
DBVERIFY: Release 11.1.0.6.0 - Production on 星期二 7月 28 15:23:59 201
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - 开始验证: FILE = F:\APP\ADMINISTRATOR\ORADATA\ORCL\BL.DBF
页 21 标记为损坏
Corrupt block relative dba: 0x01c00015 (file 7, block 21)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c00015
last change scn: 0x0000.001eac2a seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xac2a0601
check value in block header: 0x4abd
computed block checksum: 0xb00
DBVERIFY - 验证完成
检查的页总数: 128
处理的页总数 (数据): 109
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其它): 18
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 0
标记为损坏的总页数: 1
流入的页总数: 0
加密的总页数 : 0
最高块 SCN : 2010159 (0.2010159)
可以看出第7个文件中有一个坏块,为块21
1,rman跳过坏块备份
第7个文件,不能超过10个坏块
run{
set maxcorrupt for datafile 7 to 10;
backup tablespace bl;
}
2,exp跳过坏块导出数据,再清空表数据导入
设置 事件默认导出跳过坏块
alter system set events='1023 trace name context forever,level 10';
exp scott/tiger file='F:\app\Administrator\oradata\orcl\tb.dmp' tables=tb;
truncate table tb;
imp scott/tiger file='F:\app\Administrator\oradata\orcl\tb.dmp' tables=tb IGNORE=y;
3,调用包
execute dbms_repair.admin_tables('REPAIR_TABLE',1,1,'BL');
execute dbms_repair.SKIP_CORRUPT_BLOCKS(SCHEMA_NAME=>'SCOTT',OBJECT_NAME=>'TB',flag=>1)
4,利用备份恢复
RMAN> list backup;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
1 Full 1.02M DISK 00:00:02 28-7月 -15
BP 关键字: 1 状态: AVAILABLE 已压缩: NO 标记: TAG20150728T151938
段名:F:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2015_07_28\O1_MF_NN
NDF_TAG20150728T151938_BVGC8CJO_.BKP
备份集 1 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
7 Full 2010239 28-7月 -15 F:\APP\ADMINISTRATOR\ORADATA\ORCL\BL.DBF
RMAN> blockrecover from tag 'TAG20150728T151938' datafile 7 block 21;
启动 recover 于 28-7月 -15
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在还原块
通道 ORA_DISK_1: 正在指定要从备份集还原的块
正在还原数据文件 00007 的块
通道 ORA_DISK_1: 正在读取备份片段 F:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\
BACKUPSET\2015_07_28\O1_MF_NNNDF_TAG20150728T151938_BVGC8CJO_.BKP
通道 ORA_DISK_1: 段句柄 = F:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\BACKUPSE
T\2015_07_28\O1_MF_NNNDF_TAG20150728T151938_BVGC8CJO_.BKP 标记 = TAG20150728T151938
通道 ORA_DISK_1: 已从备份片段 1 还原块
通道 ORA_DISK_1: 块还原完成, 用时: 00:00:01
正在开始介质的恢复
介质恢复完成, 用时: 00:00:03
完成 recover 于 28-7月 -15