如何使用BBED修復損壞的BLOCK
2024-07-21 02:33:58
供稿:網友
前面我已經介紹了如何使用BBED模擬壞塊,本文簡要介紹如何使用BBED修復損壞的BLOCK。
1.備份數據文件
要想恢復損壞的文件,需要存在一個良好文件,本文簡單冷備份一下文件.
[Oracle@jumper conner]$ cp users01.dbf users01.dbf.bak
2.修改BBED參數文件
加入備份文件
[oracle@jumper conner]$ vi filelist.txt
1 /opt/oracle/oradata/conner/system01.dbf 440401920
2 /opt/oracle/oradata/conner/undotbs01.dbf 104857600
3 /opt/oracle/oradata/conner/users01.dbf 27262976
4 /opt/oracle/oradata/conner/users01.dbf.bak 27262976
~
~
~
"filelist.txt" 4L, 259C written
3.破壞數據塊
[oracle@jumper conner]$ bbed parfile=par.bbd
PassWord:
BBED: Release 2.0.0.0.0 - Limited PRodUCtion on Sun Sep 11 22:30:11 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> set file 3
FILE# 3
BBED> modify 1000 file 3 block 17
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: /opt/oracle/oradata/conner/users01.dbf (3)
Block: 17 Offsets: 0 to 511 Dba:0x00c00011
------------------------------------------------------------------------
03e80000 1100c000 75b5a320 00000104 06300000 01000000 611e0000 72b5a320
00000000 03003201 0900c000 ffff0000 00000000 00000000 00000000 00800000
72b5a320 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00012600
ffff5e00 d5037703 77030000 2600c21e 101e581d a91cf61b 471b941a dd192819
6218b417 06175216 9715dd14 26146c13 b4120712 44118310 bc0ffa0e 380e790d
b60cf40b 350b790a c0090409 45088b07 cc060e06 57059804 d5030000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<32 bytes per line>
BBED> verify
DBVERIFY - Verification starting
FILE = /opt/oracle/oradata/conner/users01.dbf
BLOCK = 17
Block 17 is corrupt
***
Corrupt block relative dba: 0x00c00011 (file 0, block 17)
Bad header found during verification
Data in bad block -
type: 3 format: 0 rdba: 0x00c00011
last change scn: 0x0000.20a3b575 seq: 0x1 flg: 0x04
consistency value in tail: 0xb5750601
check value in block header: 0x3006, computed block checksum: 0xea05
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
DBVERIFY - Verification complete
Total Blocks Examined : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 1
Total Blocks Influx : 0
BBED> quit
4.從備份文件中copy良好數據塊進行恢復
[oracle@jumper conner]$ bbed parfile=par.bbd
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Sun Sep 11 22:33:55 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> set file 4
FILE# 4
BBED> show
FILE# 4
BLOCK# 1
OFFSET 0
DBA 0x01000001 (16777217 4,1)
FILENAME /opt/oracle/oradata/conner/users01.dbf.bak
BIFILE bifile.bbd
LISTFILE filelist.txt
BLOCKSIZE 8192
MODE Edit
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No
BBED> copy file 4 block 17 to file 3 block 17;
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: /opt/oracle/oradata/conner/users01.dbf (3)
Block: 17 Offsets: 0 to 511 Dba:0x00c00011
------------------------------------------------------------------------
06020000 1100c000 75b5a320 00000104 06300000 01000000 611e0000 72b5a320
00000000 03003201 0900c000 ffff0000 00000000 00000000 00000000 00800000
72b5a320 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00012600
ffff5e00 d5037703 77030000 2600c21e 101e581d a91cf61b 471b941a dd192819
6218b417 06175216 9715dd14 26146c13 b4120712 44118310 bc0ffa0e 380e790d
b60cf40b 350b790a c0090409 45088b07 cc060e06 57059804 d5030000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<32 bytes per line>
BBED> verify
DBVERIFY - Verification starting
FILE = /opt/oracle/oradata/conner/users01.dbf
BLOCK = 17
DBVERIFY - Verification complete
Total Blocks Examined : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx : 0
BBED>
至此恢復完成。
5.數據庫驗證
SQL> select count(*) from bbed;
select count(*) from bbed
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 3, block # 17)
ORA-01110: data file 3: '/opt/oracle/oradata/conner/users01.dbf'
SQL> alter tablespace users offline;
Tablespace altered.
SQL> alter tablespace users online;
Tablespace altered.
SQL> select count(*) from bbed;
COUNT(*)
----------
523
善用BBED可以從很多棘手的問題中拯救我們的數據庫。本案例僅供參考。