eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 使用dbv和RMAN检查数据文件中的坏块 | Blog首页 | 俺在丰宁坝上骑马的照片 »

使用Oracle9i的blockrecover新特性修复数据库中的坏块

1.备份数据库
D:\>rman target /

恢复管理器: 版本9.2.0.6.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

连接到目标数据库: EYGLE (DBID=1365961916)

RMAN> backup database format='d:\oradata\eygle_fullbk.bak' tag='eygle';

启动 backup 于 12-6月 -05
正在使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
在备份集中包含当前的 SPFILE
备份集中包括当前控制文件
输入数据文件 fno=00001 name=D:\ORADATA\EYGLE\SYSTEM01.DBF
输入数据文件 fno=00005 name=D:\ORADATA\EYGLE\UNDOTBS2.DBF
输入数据文件 fno=00002 name=D:\ORADATA\EYGLE\EYGLE01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 12-6月 -05
通道 ORA_DISK_1: 已完成段 1 于 12-6月 -05
段 handle=D:\ORADATA\EYGLE_FULLBK.BAK comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:27
完成 backup 于 12-6月 -05

RMAN> list backup;


备份集列表
===================

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
2       Full    140M       DISK        00:00:22     12-6月 -05
BP 关键字: 1   状态: AVAILABLE   标记:TAG20050612T004442
段名:D:\ORADATA\EYGLE_FULL.BAK
  包含的 SPFILE: 修改时间: 04-3月 -05
  备份集 2 中的数据文件列表
  文件 LV 类型 Ckp SCN    Ckp 时间   名称
  ---- -- ---- ---------- ---------- ----
  1       Full 452236     12-6月 -05 D:\ORADATA\EYGLE\SYSTEM01.DBF
  2       Full 452236     12-6月 -05 D:\ORADATA\EYGLE\EYGLE01.DBF
  5       Full 452236     12-6月 -05 D:\ORADATA\EYGLE\UNDOTBS2.DBF

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
4       Full    140M       DISK        00:00:21     12-6月 -05
BP 关键字: 2   状态: AVAILABLE   标记:EYGLE
段名:D:\ORADATA\EYGLE_FULLBK.BAK
  包含的 SPFILE: 修改时间: 04-3月 -05
  备份集 4 中的数据文件列表
  文件 LV 类型 Ckp SCN    Ckp 时间   名称
  ---- -- ---- ---------- ---------- ----
  1       Full 492975     12-6月 -05 D:\ORADATA\EYGLE\SYSTEM01.DBF
  2       Full 492975     12-6月 -05 D:\ORADATA\EYGLE\EYGLE01.DBF
  5       Full 492975     12-6月 -05 D:\ORADATA\EYGLE\UNDOTBS2.DBF

RMAN> exit


恢复管理器完成。

2.使用工具破坏数据块
可以使用UltraEdit或者WinHex打开文件修改某个数据块,然后保存。
3.访问损坏的数据
D:\>sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.6.0 - Production on 星期日 6月 12 09:06:19 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已连接到空闲例程。

09:06:19 SQL> startup
ORACLE 例程已经启动。

Total System Global Area   59842188 bytes
Fixed Size                   454284 bytes
Variable Size              33554432 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
09:06:33 SQL> select count(*)from t;
select count(*)from t
                    *
ERROR 位于第 1 行:
ORA-01578: ORACLE 数据块损坏(文件号2,块号14)
ORA-01110: 数据文件 2: 'D:\ORADATA\EYGLE\EYGLE01.DBF'

此时alert_.log文件中会记录损坏块。
***
Corrupt block relative dba: 0x0080000e (file 2, block 14)
Bad check value found during buffer read
Data in bad block -
 type: 6 format: 2 rdba: 0x0080000e
 last change scn: 0x0000.00078584 seq: 0x1 flg: 0x06
 consistency value in tail: 0x85840601
 check value in block header: 0xca4b, computed block checksum: 0x5a6
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0080000e (file 2, block 14) found same corrupted data

