一、“安装”bbed
1.上传库文件并编译
由于从11g开始不提供bbed,故需要从10g的库找下面4个文件(在10g的$ORACLE_HOME/rdbms/lib和$ORACLE_HOME/rdbms/mesg目录下)
[oracle@oracle19c BBED_10g_x64]$ ls
bbedus.msb bbedus.msg sbbdpt.o ssbbded.o
[oracle@oracle19c BBED_10g_x64]$ cp s* /u01/app/oracle/product/19.3.0/db_1/rdbms/lib/
[oracle@oracle19c BBED_10g_x64]$ cp bbedus.ms* /u01/app/oracle/product/19.3.0/db_1/rdbms/mesg/
[oracle@oracle19c BBED_10g_x64]$ make -f u01/app/oracle/product/19.3.0/db_1/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
2.登录bbed(默认密码:blockedit)
[oracle@oracle19c BBED_10g_x64]$ bbed
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Sun Nov 24 19:45:57 2019
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
##查看参数:
BBED> help all
SET DBA [ dba | file#, block# ]
SET FILENAME 'filename'
SET FILE file#
SET BLOCK [+/-]block#
SET OFFSET [ [+/-]byte offset | symbol | *symbol ]
SET BLOCKSIZE bytes
SET LIST[FILE] 'filename'
SET WIDTH character_count
SET COUNT bytes_to_display
SET IBASE [ HEX | OCT | DEC ]
SET OBASE [ HEX | OCT | DEC ]
SET MODE [ BROWSE | EDIT ]
SET SPOOL [ Y | N ]
SHOW [ <SET parameter> | ALL ]
INFO
MAP[/v] [ DBA | FILENAME | FILE | BLOCK ]
DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]
PRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
EXAMINE[/Nuf] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
</Nuf>:
N - a number which specifies a repeat count.
u - a letter which specifies a unit size:
b - b1, ub1 (byte)
h - b2, ub2 (half-word)
w - b4, ub4(word)
r - Oracle table/index row
f - a letter which specifies a display format:
x - hexadecimal
d - decimal
u - unsigned decimal
o - octal
c - character (native)
n - Oracle number
t - Oracle date
i - Oracle rowid
FIND[/x|d|u|o|c] numeric/character string [ TOP | CURR ]
COPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]
MODIFY[/x|d|u|o|c] numeric/character string
[ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
ASSIGN[/x|d|u|o] <target spec>=<source spec>
<target spec> : [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
<source spec> : [ value | <target spec options> ]
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
PUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]
POP [ALL]
REVERT [ DBA | FILE | FILENAME | BLOCK ]
UNDO
HELP [ <bbed command> | ALL ]
VERIFY [ DBA | FILE | FILENAME | BLOCK ]
CORRUPT [ DBA | FILE | FILENAME | BLOCK ]
二、开始测试一(模拟坏块及坏块修复)
1.选择system表空间的一个索引作为测试对象
SQL> col SEGMENT_NAME for a10
SQL> set line 200 pages 1000
SQL> select SEGMENT_NAME,TABLESPACE_NAME,FILE_ID,BLOCK_ID,EXTENT_ID from dba_extents where segment_name='I_OBJ2';
SEGMENT_NA TABLESPACE_NAME FILE_ID BLOCK_ID EXTENT_ID
---------- ------------------------------ ---------- ---------- ----------
I_OBJ2 SYSTEM 1 344 0
I_OBJ2 SYSTEM 1 6528 1
I_OBJ2 SYSTEM 1 11288 2
I_OBJ2 SYSTEM 1 11792 3
I_OBJ2 SYSTEM 1 11976 4
I_OBJ2 SYSTEM 1 12312 5
I_OBJ2 SYSTEM 1 12520 6
I_OBJ2 SYSTEM 1 13224 7
I_OBJ2 SYSTEM 1 14144 8
I_OBJ2 SYSTEM 1 15520 9
I_OBJ2 SYSTEM 1 19008 10
I_OBJ2 SYSTEM 1 19640 11
I_OBJ2 SYSTEM 1 20792 12
I_OBJ2 SYSTEM 1 22720 13
I_OBJ2 SYSTEM 1 22976 14
I_OBJ2 SYSTEM 1 23192 15
I_OBJ2 SYSTEM 1 23424 16
I_OBJ2 SYSTEM 1 57600 17
I_OBJ2 SYSTEM 1 62336 18
I_OBJ2 SYSTEM 1 69504 19
I_OBJ2 SYSTEM 1 78464 20
I_OBJ2 SYSTEM 1 92672 21
I_OBJ2 SYSTEM 1 109824 22
23 rows selected.
2.编辑bbed.par及listfile.txt
## 注1:bbed.par为bbed的配置文件,可以配置一些参数(作用类似于数据泵的par文件)
## 注2:listfile.txt为数据文件信息文件(包含文件号,文件名绝对路径,文件大小),该文件名及路径由bbed.par中listfile参数指定,文件内容使用sql(select file#||' '||name||' '||bytes from v$datafile;)生成
[oracle@oracle19c tmp]$ cat listfile.txt
1 u01/app/oracle/oradata/ORCL/system01.dbf 954204160
[oracle@oracle19c tmp]$ cat bbed.par
password=blockedit
blocksize=8192
listfile=/tmp/listfile.txt
mode=edit
##没有配置lisfile文件将会遇到下面的情况,info显示为空
[oracle@oracle19c tmp]$ bbed parfile=bbed.par
BBED: Release 2.0.0.0.0 - Limited Production on Sun Nov 24 20:26:06 2019
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> info
File# Name Size(blks)
----- ---- ---------- ----------
3.用bbed编辑修改数据块6528的seq值,模拟数据块损坏
[oracle@oracle19c tmp]$ bbed parfile=bbed.par
BBED: Release 2.0.0.0.0 - Limited Production on Sun Nov 24 20:28:32 2019
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> info
File# Name Size(blks)
----- ---- ----------
1 u01/app/oracle/oradata/ORCL/system01.dbf 116480
BBED> set block 6528
BLOCK# 6528
BBED> p kcbh
struct kcbh, 20 bytes @0
ub1 type_kcbh @0 0x06
ub1 frmt_kcbh @1 0xa2
ub2 wrp2_kcbh @2 0x0000
ub4 rdba_kcbh @4 0x00401980
ub4 bas_kcbh @8 0x001a64ba
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0x01
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0x99af
ub2 spare3_kcbh @18 0x0000
BBED> m x ff offset 14 ##m:modify代表修改 x代表16进制,ff代表目标值,offset 14代表目标位置
File: u01/app/oracle/oradata/ORCL/system01.dbf (1)
Block: 6528 Offsets: 14 to 525 Dba:0x00401980
------------------------------------------------------------------------
ff06af99 00000200 00002500 0000b964 1a000080 00000200 02000000 00000900
1700c600 00005738 40011a00 02000080 0080cc17 06000500 1500bb02 0000c751
41018300 0a000120 0000ba64 1a000000 80090800 00008d00 3e01f60a b8090000
0000ad33 4000835b 40000600 0000601f 0000ec0f 0a10f60a 28104710 69108b10
820c0d0d a90cdb0c b610d410 bb0b940b f510360e 340d600d 15113211 560c0a0c
2f0cdf0b 52117311 9e11c811 f2111612 c90fec0e a30e3a12 ad0dda0d c90e7f0e
62128612 450b200b a20f720f 440f150f 5a0eaa12 cd12ef12 15133813 050e6413
840d6a0b 8b13af13 d4130014 29144b14 6e149014 b314d614 f8141b15 46156915
9015b215 d515f715 1d164516 72169c16 bf16e316 07172c17 51177617 9a17bc17
df170218 25184818 6c189018 b518d718 fe182119 45196919 8b19ae19 d419f719
1b1a3e1a 621a861a ab1acf1a f71a1f1b 451b691b 8b1bad1b cf1bf21b 141c361c
591c7c1c a01cc71c e91c0c1d 2f1d521d 751d991d bc1de01d 021e251e 481e6b1e
8e1eb21e d41ef71e 1a1f3e1f 6c189018 b518050d e20cd918 fb181e19 41196419
8819ab19 ce19f219 141a371a 5b1a380f 7f0fc60f 7d1aa01a c31a7303 5b073807
5b0a370a c40ae61a 071b8c0e 291b4a1b 6b1b8d1b af1bd01b f21b131c 351c561c
781c9a1c bc1cdd1c ff1c201d 421d631d 861da81d ce1d031e 331e541e 761e971e
<32 bytes per line>
BBED> p kcbh ##输出格式为:UnitSize* | Name | Offset| Value
struct kcbh, 20 bytes @0
ub1 type_kcbh @0 0x06
ub1 frmt_kcbh @1 0xa2
ub2 wrp2_kcbh @2 0x0000
ub4 rdba_kcbh @4 0x00401980
ub4 bas_kcbh @8 0x001a64ba
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0xff ## 可以看到信息已改变
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0x99af
ub2 spare3_kcbh @18 0x0000
## 进行校验
BBED> verify
DBVERIFY - Verification starting
FILE = u01/app/oracle/oradata/ORCL/system01.dbf
BLOCK = 6528
Block 6528 is corrupt
Corrupt block relative dba: 0x00401980 (file 0, block 6528)
Fractured block found during verification ##可以看到发现了块
Data in bad block:
type: 6 format: 2 rdba: 0x00401980
last change scn: 0x0000.0000.001a64ba seq: 0xff flg: 0x06
spare3: 0x0
consistency value in tail: 0x64ba0601
check value in block header: 0x99af
computed block checksum: 0xfe
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 : 2
Message 531 not found; product=RDBMS; facility=BBED
4.模拟坏块存在启动数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 2483027624 bytes
Fixed Size 9137832 bytes
Variable Size 687865856 bytes
Database Buffers 1778384896 bytes
Redo Buffers 7639040 bytes
Database mounted.
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 6528)
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'
Process ID: 6187
Session ID: 1 Serial number: 26749
5.使用bbed重新修改数据块,模拟坏块修复
BBED> p kcbh
struct kcbh, 20 bytes @0
ub1 type_kcbh @0 0x06
ub1 frmt_kcbh @1 0xa2
ub2 wrp2_kcbh @2 0x0000
ub4 rdba_kcbh @4 0x00401980
ub4 bas_kcbh @8 0x001a64ba
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0xff
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0x99af
ub2 spare3_kcbh @18 0x0000
##oracle block tail的组成:tailchk=scn base(前4) + block type(中2) + scn seq(后2),参照tailchk的值,把seq修改为正确的值即可恢复。
BBED> p tailchk
ub4 tailchk @8188 0x64ba0601
## 说明此时块的scn正确值为01
BBED> m x 01 offset 14
File: /u01/app/oracle/oradata/ORCL/system01.dbf (1)
Block: 6528 Offsets: 14 to 525 Dba:0x00401980
------------------------------------------------------------------------
0106af99 00000200 00002500 0000b964 1a000080 00000200 02000000 00000900
1700c600 00005738 40011a00 02000080 0080cc17 06000500 1500bb02 0000c751
41018300 0a000120 0000ba64 1a000000 80090800 00008d00 3e01f60a b8090000
0000ad33 4000835b 40000600 0000601f 0000ec0f 0a10f60a 28104710 69108b10
820c0d0d a90cdb0c b610d410 bb0b940b f510360e 340d600d 15113211 560c0a0c
2f0cdf0b 52117311 9e11c811 f2111612 c90fec0e a30e3a12 ad0dda0d c90e7f0e
62128612 450b200b a20f720f 440f150f 5a0eaa12 cd12ef12 15133813 050e6413
840d6a0b 8b13af13 d4130014 29144b14 6e149014 b314d614 f8141b15 46156915
9015b215 d515f715 1d164516 72169c16 bf16e316 07172c17 51177617 9a17bc17
df170218 25184818 6c189018 b518d718 fe182119 45196919 8b19ae19 d419f719
1b1a3e1a 621a861a ab1acf1a f71a1f1b 451b691b 8b1bad1b cf1bf21b 141c361c
591c7c1c a01cc71c e91c0c1d 2f1d521d 751d991d bc1de01d 021e251e 481e6b1e
8e1eb21e d41ef71e 1a1f3e1f 6c189018 b518050d e20cd918 fb181e19 41196419
8819ab19 ce19f219 141a371a 5b1a380f 7f0fc60f 7d1aa01a c31a7303 5b073807
5b0a370a c40ae61a 071b8c0e 291b4a1b 6b1b8d1b af1bd01b f21b131c 351c561c
781c9a1c bc1cdd1c ff1c201d 421d631d 861da81d ce1d031e 331e541e 761e971e
<32 bytes per line>
BBED> p kcbh
struct kcbh, 20 bytes @0
ub1 type_kcbh @0 0x06
ub1 frmt_kcbh @1 0xa2
ub2 wrp2_kcbh @2 0x0000
ub4 rdba_kcbh @4 0x00401980
ub4 bas_kcbh @8 0x001a64ba
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0x01 ##已修改为目标值
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0x99af
ub2 spare3_kcbh @18 0x0000
##再次校验,可以看到文件已恢复正常
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/ORCL/system01.dbf
BLOCK = 6528
DBVERIFY - Verification complete
Total Blocks Examined : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 1
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx : 0
Message 531 not found; product=RDBMS; facility=BBED
##保存修改
BBED> sum apply
Check value for File 1, Block 6528:
current = 0x99af, required = 0x99af
7.启动数据库
正常启动
最后修改时间:2019-11-25 11:52:56
文章转载自DB备战室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。