一文掌握Oracle高级专家必备神技之bbed从入门到放弃!

BBED工具介绍:
BBED工具大家都知道吧,高级工程师必备技能,可以不用,但不可以不会,学习起来也非常简单,总共分三步:
1.下载安装;2.登录BBED;3.一脸懵逼,直接放弃 ...

但BBED实在是太强大了,就这么放弃,让我怎么在群里愉快的玩耍。

再次打开BBED的帮助信息,我发现BBED工具一共可分为19种命令,那么是不是学会这19种命令,明白每个命令的用途及使用场景就可以入门了,抱着试一试的想法,我开始了下面的学习:
再正经的看一下BBED工具介绍:
BBED(Oracle Block Brower and EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。
本文内容:
一:BBED安装二:BBED工具使用案例三:BBED常用命令介绍
一:BBED安装
上传文件
[oracle@cjc-db-01 soft]$ ls -lrthtotal 20K-rw-r--r-- 1 oracle oinstall 8.5K Apr 14 21:26 bbedus.msb-rw-r--r-- 1 oracle oinstall 1.9K Apr 14 21:26 sbbdpt.o-rw-r--r-- 1 oracle oinstall 1.2K Apr 14 21:26 ssbbded.o
拷贝文件到对于目录
[oracle@cjc-db-01 soft]$ cp bbedus.msb $ORACLE_HOME/rdbms/mesg/[oracle@cjc-db-01 soft]$ cp ssbbded.o $ORACLE_HOME/rdbms/lib/[oracle@cjc-db-01 soft]$ cp sbbdpt.o $ORACLE_HOME/rdbms/lib/
编译
[oracle@cjc-db-01 soft]$ cd $ORACLE_HOME/rdbms/lib[oracle@cjc-db-01 lib]$ make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
编译日志如下
Linking BBED utility (bbed)rm -f oracle/app/oracle/product/11.2/db/bin/bbedgcc -o oracle/app/oracle/product/11.2/db/bin/bbed -m64 -z noexecstack -L/oracle/app/oracle/product/11.2/db/rdbms/lib/ -L/oracle/app/oracle/product/11.2/db/lib/ -L/oracle/app/oracle/product/11.2/db/lib/stubs/ /oracle/app/oracle/product/11.2/db/lib/s0main.o oracle/app/oracle/product/11.2/db/rdbms/lib/ssbbded.o oracle/app/oracle/product/11.2/db/rdbms/lib/sbbdpt.o `cat oracle/app/oracle/product/11.2/db/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -ldbtools11 -lclntsh `cat oracle/app/oracle/product/11.2/db/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat oracle/app/oracle/product/11.2/db/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat oracle/app/oracle/product/11.2/db/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat oracle/app/oracle/product/11.2/db/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat oracle/app/oracle/product/11.2/db/lib/sysliblist` -Wl,-rpath,/oracle/app/oracle/product/11.2/db/lib -lm `cat oracle/app/oracle/product/11.2/db/lib/sysliblist` -ldl -lm -L/oracle/app/oracle/product/11.2/db/lib
登录测试
bbed 默认密码" blockedit"
[oracle@cjc-db-01 ~]$ bbedPassword: BBED: Release 2.0.0.0.0 - Limited Production on Sun Apr 14 21:35:30 2024Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.************* !!! For Oracle Internal Use only !!! ***************BBED> exit
使用BBED 工具之前需要创建filelist 文件
set heading offset feedback offset linesize 100col name for a45spool home/oracle/bbed/filelist.txtselect file#,name,bytes from v$datafile order by 1;spool offexit;
去掉SQL、空号等
[oracle@cjc-db-01 bbed]$ cat filelist.txt 1 /oracle/app/oracle/oradata/cjc/system01.dbf 7864320002 /oracle/app/oracle/oradata/cjc/sysaux01.dbf 5662310403 /oracle/app/oracle/oradata/cjc/undotbs01.dbf 943718404 /oracle/app/oracle/oradata/cjc/users01.dbf 52428805 /oracle/app/oracle/oradata/cjc/example01.dbf 3630694406 /oradata/cjctbs.dbf 115998727 /oradata/chentbs.dbf 1048576
[oracle@cjc-db-01 bbed]$ vi bbed.parblocksize=8192listfile=/home/oracle/bbed/filelist.txtmode=editpassword=blockedit
登录
[oracle@cjc-db-01 bbed]$ bbed parfile=bbed.parBBED: Release 2.0.0.0.0 - Limited Production on Sun Apr 14 21:45:29 2024Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.************* !!! For Oracle Internal Use only !!! ***************BBED> info File# Name Size(blks) ----- ---- ---------- 1 oracle/app/oracle/oradata/cjc/system01.dbf 96000 2 oracle/app/oracle/oradata/cjc/sysaux01.dbf 69120 3 oracle/app/oracle/oradata/cjc/undotbs01.dbf 11520 4 oracle/app/oracle/oradata/cjc/users01.dbf 640 5 oracle/app/oracle/oradata/cjc/example01.dbf 44320 6 oradata/cjctbs.dbf 1416 7 oradata/chentbs.dbf 128
二:BBED工具使用案例
通过BBED工具查询UNDO段名;
这也是在数据库无法OPEN情况下,如何获取UNDO段名的一种方法,有些隐含参数需要这些段名。
其中,Oracle 11g 版本, undo$ 表信息一般位于 1 号文件第 225 个数据块中。
BBED> set file 1 block 225FILE# 1BLOCK# 225
通过 sb2 kdbr[21] 可以看到,存在21个回滚段名
BBED> map File: /oracle/app/oracle/oradata/cjc/system01.dbf (1) Block: 225 Dba:0x004000e1------------------------------------------------------------ KTB Data Block (Table/Cluster) struct kcbh, 20 bytes @0 struct ktbbh, 48 bytes @20 struct kdbh, 14 bytes @68 struct kdbt[1], 4 bytes @82 sb2 kdbr[21] @86 ub1 freespace[4007] @128 ub1 rowdata[4053] @4135 ub4 tailchk @8188
继续查询(包括已经删除的)
BBED> p kdbrsb2 kdbr[0] @86 8078sb2 kdbr[1] @88 4337sb2 kdbr[2] @90 5015sb2 kdbr[3] @92 4947sb2 kdbr[4] @94 4879sb2 kdbr[5] @96 4812sb2 kdbr[6] @98 4202sb2 kdbr[7] @100 4676sb2 kdbr[8] @102 4609sb2 kdbr[9] @104 4067sb2 kdbr[10] @106 4472sb2 kdbr[11] @108 5877sb2 kdbr[12] @110 5814sb2 kdbr[13] @112 5748sb2 kdbr[14] @114 5682sb2 kdbr[15] @116 5616sb2 kdbr[16] @118 5550sb2 kdbr[17] @120 5484sb2 kdbr[18] @122 5418sb2 kdbr[19] @124 5352sb2 kdbr[20] @126 5286
查看具体段名称
BBED> x rnc *kdbr[0]rowdata[4011] @8146 -------------flag@8146: 0x2c (KDRHFL, KDRHFF, KDRHFH)lock@8147: 0x00cols@8148: 17col 0[1] @8149: 0 col 1[6] @8151: SYSTEM
BBED> x rnc *kdbr[1]......col 1[20] @4411: _SYSSMU1_3724004606$......
验证:
SQL> select SEGMENT_NAME,STATUS from dba_rollback_segs;SEGMENT_NAME STATUS------------------------------ ----------------SYSTEM ONLINE_SYSSMU10_1197734989$ ONLINE_SYSSMU9_1650507775$ ONLINE_SYSSMU8_517538920$ ONLINE_SYSSMU7_2070203016$ ONLINE_SYSSMU6_1263032392$ ONLINE_SYSSMU5_898567397$ ONLINE_SYSSMU4_1254879796$ ONLINE_SYSSMU3_1723003836$ ONLINE_SYSSMU2_2996391332$ ONLINE_SYSSMU1_3724004606$ ONLINE11 rows selected.
那么上面的这些命令是什么意思呢,别着急,学完下面的内容,你就会发现,你更不会了!
三:BBED常用命令介绍
查看帮助信息
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 [ | 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 ]: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 - hexadecimal d - decimal u - unsigned decimal o - octal c - character (native) n - Oracle number t - Oracle date i - 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] = : [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ] : [ value | ]SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]PUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]POP [ALL]REVERT [ DBA | FILE | FILENAME | BLOCK ]UNDOHELP [ | ALL ]VERIFY [ DBA | FILE | FILENAME | BLOCK ]CORRUPT [ DBA | FILE | FILENAME | BLOCK ]
可以看到,一共19种命令:
1.SET2.SHOW3.INFO4.MAP5.DUMP6.PRINT7.EXAMINE8.FIND9.COPY10.MODIFY11.ASSIGN12.SUM13.PUSH14.POP15.REVERT16.UNDO17.HELP18.VERIFY19.CORRUPT
常用命令介绍
1.set
设定当前的环境
BBED> help setSET 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 ]
例如:
SQL> conn cjc/aSQL> create table t3(xxx varchar2(10));SQL> insert into t3 values('cjc');SQL> insert into t3 values('aaa');SQL> insert into t3 values('xxx cjc');SQL> commit;selectxxx,rowid,dbms_rowid.rowid_relative_fno(rowid) rel_fno,dbms_rowid.rowid_block_number(rowid) blockno,dbms_rowid.rowid_row_number(rowid) rownofrom t3;XXX ROWID REL_FNO BLOCKNO ROWNO---------- ------------------ ---------- ---------- ----------cjc AAAVqGAAGAAAACvAAA 6175 0aaa AAAVqGAAGAAAACvAAB 6175 1xxx cjc AAAVqGAAGAAAACvAAC 6175 2
BBED> set dba 1,175DBA 0x004000af (4194479 1,175)
如果设置成功,会返回该block的RDBA (Relative Data Block Address),rdba就是rowid中的rfile#+block#。括号里面的是DBA值和block 和 file id。 我们验证一下:
验证:
#查找数据块的RDBA,和BBED结果相同。
SQL> select dbms_utility.make_data_block_address(1,175) rdba from dual; RDBA---------- 4194479
#根据RDBA查看数据块文件号,块号
SQL> SELECT dbms_utility.data_block_address_file(4194479) file#,dbms_utility.data_block_address_block(4194479) block# from dual; FILE# BLOCK#---------- ---------- 1 175
2.show
查看当前的环境参数,跟sqlplus的同名命令类似。
BBED> help showSHOW [ | ALL ]
例如:显示的是之前设置的 FILE# 1,BLOCK# 175
BBED> showFILE# 1BLOCK# 175OFFSET 0DBA 0x004000af (4194479 1,175)FILENAME /oracle/app/oracle/oradata/cjc/system01.dbfBIFILE bifile.bbdLISTFILE /home/oracle/bbed/filelist.txtBLOCKSIZE 8192MODE EditEDIT UnrecoverableIBASE DecOBASE DecWIDTH 80COUNT 512LOGFILE log.bbdSPOOL No
3.info
显示当前可以进行browse 或者edit 的file。即我们filelist 里指定的datafile信息。
BBED> help infoINFO
例如:如果一行显示不全,可以设置width,例如:set width 65
BBED> info File# Name Size(blks) ----- ---- ---------- 1 /oracle/app/oracle/oradata/cjc/system01.dbf 96000 2 /oracle/app/oracle/oradata/cjc/sysaux01.dbf 69120 3 /oracle/app/oracle/oradata/cjc/undotbs01.dbf 11520 4 /oracle/app/oracle/oradata/cjc/users01.dbf 640 5 /oracle/app/oracle/oradata/cjc/example01.dbf 44320 6 /oradata/cjctbs.dbf 1416 7 /oradata/chentbs.dbf 128
4.map
map会通过偏移量来显示block里的详细信息,如block header,data block header 和row directory。
使用/v 选项,可以查看更详细的信息。
在不指定block的情况下,会显示当前block的信息,如果想显示其他block的信息,可以使用file name,file id,block 和DBA 来指定要显示的block。
BBED> help mapMAP[/v] [ DBA | FILENAME | FILE | BLOCK ]
例如:
BBED> map File: /oracle/app/oracle/oradata/cjc/system01.dbf (1) Block: 175 Dba:0x004000af------------------------------------------------------------ KTB Data Block (Index Leaf) struct kcbh, 20 bytes @0 struct ktbbh, 72 bytes @20 struct kdxle, 32 bytes @92 sb2 kd_off[500] @124 ub1 freespace[0] @1124 ub1 rowdata[6996] @1124 ub4 tailchk @8188
使用/v选项,查看详细信息
BBED> map v File: /oracle/app/oracle/oradata/cjc/system01.dbf (1) Block: 175 Dba:0x004000af------------------------------------------------------------ KTB Data Block (Index Leaf) struct kcbh, 20 bytes @0 ub1 type_kcbh @0 ub1 frmt_kcbh @1 ub1 spare1_kcbh @2 ub1 spare2_kcbh @3 ub4 rdba_kcbh @4 ub4 bas_kcbh @8 ub2 wrp_kcbh @12 ub1 seq_kcbh @14 ub1 flg_kcbh @15 ub2 chkval_kcbh @16 ub2 spare3_kcbh @18 struct ktbbh, 72 bytes @20 ub1 ktbbhtyp @20 union ktbbhsid, 4 bytes @24 struct ktbbhcsc, 8 bytes @28 sb2 ktbbhict @36 ub1 ktbbhflg @38 ub1 ktbbhfsl @39 ub4 ktbbhfnx @40 struct ktbbhitl[2], 48 bytes @44 struct kdxle, 32 bytes @92 struct kdxlexco, 16 bytes @92 sb2 kdxlespl @108 sb2 kdxlende @110 ub4 kdxlenxt @112 ub4 kdxleprv @116 ub1 kdxledsz @120 ub1 kdxleflg @121 sb2 kd_off[500] @124 ub1 freespace[0] @1124 ub1 rowdata[6996] @1124 ub4 tailchk @8188
这个是默认情况,@后面代表的对应的信息在block里的偏移量,即offset。
--通过dba 来指定某个block
BBED> map v dba 6,159 File: /oradata/cjctbs.dbf (6) Block: 159 Dba:0x0180009f------------------------------------------------------------ KTB Data Block (Table/Cluster) struct kcbh, 20 bytes @0 ub1 type_kcbh @0 ub1 frmt_kcbh @1 ub1 spare1_kcbh @2 ub1 spare2_kcbh @3 ub4 rdba_kcbh @4 ub4 bas_kcbh @8 ub2 wrp_kcbh @12 ub1 seq_kcbh @14 ub1 flg_kcbh @15 ub2 chkval_kcbh @16 ub2 spare3_kcbh @18 struct ktbbh, 72 bytes @20 ub1 ktbbhtyp @20 union ktbbhsid, 4 bytes @24 struct ktbbhcsc, 8 bytes @28 sb2 ktbbhict @36 ub1 ktbbhflg @38 ub1 ktbbhfsl @39 ub4 ktbbhfnx @40 struct ktbbhitl[2], 48 bytes @44 struct kdbh, 14 bytes @100 ub1 kdbhflag @100 sb1 kdbhntab @101 sb2 kdbhnrow @102 sb2 kdbhfrre @104 sb2 kdbhfsbo @106 sb2 kdbhfseo @108 sb2 kdbhavsp @110 sb2 kdbhtosp @112 struct kdbt[1], 4 bytes @114 sb2 kdbtoffs @114 sb2 kdbtnrow @116 sb2 kdbr[3] @118 ub1 freespace[7986] @124 ub1 rowdata[78] @8110 ub4 tailchk @8188
--通过block 来map
BBED> map v block 159 File: /oradata/cjctbs.dbf (6) Block: 159 Dba:0x0180009f------------------------------------------------------------ KTB Data Block (Table/Cluster) struct kcbh, 20 bytes @0 ub1 type_kcbh @0 ub1 frmt_kcbh @1 ub1 spare1_kcbh @2 ub1 spare2_kcbh @3 ub4 rdba_kcbh @4 ub4 bas_kcbh @8 ub2 wrp_kcbh @12 ub1 seq_kcbh @14 ub1 flg_kcbh @15 ub2 chkval_kcbh @16 ub2 spare3_kcbh @18 struct ktbbh, 72 bytes @20 ub1 ktbbhtyp @20 union ktbbhsid, 4 bytes @24 struct ktbbhcsc, 8 bytes @28 sb2 ktbbhict @36 ub1 ktbbhflg @38 ub1 ktbbhfsl @39 ub4 ktbbhfnx @40 struct ktbbhitl[2], 48 bytes @44 struct kdbh, 14 bytes @100 ub1 kdbhflag @100 sb1 kdbhntab @101 sb2 kdbhnrow @102 sb2 kdbhfrre @104 sb2 kdbhfsbo @106 sb2 kdbhfseo @108 sb2 kdbhavsp @110 sb2 kdbhtosp @112 struct kdbt[1], 4 bytes @114 sb2 kdbtoffs @114 sb2 kdbtnrow @116 sb2 kdbr[3] @118 ub1 freespace[7986] @124 ub1 rowdata[78] @8110 ub4 tailchk @8188
map 显示的具体信息解释如下:
(1)struct kcbh, 20 bytesBlock Header Structure(2)ub1 type_kcbhBlock type (see Header Block Types below)(3)ub1 frmt_kcbhBlock format 1=Oracle 7, 2=Oracle 8+(4)ub1 spare1_kcbhNot used(5)ub1 spare2_kcbhNot used(6)ub4 rdba_kcbhRDBA -Relative Data Block Address(7)ub4 bas_kcbhSCN Base(8)ub2 wrp_kcbhSCN Wrap(9)ub1 seq_kcbhSequence number, incremented for every change made to the block at the same SCN(10)ub1 flg_kcbhFlag:0x01 New Block0x02 Delayed Logging Change advanced SCN/seq 0x04 Check value saved - block XOR‘s to zero0x08 Temporary block(11)ub2 chkval_kcbhOptional block checksum (if DB_BLOCK_CHECKSUM=TRUE)(12)ub2 spare3_kcbhNot used(13)struct ktbbh, 72 bytesTransaction Fixed Header Structure(14)ub1 ktbbhtypBlock type (1=DATA, 2=INDEX)(15)union ktbbhsid, 4 bytesSegment/Object ID(16)struct ktbbhcsc, 8 bytesSCN at last block cleanout(17)b2 ktbbhictNumber of ITL slots(18)ub1 ktbbhflg0=on the freelist(19)ub1 ktbbhfslITL TX freelist slot(20)ub4 ktbbhfnxDBA of next block on the freelist(21)struct ktbbhitl[2], 48 bytesITL list index(22)struct kdbh, 14 bytesData Header Structure(23)ub1 kdbhflagN=pctfree hit(clusters); F=do not put on freelist; K=flushable cluster keys(24)b1 kdbhntabNumber of tables (>1 in clusters)(25)b2 kdbhnrowNumber of rows(26)sb2 kdbhfrreFirst free row entry index; -1 = you have to add one(27)sb2 kdbhfsboFreespace begin offset(28)sb2 kdbhfseoFreespace end offset(29)b2 kdbhavspAvailable space in the block(30)b2 kdbhtospTotal available space when all TXs commit(31)struct kdbt[1], 4 bytesTable Directory Entry Structure(32)b2 kdbtoffs(33)b2 kdbtnrow(34)sb2 kdbr[1]Row Directory(35)ub1 freespace[8030]Free Space(36)ub1 rowdata[38]Row Data(37)ub4 tailchk(See Tailchecks below)
不同的block 可以第一个byte的值是不一样的。
具体值对应block 类型如下:
Different block types are designated by the first byte of the block. The following tableshows how to decode the block type:Header Block Types
ID Type
01Undo segment header02Undo data block03Save undo header04Save undo data block05Data segment header (temp, index, data and so on)06KTB managed data block (with ITL)07Temp table data block (no ITL)08Sort Key09Sort Run10Segment free list block11Data file header
5.dump
列出指定block的内容
dump命令将块的内容转储到屏幕上。
它可以与/v选项结合使用,以产生更详细的输出。
可以使用命令指定要转储的DBA, Filename, File, Block 和/或 Offset。
如果未指定这些,则将转储使用set命令建立的当前file, block 和 offsetas。
转储的大小由set count选项限制,默认为512字节,或者可以使用命令指定转储的大小。
BBED> help dumpDUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]
例如:
BBED> dump File: /oracle/app/oracle/oradata/cjc/system01.dbf (1) Block: 1 Offsets: 0 to 511 Dba:0x00400001------------------------------------------------------------------------ 0ba20000 01004000 00000000 00000104 aa2c0000 00000000 0004200b 7d148de2 434a4300 00000000 f8080000 00770100 00200000 01000300 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 08024000 07000000 00000000 7dc92131 25846d45 e61c1200 00000000 00000000 00000000 00000000 00000020 ae000000 bf836d45 ad000000 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 06005359 5354454d 00000000 00000000 00000000 00000000 00000000 00000000 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0a000a00 0a766d45 f8141200 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 5a391200 00000000 ca6c8445 01000000 01000000 b16e0000 100051db
详细信息
BBED> dump /v File: /oracle/app/oracle/oradata/cjc/system01.dbf (1) Block: 1 Offsets: 0 to 511 Dba:0x00400001------------------------------------------------------- 0ba20000 01004000 00000000 00000104 l ......@......... aa2c0000 00000000 0004200b 7d148de2 l .,........ .}... 434a4300 00000000 f8080000 00770100 l CJC..........w.. 00200000 01000300 00000000 00000000 l . .............. 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 08024000 07000000 00000000 7dc92131 l ..@.........}.!1 25846d45 e61c1200 00000000 00000000 l %.mE............ 00000000 00000000 00000020 ae000000 l ........... .... bf836d45 ad000000 00000000 00000000 l ..mE............ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 06005359 5354454d 00000000 00000000 l ..SYSTEM........ 00000000 00000000 00000000 00000000 l ................ 01000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 0a000a00 l ................ 0a766d45 f8141200 00000000 00000000 l .vmE............ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 5a391200 00000000 ca6c8445 l ....Z9.......l.E 01000000 01000000 b16e0000 100051db l .........n....Q.
BBED> dump /v dba 6,175 offset 0 File: /oradata/cjctbs.dbf (6) Block: 175 Offsets: 0 to 511 Dba:0x018000af------------------------------------------------------- 06a20000 af008001 fe3d1200 00000106 l .........=...... c9410000 01000000 865a0100 ed3d1200 l .A.......Z...=.. 00000000 02003200 a8008001 03001900 l ......2......... c7030000 6207c000 a5002b00 03200000 l ....b.....+.. .. fe3d1200 00000000 00000000 00000000 l .=.............. 00000000 00000000 00000000 00000000 l ................ 00000000 00010300 ffff1800 7f1f631f l ..............c. 631f0000 0300911f 8a1f7f1f 00000000 l c............... 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ................ 00000000 00000000 00000000 00000000 l ......................
6.PRINT(p)
print命令允许以原始输出或格式化输出的形式打印数据结构。
要打印的DBA, Filename, File, Block and/or Offset可以通过该命令指定。
如果未指定,则将打印使用set命令建立的当前file, block and offset。
BBED> help printPRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
BBED> set dba 5,175DBA 0x014000af (20971695 5,175)BBED> pkcbh.type_kcbh--------------ub1 type_kcbh @0 0x06BBED> printkcbh.type_kcbh--------------ub1 type_kcbh @0 0x06
7.EXAMINE(x)
检查命令用于以原始输出或格式化输出显示块中的数据。
要检查的DBA, Filename, File, Block and/or Offset可以通过命令指定。
如果当前文件中没有指定这些,则将检查使用set命令建立的block和offset。
如果发出的检查命令只包含要检查的block和offset,bbed将显示该offset的数据结构。
BBED> help EXAMINEEXAMINE[/Nuf] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]: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 - hexadecimal d - decimal u - unsigned decimal o - octal c - character (native) n - Oracle number t - Oracle date i - Oracle rowid
例如:
BBED> EXAMINEkcvfh.kcvfhbfh.type_kcbh @0 ------------------------ 0x0b
8.FIND(f)
find命令用于定位块中的数据。
该命令允许搜索十六进制、字符串或数值数据。
可以使用top指令从块的顶部(偏移量0)搜索模式,也可以使用CURR指令从当前位置搜索模式。
The find command is used to locate data within a block. The command allows hex,string or numeric data to be searched for. The pattern can be searched for fromthe top of the block (offset 0) using the TOP directive, or from the currentposition using the CURR directive.
BBED> help findFIND[/x|d|u|o|c] numeric/character string [ TOP | CURR ]
例如:
SQL> conn cjc/aSQL> create table t3(xxx varchar2(10));SQL> insert into t3 values('cjc');SQL> insert into t3 values('aaa');SQL> insert into t3 values('xxx cjc');SQL> commit;
selectxxx,rowid,dbms_rowid.rowid_relative_fno(rowid) rel_fno,dbms_rowid.rowid_block_number(rowid) blockno,dbms_rowid.rowid_row_number(rowid) rownofrom t3;XXX ROWID REL_FNO BLOCKNO ROWNO---------- ------------------ ---------- ---------- ----------cjc AAAVqGAAGAAAACvAAA 6175 0aaa AAAVqGAAGAAAACvAAB 6175 1xxx cjc AAAVqGAAGAAAACvAAC 6175 2
--设置block 和 offset
BBED> set file 6BBED> set block 175BBED> set offset 0
--查找cjc
BBED> find /c cjc top File: /oradata/cjctbs.dbf (6) Block: 175 Offsets: 8171 to 8191 Dba:0x018000af------------------------------------------------------------------------ 636a632c 01010361 61612c01 0103636a 630106fe 3d
bbed 显示在offset 8171的为位置,我们dump 该offset 看看
BBED> d /v dba 6,175 offset 8171 count 128 File: /oradata/cjctbs.dbf (6) Block: 175 Offsets: 8171 to 8191 Dba:0x018000af------------------------------------------------------- 636a632c 01010361 61612c01 0103636a l cjc,...aaa,...cj 630106fe 3d l c...=
9.COPY
把一个block的内容copy到另一个block中。
复制命令用于将块从一个位置复制到另一个位置。
与其他命令一样,可以指定文件或文件名和偏移量,也可以指定DBA。
The copy command is used to copy blocks from one location to another. As with other commands, the file or filename and offset can be specified, or the DBA can bespecified instead.
BBED> help copyCOPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]
例如:
命令格式如下(危险命令,慎用!):
---BBED> copy dba 6,175 to dba 6,100
10.MODIFY
modify命令用于更改块内的数据。
可以使用命令指定要修改的DBA, Filename, File,Block and/or Offset。
如果未指定这些,则将修改使用set命令建立的当前文件、块和偏移量。
或者,可以指定一个符号或符号指针进行修改。
可以使用与find命令相同的开关在十六进制、十进制、无符号十进制、八进制或字符数据中指定用于覆盖原始数据的字节模式。
The modify command is used to change data inside a block. The DBA, Filename, File,Block and/or Offset to modify can be specified with the command. If these arenot specified the current file, block and offset as established with the setcommand will be modified. Alternatively a symbol or symbol pointer can bespecified for modification.Thepattern of bytes used to overwrite the original can be specified inhexadecimal, decimal, unsigned decimal, octal or character data using the same switches as the find command.
BBED> help MODIFYMODIFY[/x|d|u|o|c] numeric/character string [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
例如:
在file 6,block 175 内存cjc改成chen。
BBED> modify /c chen dba 6, 175 offset 8171 File: /oradata/cjctbs.dbf (6) Block: 175 Offsets: 8171 to 8191 Dba:0x018000af------------------------------------------------------------------------ 6368656e 01010361 61612c01 0103636a 630106fe 3d
验证:
BBED> d /v dba 6,175 offset 8171 count 128 File: /oradata/cjctbs.dbf (6) Block: 175 Offsets: 8171 to 8191 Dba:0x018000af------------------------------------------------------- 6368656e 01010361 61612c01 0103636a l chen...aaa,...cj 630106fe 3d l c...=
注意一点,这里仅仅是修改,还没有进行update,即sum apply, select 才会改变。
SQL> select * from t3;XXX----------cjcaaaxxx cjc
11.ASSIGN
assign命令执行符号赋值,并进行类型和范围检查。
对于当前偏移量,可以省略目标或源。
例如,以下命令将当前偏移量的结构分配给文件4,即块2的第一个ITL条目。
BBED> assign dba 4, 2 ktbbhitl[0]
The assign command does symbolic assignment, with type and range checking. Either target or source can be omitted for the current offset.For example, the following command assigns structure at current offset to file 4,block 2 ”s first ITL entry
BBED> help ASSIGNASSIGN[/x|d|u|o] = : [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ] : [ value | ]
12.SUM
sum命令用于检查和设置块校验和。
可以使用命令指定要检查的DBA、文件名、文件、块和/或偏移量。
如果未指定这些,则将检查使用set命令建立的当前文件、块和偏移。
apply指令可用于更新校验和。
The sum command is used to check and set the block checksum. The DBA, Filename,File, Block and/or Offset to check can be specified with the command. If these are not specified the current file, block and offset as established with theset command will be checked.The apply directive can be used to update the checksum.
计算block的checksum,modify之后block就被标识为坏块,current checksum与reqired checksum不一致,sum命令可以计算出新的checksum并应用到当前块。
我们可以使用bbed 对block 进行修改。
要使这些修改生效,就要使用sum命令。
BBED> help sumSUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
例如:
BBED> sum dba 6,175Check value for File 6, Block 175:current = 0x41c9, required = 0x4789BBED> sum dba 6,175 applyCheck value for File 6, Block 175:current = 0x4789, required = 0x4789
没生效
SQL> select * from t3;XXX----------cjcaaaxxx cjc
清空buffer_cache
SQL> alter system flush buffer_cache;
查看,修改的有些问题,需要回退
SQL> select * from t3;XXX----------cjcaa,cjcxxx che
13/14.PUSH/POP
push命令将对象放到内存的stack,pop 将对象从内存写回磁盘。
这允许在检查或修改另一个位置时临时保存正在编辑的当前位置。
请注意,堆栈只存储位置,而不保存内容。
The push and pop commands are used to push a file, block and offset location on to a memory backed stack and then pop them back. This allows a current locationbeing edited to be temporarily saved while another location is examined ormodified.Note that the stack only stores the locationœ it does notsave the contents.The following example shows file 7, block 16, offset 8163 being examined. The location is saved with the push command. We then move to file 6, block 1 before returning to DBA 7,16 with the pop command.
BBED> help PUSHPUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]BBED> help POPPOP [ALL]
以下示例显示了正在检查的文件7,块16,偏移8163。
使用push命令保存位置。
然后,我们转到文件6的块1,然后用pop命令返回DBA 7,16。
BBED> push dba 7,16DBA 0x01c00010 (29360144 7,16)OFFSET 8163BBED> set dba 6,1DBA 0x01800001 (25165825 6,1)BBED> popDBA 0x01c00010 (29360144 7,16)OFFSET 8163
15.REVERT
revert是恢复自bbed 启动以来的所有修改。
The revert command is used to restore a file, filename, block or DBA to it‘soriginal state when bbed was started.
BBED> help REVERTREVERT [ DBA | FILE | FILENAME | BLOCK ]
回退
BBED> revert dba 6,175
All changes made to this block will be rolled back. Proceed? (Y/N) YReverted file '/oradata/cjctbs.dbf', block 175
BBED> sum dba 6,175 applyCheck value for File 6, Block 175:current = 0x41c9, required = 0x41c9
检查数据,没生效
SQL> select * from t3;XXX----------cjcaa,cjcxxx che
清空buffer_cache
SQL> alter system flush buffer_cache;
生效了
SQL> select * from t3;XXX----------cjcaaaxxx cjc
16.UNDO
回滚当前的修改操作,如果手误做错了,undo一下就ok了,回到原来的状态。
undo命令回滚最后一个修改或分配命令。
如果再次发出undo命令,则会重新进行修改。
The undo command rolls back the last modify or assign command. If the undo commandis issued again the modification is re-done.
BBED> help UNDOBBED> UNDO
自动出现下面信息:
BBED> modify /x 636A632C filename '/oradata/cjctbs.dbf' block 175. offset 8171. File: /oradata/cjctbs.dbf (6) Block: 175 Offsets: 8171 to 8191 Dba:0x018000af------------------------------------------------------------------------ 636a632c 01010361 61612c01 0103636a 630106fe 3d BBED> d /v dba 6,175 offset 8171 count 128 File: /oradata/cjctbs.dbf (6) Block: 175 Offsets: 8171 to 8191 Dba:0x018000af------------------------------------------------------- 636a632c 01010361 61612c01 0103636a l cjc,...aaa,...cj 630106fe 3d l c...=
17.HELP
帮助信息
BBED> help helpHELP [ | ALL ]
18.VERIFY
检查当前环境是否有坏块。
verify命令用来验证block的完整性。
verify命令用于验证块的完整性。
它执行与dbverify实用程序类似的功能。
The verify command is used to verify the integrity of the block.It performs asimilar function to the dbverify utility.
BBED> help VERIFYVERIFY [ DBA | FILE | FILENAME | BLOCK ]
例如:
BBED> verify dba 6,175DBVERIFY - Verification startingFILE = /oradata/cjctbs.dbfBLOCK = 175
DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED
19.CORRUPT
corrupt命令将一个block 标记为corrupt,这样db 在操作时就会跳过该block,从而避免错误。
Thec orrupt command is used to mark blocks as media corrupt.
例如:
BBED> corrupt dba 6,175
注意:undo 命令不能undo 一个corruption,但是revert 命令却可以。
参考:
主要参考戴老师CSDN博客《Oracle BBED 工具 说明》
https://blog.csdn.net/tianlesoftware/article/details/5006580
参考的其他文章:
https://www.cnblogs.com/guopengcheng/articles/15074000.htmlhttps://www.cnblogs.com/guopengcheng/articles/15075008.htmlhttps://www.cnblogs.com/guopengcheng/articles/15075238.htmlhttps://blog.csdn.net/qq_22960681/article/details/131932447https://blog.csdn.net/gumengkai/article/details/53187529https://blog.itpub.net/29785807/viewspace-2128326/
欢迎关注我的公众号《IT小Chen》
###chenjuchao 20240415###