ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 坏块恢复的研究(二)

坏块恢复的研究(二)

原创 Linux操作系统 作者:赵宇 时间:2008-05-06 16:40:12 0 删除 编辑

检查数据文件,发现坏块:

C:\Documents and Settings\oracle>dbv file =D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF

DBVERIFY: Release 10.2.0.4.0 - Production on 星期二 5月 6 15:26:14 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

DBVERIFY - 开始验证: FILE = D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF
页 201 标记为损坏
Corrupt block relative dba: 0x018000c9 (file 6, block 201)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x018000c9
 last change scn: 0x0000.000b0e50 seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x0e500601
 check value in block header: 0x2969
 computed block checksum: 0x3939

页 339 标记为损坏
Corrupt block relative dba: 0x01800153 (file 6, block 339)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x01800153
 last change scn: 0x0000.000b0e91 seq: 0x2 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x0e910602
 check value in block header: 0x4d14
 computed block checksum: 0x1e36

页 474 标记为损坏
Corrupt block relative dba: 0x018001da (file 6, block 474)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x018001da
 last change scn: 0x0000.000b0e91 seq: 0x2 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x0e910602
 check value in block header: 0x6489
 computed block checksum: 0x2106

页 492 标记为损坏
Corrupt block relative dba: 0x018001ec (file 6, block 492)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x018001ec
 last change scn: 0x0000.000b0e91 seq: 0x2 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x0e910602
 check value in block header: 0x2421
 computed block checksum: 0x3a36

页 511 标记为损坏
Corrupt block relative dba: 0x018001ff (file 6, block 511)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x018001ff
 last change scn: 0x0000.000b0e91 seq: 0x2 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x0e910602
 check value in block header: 0x9f65
 computed block checksum: 0x362f

 

DBVERIFY - 验证完成

检查的页总数: 1280
处理的页总数 (数据): 496
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其它): 30
处理的总页数 (段)  : 0
失败的总页数 (段)  : 0
空的页总数: 749
标记为损坏的总页数: 5
流入的页总数: 0
最高块 SCN            : 728966 (0.728966)

C:\Documents and Settings\oracle>

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1298184 bytes
Variable Size             171966712 bytes
Database Buffers          436207616 bytes
Redo Buffers                2895872 bytes
数据库装载完毕。
ORA-01113: 文件 6 需要介质恢复
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF'


SQL> recover datafile 6;
完成介质恢复。
SQL> alter database open;

数据库已更改。

发现这个视图还没有逻辑检查到:

SQL> select * from v$database_block_corruption;

未选定行

SQL>

 

C:\Documents and Settings\oracle>rman target / nocatalog

恢复管理器: Release 10.2.0.4.0 - Production on 星期二 5月 6 15:28:55 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

连接到目标数据库: DEVDB (DBID=557726576)
使用目标数据库控制文件替代恢复目录

RMAN> report schema;

数据库方案报表

永久数据文件列表
===========================
文件大小 (MB) 表空间           回退段数据文件名称
---- -------- -------------------- ------- ------------------------
1    490      SYSTEM               ***     +DISK_GROUP1/devdb/datafile/system.260.652996483
2    35       UNDOTBS1             ***     +DISK_GROUP1/devdb/datafile/undotbs1.292.652996483
3    270      SYSAUX               ***     +DISK_GROUP1/devdb/datafile/sysaux.293.652996483
4    5        USERS                ***     +DISK_GROUP1/devdb/datafile/users.291.652996483
5    104      EXAMPLE              ***     +DISK_GROUP1/devdb/datafile/example.256.652996665
6    10       TEST                 ***     D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF

临时文件列表
=======================
文件大小 (MB) 表空间           最大大小 (MB) 临时文件名称
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       +DISK_GROUP1/devdb/tempfile/temp.257.652996649

RMAN>


RMAN> backup datafile 6;

启动 backup 于 2008-05-06 15:29:51
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00006 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF
通道 ORA_DISK_1: 正在启动段 1 于 2008-05-06 15:29:52
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, 在 05/06/2008 15:29:55 上) 失败
ORA-19566: 超出损坏块限制 0 (文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF)

备份时候发现坏块

SQL>select * from v$database_block_corruption;

未选定行

SQL> select * from v$backup_corruption;

未选定行

SQL> select * from v$copy_corruption;

