oracle坏块及解决办法

坏块分为逻辑坏块和物理坏块
如果有有备份,逻辑坏块可以根据备份修复
下面提供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









你可能感兴趣的:(oracle错误及解决方案)