用户操作
[即时聊天] [发私信] [加为好友]
zgqjymxID:zgqjymx
200141次访问,排名361好友0人,关注者4
zgqjymx的文章
原创 25 篇
翻译 0 篇
转载 12742 篇
评论 19 篇
zgqjymx的公告

最近评论
xlsoft1983:
我发觉一个Totalview Debugger的调试工具超级好用,是linux下的图形化调试工具呢!内存调试超级强大!
我留个邮箱:lovejoy1983@163.com
要试用版可以跟我联系!
xlsoft1983:我发觉一个Totalview Debugger的调试工具超级好用,是linux下的图形化调试工具呢!内存调试超级强大!
我留个邮箱:lovejoy1983@163.com
要试用版可以跟我联系!
xlsoft1983:我发觉一个Totalview Debugger的调试工具超级好用,是linux下的图形化调试工具呢!内存调试超级强大!
我留个邮箱:lovejoy1983@163.com
要试用版可以跟我联系!
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
HRMIS2008:学习了
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 用Oracle9i的blockrecover修复数据库的坏块收藏

    新一篇: Linux入门系列 | 旧一篇: 实例讲解Oracle中的快速插入和快速删除

    来源:赛迪网    作者:30931

    1.第一步,备份数据库

    D:\>rman target /恢复管理器: 版本9.2.0.6.0 - ProductionCopyright (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月 -05RMAN> list backup;备份集列表===================BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间------- ---- -- ---------- ----------- ------------ ----------2       Full    140M       DISK        00:00:22     12-6月 -05BP 关键字: 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.DBFBS 关键字  类型 LV 大小       设备类型 经过时间 完成时间------- ---- -- ---------- ----------- ------------ ----------4       Full    140M       DISK        00:00:21     12-6月 -05BP 关键字: 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.DBFRMAN> exit恢复管理器完成。

    2.第二步,使用工具来破坏数据块

    我们可以使用UltraEdit或者WinHex打开文件修改某个数据块,然后再保存。

    3.第三步,访问损坏的数据

    D:\>sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.6.0 - Production on 星期日 6月 12 09:06:19 2005Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.已连接到空闲例程。09:06:19 SQL> startupOracle 例程已经启动。Total System Global Area   59842188 bytesFixed Size                   454284 bytesVariable Size              33554432 bytesDatabase Buffers           25165824 bytesRedo 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 readData 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 - ProductionCopyright (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月 -05RMAN> exit恢复管理器完成。

    此时alert_.log文件中会记录RMAN发现的坏块信息:

    ***Corrupt block relative dba: 0x0080000e (file 2, block 14)Bad check value found during backing up datafileData 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 - ProductionCopyright (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 2005Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.连接到:Oracle9i Enterprise Edition Release 9.2.0.6.0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.6.0 - Production09:10:55 SQL> alter database open;数据库已更改。已用时间:  00: 00: 07.0109: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.0109:11:12 SQL> select count(*) from t;  COUNT(*)----------       896已用时间:  00: 00: 00.00

    这时数据已经恢复,但block corruption信息仍然记录在数据库中,直到下次validate才会清除这部分的信息:

    D:\>rman target /恢复管理器: 版本9.2.0.6.0 - ProductionCopyright (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月 -05RMAN>

    至此,从数据库中查询,坏块信息已被清除。

    09:11:22 SQL> select * from v$database_block_corruption where file#=2;未选定行已用时间:  00: 00: 00.0009:12:28 SQL>

    发表于 @ 2008年05月11日 00:40:22|评论(loading...)|编辑

    新一篇: Linux入门系列 | 旧一篇: 实例讲解Oracle中的快速插入和快速删除

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © zgqjymx