« 使用dbv和RMAN检查数据文件中的坏块 | Blog首页 | 俺在丰宁坝上骑马的照片 »
使用Oracle9i的blockrecover新特性修复数据库中的坏块
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2005/06/eoaoracle9iaebl.html
1.备份数据库链接:https://www.eygle.com/archives/2005/06/eoaoracle9iaebl.html
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_
*** 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_
*** 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发现的坏块信息
6.执行恢复
7.检查数据的恢复
此时数据已经恢复,但是block corruption信息仍然记录在数据库中,直到下次validate才会清除这部分信息:
此时从数据库中查询,坏块信息被清除。
历史上的今天...
>> 2017-06-12文章:
>> 2012-06-12文章:
>> 2009-06-12文章:
>> 2007-06-12文章:
>> 2006-06-12文章:
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 |
第三步应该有问题吧,块坏了,还能open database???
当然可能。
可以在线blockrecover datafile 2 block 14 from backupset;可以不在mount状态。