【Oracle坏块】BBED工具安装以及参数介绍(一)
BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。
一、安装BBED
下载地址:
------32位 https://files.cnblogs.com/files/blogs/693873/bbed_10g_src_x32.rar ------64位 https://files.cnblogs.com/files/blogs/693873/bbed_10g_src_x64.rar
- 把sbbdpt.o、ssbbed.o文件上传到$ORACLE_HOME/rdbms/lib目录下
- 把bbedus.msb、bbedus.msg文件上传到$ORACLE_HOME/rdbms/mesg目录下
------编译
[oracle@T1 lib]$ make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
二、使用BBED
BBED是Oracle 内部使用的命令,所以Oracle 不提供技术支持。 为了安全,BBED设置了口令保护,默认密码为blockedit。
一般使用bbed,都是将一些配置信息写入到一个参数文本里,在调用bbed时,指定该参数文件。如:$bbedparfile=bbed.par
相关参数可以通过help命令查看:
[oracle@T1 ~]$ bbed help=y PASSWORD - Required parameter FILENAME - Database file name BLOCKSIZE - Database block size LISTFILE - List file name MODE - [browse/edit] SPOOL - Spool to logfile [no/yes] CMDFILE - BBED command file name LOGFILE - BBED log file name PARFILE - Parameter file name BIFILE - BBED before-image file name REVERT - Rollback changes from BIFILE [no/yes] SILENT - Hide banner [no/yes] HELP - Show all valid parameters [no/yes]
演示示例:
1、将datafile的信息写入一个文件,格式为:文件编号 文件名字 文件大小。可以通过如下SQL获取:
SQL> set pagesize 200 SQL> select file#||' '||name||' '||bytes from v$datafile; FILE#||''||NAME||''||BYTES -------------------------------------------------------------------------------- 1 /u01/app/oracle/oradata/T1/system01.dbf 975175680 3 /u01/app/oracle/oradata/T1/sysaux01.dbf 744488960 4 /u01/app/oracle/oradata/T1/undotbs01.dbf 351272960 5 /u01/app/oracle/oradata/T1/pdbseed/system01.dbf 283115520 6 /u01/app/oracle/oradata/T1/pdbseed/sysaux01.dbf 346030080 7 /u01/app/oracle/oradata/T1/users01.dbf 5242880 8 /u01/app/oracle/oradata/T1/pdbseed/undotbs01.dbf 104857600 9 /u01/app/oracle/oradata/T1/pdb/system01.dbf 293601280 10 /u01/app/oracle/oradata/T1/pdb/sysaux01.dbf 377487360 11 /u01/app/oracle/oradata/T1/pdb/undotbs01.dbf 104857600 12 /u01/app/oracle/oradata/T1/pdb/users01.dbf 5242880 16 /u01/app/oracle/oradata/T1/pdb/test.dbf 10485760 12 rows selected.
注意,这里的file id。 我们这里的file id和oracle 系统内部的file id 相同。当然这个id 我们也可以自己指定。当我们在bbed 里设置file id 时,就是根据这个参数文件中的的设置来的。 最好设置为相同,不然以后可能会混淆。
将上面信息保存到文本中
[oracle@T1 bbed_profile]$ cat /u01/app/bbed_profile/bbed_filelist.txt 1 /u01/app/oracle/oradata/T1/system01.dbf 975175680 3 /u01/app/oracle/oradata/T1/sysaux01.dbf 744488960 4 /u01/app/oracle/oradata/T1/undotbs01.dbf 351272960 5 /u01/app/oracle/oradata/T1/pdbseed/system01.dbf 283115520 6 /u01/app/oracle/oradata/T1/pdbseed/sysaux01.dbf 346030080 7 /u01/app/oracle/oradata/T1/users01.dbf 5242880 8 /u01/app/oracle/oradata/T1/pdbseed/undotbs01.dbf 104857600 9 /u01/app/oracle/oradata/T1/pdb/system01.dbf 293601280 10 /u01/app/oracle/oradata/T1/pdb/sysaux01.dbf 377487360 11 /u01/app/oracle/oradata/T1/pdb/undotbs01.dbf 104857600 12 /u01/app/oracle/oradata/T1/pdb/users01.dbf 5242880 16 /u01/app/oracle/oradata/T1/pdb/test.dbf 10485760
2、创建parameter file:
[oracle@T1 bbed_profile]$ cat /u01/app/bbed_profile/bbed.par blocksize=8192 listfile=/u01/app/bbed_profile/bbed_filelist.txt mode=edit
3、使用parameter file连接bbed
[oracle@T1 ~]$ bbed parfile=/u01/app/bbed_profile/bbed.par Password: BBED: Release 2.0.0.0.0 - Limited Production on Thu Jul 29 09:55:52 2021 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. ************* !!! For Oracle Internal Use only !!! ***************
三、BBED参数说明
查看帮助说明:
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 ]
下面是几个常用的:
set | 设置当前的环境 |
show | 查看当前的环境参数,跟sqlplus的同名命令类型 |
dump | 列出指定的block内容 |
find | 在指定的block种查找指定的字符串,结果是显示出字符串,以及其偏移量offset,偏移量就是在block中的字节数 |
modify | 修改指定的block的指定偏移量的值,可以在线修改 |
copy | 把一个block的内容copy到另一个block中 |
verify | 检查当前的环境是否有坏块 |
sum | 计算block的checksum,modify之后block就被标识为坏块,current checksum与require checksum不一致,sum命令可以计算出新的checksum并应用到当前块 |
undo | 回滚当前的修改操作,如果是手误了,undo一下就ok,回来原来状态 |
revert | 回滚之前所有操作,意思就是undo all |
1、SET命令
1.1 set dba
创建test表
SQL> create table test as select * from dba_objects;
查看块信息
SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid)rel_fno,dbms_rowid.rowid_block_number(rowid)blockno,dbms_rowid.rowid_row_number(rowid) rowno from test where object_id=100; ROWID REL_FNO BLOCKNO ROWNO ------------------ ---------- ---------- ---------- AAASK0AABAAAcc6AAe 1 116538 30
BBED中设置file1,block 116538
BBED> set dba 1,116538 DBA 0x0041c73a (4310842 1,116538) ------如果设置成功,会返回该block的RDBA (Relative Data Block Address),rdba就是rowid中的rfile#+block#。括号里面的是DBA值和block 和 file id
我们验证一下
SQL> variable dba varchar2(30); SQL> exec :dba :=dbms_utility.make_data_block_address(1,116538); PL/SQL procedure successfully completed. SQL> print dba DBA -------------------------------------------------------------------------------- 4310842
1.2 set filename
BBED> set filename '/u01/app/oracle/oradata/T1/users01.dbf' FILENAME /u01/app/oracle/oradata/T1/users01.dbf
------必须是一个有效的datafile,并且要用单引号括起来
1.3 set file
BBED> set file 7 FILE# 7
------这里的number,式之前在filelist文件里的number。它可以和db中的file id不一样,不过最好是一样以防混淆
1.4 set block
------这里的block是一个相对的位置,需要先指定一个file,然后再指定file,然后再指定block。即对应的file里的block。可以相对当前block的位置进行+和-的操作。
BBED> set file 7 FILE# 7 BBED> set block 116538 BBED-00309: out of range block number (116538) BBED> set file 1 FILE# 1 BBED> set block 116538 BLOCK# 116538 BBED> set block +10 BLOCK# 116548 BBED> set block -10 BLOCK# 116538
1.5 set offset
------偏移量是相对某个block里的偏移量,可以用+和-进行操作
BBED> set offset 20 OFFSET 20 BBED> set offset +2 OFFSET 22 BBED> set offset -2 OFFSET 20
1.6 set blocksize
------设置当前的datafile的blocksize大小,该大小必须和datafile的实际block 匹配,否则会报错。
BBED> set blocksize 8192 BLOCKSIZE 8192
1.7 set listfile
------可以通过parameter file来指定bbed的属性,可以通过set来指定这些信息。对于listfile的文件,必须用单引号括起来。
BBED> set listfile '/u01/app/bbed_profile/bbed_filelist.txt' LISTFILE /u01/app/bbed_profile/bbed_filelist.txt
1.8 set width
------设定当前屏幕亮度,默认是80
BBED> set width 200 WIDTH 200
1.9 set count
------设置dump命令显示bytes的数量,默认是512bytes
BBED> set count 512 COUNT 512
1.10 set ibase
------设置内部的数字格式,默认是十进制。可以设置为十六进制或者八进制。设置完数字格式后,可以使用该格式来设置block,offset等。
BBED> set ibase hex IBASE Hex BBED> set block +D BLOCK# 14 BBED> set ibase decimal IBASE Dec
1.11 set mode
------设置bbed 的模式,该默认有2种:browse 和 edit。browse 模式不允许进行修改。如果要修改,就选择edit模式。 这个在之前的配置文件里,选择了edit。
BBED> set mode browse MODE Browse BBED> set mode edit MODE Edit
2、show命令
显示当前的配置:
BBED> show FILE# 1 BLOCK# 14 OFFSET 0 DBA 0x0040000e (4194318 1,14) ------这里block是14,是刚才设置所致 FILENAME /u01/app/oracle/oradata/T1/system01.dbf BIFILE bifile.bbd LISTFILE /u01/app/bbed_profile/bbed_filelist.txt BLOCKSIZE 8192 MODE Edit EDIT Unrecoverable IBASE Dec OBASE Dec WIDTH 200 COUNT 512 LOGFILE log.bbd SPOOL No
3.info
显示当前可以进行browse 或者edit 的file。即我们filelist 里指定的datafile信息。
BBED> set width 65 WIDTH 65 BBED> info File# Name Size(blks) ----- ---- ---------- 1 /u01/app/oracle/oradata/T1/system01.dbf 119040 3 /u01/app/oracle/oradata/T1/sysaux01.dbf 90880 4 /u01/app/oracle/oradata/T1/undotbs01.dbf 42880 5 /u01/app/oracle/oradata/T1/pdbseed/system01 34560 6 /u01/app/oracle/oradata/T1/pdbseed/sysaux01 42240 7 /u01/app/oracle/oradata/T1/users01.dbf 640 8 /u01/app/oracle/oradata/T1/pdbseed/undotbs0 12800 9 /u01/app/oracle/oradata/T1/pdb/system01.dbf 35840 10 /u01/app/oracle/oradata/T1/pdb/sysaux01.dbf 46080 11 /u01/app/oracle/oradata/T1/pdb/undotbs01.db 12800 12 /u01/app/oracle/oradata/T1/pdb/users01.dbf 640 16 /u01/app/oracle/oradata/T1/pdb/test.dbf 1280
未完请看下篇文章......