使用RMAN的RECOVERBLOCK修复受损的数据块!
2009-04-28 18:08
253 查看
使用RMAN的RECOVERBLOCK修复受损的数据块!
1.备份数据库
2.使用工具破坏数据块
可以使用UltraEdit或者WinHex打开文件修改某个数据块,然后保存。
3.访问损坏的数据
此时alert_.log文件中会记录损坏块。
4.检查坏块
也可以使用RMAN验证数据文件,以发现坏块:
此时alert_.log文件中会记录RMAN发现的坏块信息:
5.查询RMAN发现的坏块信息
6.执行恢复
7.检查数据的恢复
此时数据已经恢复,但是block corruption信息仍然记录在数据库中,直到下次validate才会清除这部分信息:
此时从数据库中查询,坏块信息被清除。
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 恢复管理器完成。 |
可以使用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' |
*** 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 |
也可以使用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 恢复管理器完成。 |
*** 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 |
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 |
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 |
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 |
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> |
相关文章推荐
- 使用RMAN RECOVER BLOCK修复受损的数据块
- 使用dbms_repair修复受损数据块
- 使用LibreOffice修复受损的Office文档
- Oracle 学习之RMAN(十三)恢复实战--数据块修复
- 使用blockrecover对损坏数据块进行修复
- 修复nexus4由于使用完美刷机或者刷机精灵导致的底层文件受损
- 【转载】 使用rman进行坏块修复(ORA-01578、ORA-01110)
- 如何使用ubuntu的live cd来修复受损的MBR
- 使用Rman增量备份修复Oracle11g adg传输Gap
- 【meitong】Windows系统受损切莫将就使用 如何快速修复
- oracle 数据快修复—之使用RMAN 块介质恢复
- 使用Rman备份片信息远程恢复数据库一例
- 使用Rman的Plus archvielog选项简化数据库备份操作
- 如何使用修补工具修复图像(去水印)
- Windows 2008不能启动使用cmd命令引导修复教程
- Oracle RMAN Recover中使用BBED 跳过缺失的归档 继续 Recover 的测试
- 关于 RMAN 备份 数据块 一致性的讨论
- 使用Ubuntu Live CD修复Grub引导教程
- 明明白白使用数据块 ----数据块格式深入解析
- 使用rman跨平台传输数据库和表空间