一、“安装”bbed
1.上传库文件并编译
由于从11g开始不提供bbed,故需要从10g的库找下面4个文件(在10g的$ORACLE_HOME/rdbms/lib和$ORACLE_HOME/rdbms/mesg目录下)
[oracle@oracle19c BBED_10g_x64]$ lsbbedus.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]$ bbedPassword:BBED: Release 2.0.0.0.0 - Limited Production on Sun Nov 24 19:45:57 2019Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.************* !!! For Oracle Internal Use only !!! ***************##查看参数:BBED> help allSET DBA [ dba | file#, block# ]SET FILENAME 'filename'SET FILE file#SET BLOCK [+/-]block#SET OFFSET [ [+/-]byte offset | symbol | *symbol ]SET BLOCKSIZE bytesSET LIST[FILE] 'filename'SET WIDTH character_countSET COUNT bytes_to_displaySET IBASE [ HEX | OCT | DEC ]SET OBASE [ HEX | OCT | DEC ]SET MODE [ BROWSE | EDIT ]SET SPOOL [ Y | N ]SHOW [ <SET parameter> | ALL ]INFOMAP[/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 rowf - a letter which specifies a display format:x - hexadecimald - decimalu - unsigned decimalo - octalc - character (native)n - Oracle numbert - Oracle datei - Oracle rowidFIND[/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 ]UNDOHELP [ <bbed command> | ALL ]VERIFY [ DBA | FILE | FILENAME | BLOCK ]CORRUPT [ DBA | FILE | FILENAME | BLOCK ]
二、开始测试一(模拟坏块及坏块修复)
1.选择system表空间的一个索引作为测试对象
SQL> col SEGMENT_NAME for a10SQL> set line 200 pages 1000SQL> 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 0I_OBJ2 SYSTEM 1 6528 1I_OBJ2 SYSTEM 1 11288 2I_OBJ2 SYSTEM 1 11792 3I_OBJ2 SYSTEM 1 11976 4I_OBJ2 SYSTEM 1 12312 5I_OBJ2 SYSTEM 1 12520 6I_OBJ2 SYSTEM 1 13224 7I_OBJ2 SYSTEM 1 14144 8I_OBJ2 SYSTEM 1 15520 9I_OBJ2 SYSTEM 1 19008 10I_OBJ2 SYSTEM 1 19640 11I_OBJ2 SYSTEM 1 20792 12I_OBJ2 SYSTEM 1 22720 13I_OBJ2 SYSTEM 1 22976 14I_OBJ2 SYSTEM 1 23192 15I_OBJ2 SYSTEM 1 23424 16I_OBJ2 SYSTEM 1 57600 17I_OBJ2 SYSTEM 1 62336 18I_OBJ2 SYSTEM 1 69504 19I_OBJ2 SYSTEM 1 78464 20I_OBJ2 SYSTEM 1 92672 21I_OBJ2 SYSTEM 1 109824 2223 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.txt1 u01/app/oracle/oradata/ORCL/system01.dbf 954204160[oracle@oracle19c tmp]$ cat bbed.parpassword=blockeditblocksize=8192listfile=/tmp/listfile.txtmode=edit##没有配置lisfile文件将会遇到下面的情况,info显示为空[oracle@oracle19c tmp]$ bbed parfile=bbed.parBBED: Release 2.0.0.0.0 - Limited Production on Sun Nov 24 20:26:06 2019Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.************* !!! For Oracle Internal Use only !!! ***************BBED> infoFile# Name Size(blks)----- ---- ---------- ----------
3.用bbed编辑修改数据块6528的seq值,模拟数据块损坏
[oracle@oracle19c tmp]$ bbed parfile=bbed.parBBED: Release 2.0.0.0.0 - Limited Production on Sun Nov 24 20:28:32 2019Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.************* !!! For Oracle Internal Use only !!! ***************BBED> infoFile# Name Size(blks)----- ---- ----------1 u01/app/oracle/oradata/ORCL/system01.dbf 116480BBED> set block 6528BLOCK# 6528BBED> p kcbhstruct kcbh, 20 bytes @0ub1 type_kcbh @0 0x06ub1 frmt_kcbh @1 0xa2ub2 wrp2_kcbh @2 0x0000ub4 rdba_kcbh @4 0x00401980ub4 bas_kcbh @8 0x001a64baub2 wrp_kcbh @12 0x0000ub1 seq_kcbh @14 0x01ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)ub2 chkval_kcbh @16 0x99afub2 spare3_kcbh @18 0x0000BBED> 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 000009001700c600 00005738 40011a00 02000080 0080cc17 06000500 1500bb02 0000c75141018300 0a000120 0000ba64 1a000000 80090800 00008d00 3e01f60a b80900000000ad33 4000835b 40000600 0000601f 0000ec0f 0a10f60a 28104710 69108b10820c0d0d a90cdb0c b610d410 bb0b940b f510360e 340d600d 15113211 560c0a0c2f0cdf0b 52117311 9e11c811 f2111612 c90fec0e a30e3a12 ad0dda0d c90e7f0e62128612 450b200b a20f720f 440f150f 5a0eaa12 cd12ef12 15133813 050e6413840d6a0b 8b13af13 d4130014 29144b14 6e149014 b314d614 f8141b15 461569159015b215 d515f715 1d164516 72169c16 bf16e316 07172c17 51177617 9a17bc17df170218 25184818 6c189018 b518d718 fe182119 45196919 8b19ae19 d419f7191b1a3e1a 621a861a ab1acf1a f71a1f1b 451b691b 8b1bad1b cf1bf21b 141c361c591c7c1c a01cc71c e91c0c1d 2f1d521d 751d991d bc1de01d 021e251e 481e6b1e8e1eb21e d41ef71e 1a1f3e1f 6c189018 b518050d e20cd918 fb181e19 411964198819ab19 ce19f219 141a371a 5b1a380f 7f0fc60f 7d1aa01a c31a7303 5b0738075b0a370a c40ae61a 071b8c0e 291b4a1b 6b1b8d1b af1bd01b f21b131c 351c561c781c9a1c bc1cdd1c ff1c201d 421d631d 861da81d ce1d031e 331e541e 761e971e<32 bytes per line>BBED> p kcbh ##输出格式为:UnitSize* | Name | Offset| Valuestruct kcbh, 20 bytes @0ub1 type_kcbh @0 0x06ub1 frmt_kcbh @1 0xa2ub2 wrp2_kcbh @2 0x0000ub4 rdba_kcbh @4 0x00401980ub4 bas_kcbh @8 0x001a64baub2 wrp_kcbh @12 0x0000ub1 seq_kcbh @14 0xff ## 可以看到信息已改变ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)ub2 chkval_kcbh @16 0x99afub2 spare3_kcbh @18 0x0000## 进行校验BBED> verifyDBVERIFY - Verification startingFILE = u01/app/oracle/oradata/ORCL/system01.dbfBLOCK = 6528Block 6528 is corruptCorrupt block relative dba: 0x00401980 (file 0, block 6528)Fractured block found during verification ##可以看到发现了块Data in bad block:type: 6 format: 2 rdba: 0x00401980last change scn: 0x0000.0000.001a64ba seq: 0xff flg: 0x06spare3: 0x0consistency value in tail: 0x64ba0601check value in block header: 0x99afcomputed block checksum: 0xfeDBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 0Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 1Total Blocks Influx : 2Message 531 not found; product=RDBMS; facility=BBED
4.模拟坏块存在启动数据库
SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area 2483027624 bytesFixed Size 9137832 bytesVariable Size 687865856 bytesDatabase Buffers 1778384896 bytesRedo Buffers 7639040 bytesDatabase mounted.ORA-00603: ORACLE server session terminated by fatal errorORA-01092: ORACLE instance terminated. Disconnection forcedORA-00604: error occurred at recursive SQL level 1ORA-01578: ORACLE data block corrupted (file # 1, block # 6528)ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'Process ID: 6187Session ID: 1 Serial number: 26749
5.使用bbed重新修改数据块,模拟坏块修复
BBED> p kcbhstruct kcbh, 20 bytes @0ub1 type_kcbh @0 0x06ub1 frmt_kcbh @1 0xa2ub2 wrp2_kcbh @2 0x0000ub4 rdba_kcbh @4 0x00401980ub4 bas_kcbh @8 0x001a64baub2 wrp_kcbh @12 0x0000ub1 seq_kcbh @14 0xffub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)ub2 chkval_kcbh @16 0x99afub2 spare3_kcbh @18 0x0000##oracle block tail的组成:tailchk=scn base(前4) + block type(中2) + scn seq(后2),参照tailchk的值,把seq修改为正确的值即可恢复。BBED> p tailchkub4 tailchk @8188 0x64ba0601## 说明此时块的scn正确值为01BBED> m x 01 offset 14File: /u01/app/oracle/oradata/ORCL/system01.dbf (1)Block: 6528 Offsets: 14 to 525 Dba:0x00401980------------------------------------------------------------------------0106af99 00000200 00002500 0000b964 1a000080 00000200 02000000 000009001700c600 00005738 40011a00 02000080 0080cc17 06000500 1500bb02 0000c75141018300 0a000120 0000ba64 1a000000 80090800 00008d00 3e01f60a b80900000000ad33 4000835b 40000600 0000601f 0000ec0f 0a10f60a 28104710 69108b10820c0d0d a90cdb0c b610d410 bb0b940b f510360e 340d600d 15113211 560c0a0c2f0cdf0b 52117311 9e11c811 f2111612 c90fec0e a30e3a12 ad0dda0d c90e7f0e62128612 450b200b a20f720f 440f150f 5a0eaa12 cd12ef12 15133813 050e6413840d6a0b 8b13af13 d4130014 29144b14 6e149014 b314d614 f8141b15 461569159015b215 d515f715 1d164516 72169c16 bf16e316 07172c17 51177617 9a17bc17df170218 25184818 6c189018 b518d718 fe182119 45196919 8b19ae19 d419f7191b1a3e1a 621a861a ab1acf1a f71a1f1b 451b691b 8b1bad1b cf1bf21b 141c361c591c7c1c a01cc71c e91c0c1d 2f1d521d 751d991d bc1de01d 021e251e 481e6b1e8e1eb21e d41ef71e 1a1f3e1f 6c189018 b518050d e20cd918 fb181e19 411964198819ab19 ce19f219 141a371a 5b1a380f 7f0fc60f 7d1aa01a c31a7303 5b0738075b0a370a c40ae61a 071b8c0e 291b4a1b 6b1b8d1b af1bd01b f21b131c 351c561c781c9a1c bc1cdd1c ff1c201d 421d631d 861da81d ce1d031e 331e541e 761e971e<32 bytes per line>BBED> p kcbhstruct kcbh, 20 bytes @0ub1 type_kcbh @0 0x06ub1 frmt_kcbh @1 0xa2ub2 wrp2_kcbh @2 0x0000ub4 rdba_kcbh @4 0x00401980ub4 bas_kcbh @8 0x001a64baub2 wrp_kcbh @12 0x0000ub1 seq_kcbh @14 0x01 ##已修改为目标值ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)ub2 chkval_kcbh @16 0x99afub2 spare3_kcbh @18 0x0000##再次校验,可以看到文件已恢复正常BBED> verifyDBVERIFY - Verification startingFILE = /u01/app/oracle/oradata/ORCL/system01.dbfBLOCK = 6528DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 0Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 1Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED##保存修改BBED> sum applyCheck value for File 1, Block 6528:current = 0x99af, required = 0x99af
7.启动数据库
正常启动
最后修改时间:2019-11-25 11:52:56
文章转载自DB备战室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