未选定行

再次检查这些视图仍然没有检查到

RMAN> backup validate datafile 6 ;

启动 backup 于 2008-05-06 15:53:34
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00006 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 2008-05-06 15:53:37


RMAN> backup validate check logical datafile 6;

启动 backup 于 2008-05-06 16:07:26
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00006 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 2008-05-06 16:07:29

坏块信息被记录下来:


SQL> select * from v$database_block_corruption;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         6        474          1                  0 CHECKSUM
         6        492          1                  0 CHECKSUM
         6        511          1                  0 CHECKSUM
         6        201          1                  0 CHECKSUM
         6        339          1                  0 CHECKSUM

SQL> select * from v$backup_corruption;

     RECID      STAMP  SET_STAMP  SET_COUNT     PIECE#      FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# MAR CORRUPTIO
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ------------------ --- ---------
         1  654018816  654018814          9          1          6        201          1                  0 YES CHECKSUM
         2  654018816  654018814          9          1          6        339          1                  0 YES CHECKSUM
         3  654018816  654018814          9          1          6        474          1                  0 YES CHECKSUM
         4  654018816  654018814          9          1          6        492          1                  0 YES CHECKSUM
         5  654018816  654018814          9          1          6        511          1                  0 YES CHECKSUM

 

可以在alert.log可以发现这些错误信息:

Hex dump of (file 6, block 511) in trace file d:\oracle\product\10.2.0\admin\devdb\udump\devdb_ora_3856.trc
Corrupt block relative dba: 0x018001ff (file 6, block 511)
Bad check value found during backing up datafile
Data in bad block:
 type: 6 format: 2 rdba: 0x018001ff
 last change scn: 0x0000.000b0e91 seq: 0x2 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x0e910602
 check value in block header: 0x9f65
 computed block checksum: 0x362f
Reread of blocknum=511, file=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF. found same corrupt data
Reread of blocknum=511, file=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF. found same corrupt data
Reread of blocknum=511, file=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF. found same corrupt data
Reread of blocknum=511, file=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF. found same corrupt data
Reread of blocknum=511, file=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF. found same corrupt data

 

检查损坏的段:


SQL> select segment_name,segment_type,relative_fno from dba_extents where file_id=6
  2  and 201 between block_id and block_id+blocks -1;

SEGMENT_NAME         SEGMENT_TYPE       RELATIVE_FNO
-------------------- ------------------ ------------
EMP3                 TABLE                         6


SQL>  select sysdate-1 from dual;

SYSDATE-1
-------------------
2008-05-05 16:32:17

以前的拷贝,而且数据已经变化很多,但是由于有这个段的原始数据:

RMAN> list datafilecopy all;


数据文件副本列表
关键字     文件 S 完成时间            Ckp SCN    Ckp 时间            名称
------- ---- - ------------------- ---------- ------------------- ----
3       6    A 2008-05-05 15:32:16 725421     2008-05-05 14:07:38 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF1


RMAN> blockrecover corruption list restore until time 'sysdate -1';

启动 blockrecover 于 2008-05-06 16:33:17
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在从数据文件副本 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF1 还原块

正在开始介质的恢复
介质恢复完成, 用时: 00:00:07

完成 blockrecover 于 2008-05-06 16:33:29


备份以后检查坏块列表:

SQL>  select * from v$database_block_corruption;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         6        474          1                  0 CHECKSUM
         6        492          1                  0 CHECKSUM
         6        511          1                  0 CHECKSUM
         6        201          1                  0 CHECKSUM
         6        339          1                  0 CHECKSUM

 


RMAN> backup datafile 6;

启动 backup 于 2008-05-06 16:36:54
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00006 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST.DBF
通道 ORA_DISK_1: 正在启动段 1 于 2008-05-06 16:36:54
通道 ORA_DISK_1: 已完成段 1 于 2008-05-06 16:36:57
段句柄=+DISK_GROUP2/devdb/backupset/2008_05_06/nnndf0_tag20080506t163654_0.303.654021415 标记=TAG20080506T163654 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 2008-05-06 16:36:57

 

SQL> l
  1*  select * from v$database_block_corruption
SQL> /

未选定行

再次备份以后,坏块信息被清除

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/175005/viewspace-261557/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-25

  • 博文量
    73
  • 访问量
    916778