【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 ]
View Code

  下面是几个常用的:

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

 

未完请看下篇文章......

 

posted @ 2021-07-29 10:45  蟹Bro  阅读(702)  评论(0编辑  收藏  举报