当前位置: DBARoad > 备份恢复 > 文章正文

从备份中恢复坏块

                    作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
                    链接:http://www.dbaroad.me/archives/2009/09/corrupt_block_recover.html

如果有备份,应该是坏块恢复中最容易的一种。其实就是一条blockrecover命令。

坏块的检测:

dbv file=D:\ORACLE\ORADATA\ORCL\USERS01.DBF blocksize=8192
 
DBVERIFY: Release 10.2.0.1.0 - Production on 星期六 919 23:22:10 2009
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
DBVERIFY - 开始验证: FILE = D:\ORACLE\ORADATA\ORCL\USERS01.DBF
页 620 标记为损坏
Corrupt block relative dba: 0x0100026c (file 4, block 620)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x0100026c
 last change scn: 0x0000.001432de seq: 0x2 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x32de0602
 check value in block header: 0x48ce
 computed block checksum: 0x100
 
 
 
DBVERIFY - 验证完成
 
检查的页总数: 1600
处理的页总数 (数据): 698
失败的页总数 (数据): 0
处理的页总数 (索引): 2
失败的页总数 (索引): 0
处理的页总数 (其它): 26
处理的总页数 ()  : 0
失败的总页数 ()  : 0
空的页总数: 873
标记为损坏的总页数: 1
流入的页总数: 0
最高块 SCN            : 1323757 (0.1323757)

查询坏块发生在哪个对象上:

sys@ORCL>SELECT OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME
  2  FROM dba_extents WHERE file_id = 4
  3  and 620 between block_id AND block_id + blocks - 1;
 
OWNER      SEGMENT_NAME     SEGMENT_TYPE       TABLESPACE_NAME
---------- ---------------- ------------------ ----------------
SYS        TAB_A            TABLE              USERS
 
sys@ORCL>select count(*) from tab_a;
select count(*) from tab_a
                     *1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 4, 块号 620)
ORA-01110: 数据文件 4: 'D:\ORACLE\ORADATA\ORCL\USERS01.DBF'

从备份中恢复:

RMAN> blockrecover datafile 4 block 620;
 
启动 blockrecover 于 19-9-09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=144 devtype=DISK
 
通道 ORA_DISK_1: 正在恢复块
通道 ORA_DISK_1: 正在指定要从备份集恢复的块
正在恢复数据文件 00004 的块
通道 ORA_DISK_1: 正在读取备份段 D:\SCRIPT\BAK\FULL_ORCL_20090919_1_1
通道 ORA_DISK_1: 已从备份段 1 恢复块
段句柄 = D:\SCRIPT\BAK\FULL_ORCL_20090919_1_1 标记 = DB_FULL_BACKUP
通道 ORA_DISK_1: 块恢复完成, 用时: 00:00:02
 
正在开始介质的恢复
介质恢复完成, 用时: 00:00:07
 
完成 blockrecover 于 19-9-09
 
sys@ORCL>select count(*) from tab_a;
 
  COUNT(*)
----------
     99490

如果没有备份,估计情况会比较复杂。如果仅仅是发生在数据表空间,还可以尝试设置10231事件,跳过坏块进行数据恢复。

— The End –

关键字:
喜欢DBARoad的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露


  • 订阅


      抓虾
      google reader
      my yahoo
      bloglines
      鲜果
      有道

站内搜索



返回首页 | 关于我 | 联系我 | 广告合作 | 网站地图 | 友情链接 | 版权声明 |