4.检查坏块
也可以使用RMAN验证数据文件,以发现坏块:
D:\>rman target /

恢复管理器: 版本9.2.0.6.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

连接到目标数据库: EYGLE (DBID=1365961916)

RMAN> backup validate datafile 2;

启动 backup 于 12-6月 -05
正在使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00002 name=D:\ORADATA\EYGLE\EYGLE01.DBF
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 12-6月 -05

RMAN> exit


恢复管理器完成。

此时alert_.log文件中会记录RMAN发现的坏块信息:
***
Corrupt block relative dba: 0x0080000e (file 2, block 14)
Bad check value found during backing up datafile
Data in bad block -
 type: 6 format: 2 rdba: 0x0080000e
 last change scn: 0x0000.00078584 seq: 0x1 flg: 0x06
 consistency value in tail: 0x85840601
 check value in block header: 0xca4b, computed block checksum: 0x5a6
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of blocknum=14, file=D:\ORADATA\EYGLE\EYGLE01.DBF. found same corrupt data

5.查询RMAN发现的坏块信息
09:08:25 SQL> select * from v$database_block_corruption where file#=2;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         2         14          1                  0 FRACTURED

已用时间:  00: 00: 00.00

6.执行恢复
D:\>rman target /

恢复管理器: 版本9.2.0.6.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

已连接到目标数据库 (未启动)

RMAN> startup mount;

Oracle 例程已启动
数据库已加载

系统全局区域总计      59842188 字节

Fixed Size                      454284 字节
Variable Size                 33554432 字节
Database Buffers              25165824 字节
Redo Buffers                    667648 字节

RMAN> blockrecover datafile 2 block 14 from backupset;

启动 blockrecover 于 12-6月 -05
正在使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=11 devtype=DISK


通道 ORA_DISK_1: 正在恢复块
通道 ORA_DISK_1: 正在指定要从备份集恢复的块
正在恢复数据文件 00002 的块
通道 ORA_DISK_1: 已从备份段 1 恢复块
段 handle=D:\ORADATA\EYGLE_FULLBK.BAK tag=EYGLE params=NULL
通道 ORA_DISK_1: 块恢复已完成

正在开始介质的恢复
完成介质的恢复

完成 blockrecover 于 12-6月 -05

7.检查数据的恢复
D:\>sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.6.0 - Production on 星期日 6月 12 09:10:55 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


连接到:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production

09:10:55 SQL> alter database open;

数据库已更改。

已用时间:  00: 00: 07.01
09:11:08 SQL> select * from v$database_block_corruption where file#=2;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         2         14          1                  0 FRACTURED

已用时间:  00: 00: 00.01
09:11:12 SQL> select count(*) from t;

  COUNT(*)
----------
       896

已用时间:  00: 00: 00.00


此时数据已经恢复,但是block corruption信息仍然记录在数据库中,直到下次validate才会清除这部分信息:
D:\>rman target /

恢复管理器: 版本9.2.0.6.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

连接到目标数据库: EYGLE (DBID=1365961916)

RMAN> backup validate datafile 2;

启动 backup 于 12-6月 -05
正在使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=9 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00002 name=D:\ORADATA\EYGLE\EYGLE01.DBF
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 12-6月 -05

RMAN>

此时从数据库中查询,坏块信息被清除。
09:11:22 SQL> select * from v$database_block_corruption where file#=2;

未选定行

已用时间:  00: 00: 00.00
09:12:28 SQL>


历史上的今天...
    >> 2017-06-12文章:
    >> 2012-06-12文章:
    >> 2009-06-12文章:
    >> 2007-06-12文章:
           生如夏花
    >> 2006-06-12文章:

无觅

By eygle on 2005-06-12 09:11 | Comments (3) | Backup&Recovery | 306 |

3 Comments

第三步应该有问题吧,块坏了,还能open database???

当然可能。

可以在线blockrecover datafile 2 block 14 from backupset;可以不在mount状态。


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com