Oracle之BBED之BBED的编译及简单设置(一)

BBED是Oracle提供的用于直接查看和修改数据文件的内部工具。本文介绍如何在Linux环境下编译安装BBED,并提供了使用说明,包括设置环境参数、查看块内容、修改数据等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、BBED简介:

BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。

二、BBED的编译和安装

本文特指在linux环境中编译安装,在windows中是没有的。

在9i或10g中直接编译生成

[oracle@Oracle10g ~]$ cd /u01/app/oracle/product/10.2.0/db_1/rdbms     
[oracle@Oracle10g lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

查看生成bbed

[oracle@Oracle10g lib]$ ls
bbed          kecwr.o         libqsmashr.a  skfodpt.o
config.c      kfod.o          libskgxns.a   skrmpt.o
config.o      kgupc.o         libskgxpd.a   skrnpt.o
cursize.o     kgutc.o         libskgxpg.a   skrspt.o
dbfsize.o     kkpoban.o       libskgxpr.a   sllfls.o
defopt.o      kkxntp.o        libskgxpu.a   srfsd.o
dmndm.o       kkxwtp.o        libxdb.a      ssbbded.o
dmndmse.o     kopc.o          mapsga.o      sskfeded.o
其他文件略

以上生成的BBED可执行文件在¥ORACLE_HOME/rdbms/lib目录中,可以复制到其他位置或者其他不同的Oracle版本的机器上运行。

也可以通过以下命令将bbed生成到$ORACLE_HOME/bin目录(注意和直接编译生成的不同)

[oracle@Oracle10g lib]$ make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

由于Oracle Database 11g中没有提供BBED库文件,但是可以用10g的文件编译出来,需要先从10g中复制如下文件到相应目录,然后再执行上述命令,参考如下步骤:

(1)复制Oracle10g文件(注意目录不同)

Copy $ORA10g_HOME/rdbms/lib/ssbbded.o to$ORA11g_HOME/rdbms/lib
Copy $ORA10g_HOME/rdbms/lib/sbbdpt.o to $ORA11g_HOME/rdbms/lib
Copy $ORA10g_HOME/rdbms/mesg/bbedus.msb to $ORA11g_HOME/rdbms/mesg
Copy $ORA10g_HOME/rdbms/mesg/bbedus.msg to $ORA11g_HOME/rdbms/mesg
Copy $ORA10g_HOME/rdbms/mesg/bbedar.msb to $ORA11g_HOME/rdbms/mesg

(2)编译

[oracle@Oracle11gR2 lib]$ make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

2.使用BBED

BBED是Oracle内部使用的命令,默认密码是blockedit

[oracle@Oracle11gR2 lib]$ bbed
Password: (blockedit)
BBED: Release 2.0.0.0.0 - Limited Production on Sat Apr 9 08:36:43 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> 

相关参数可以使用help进行查看:

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与reqired checksum不一致,sum命令可以计算出新的checksum并应用到当前块。

undo 回滚当前的修改操作,如果手误做错了,undo一下就ok了,回到原来的状态。

revert 回滚所有之前的修改操作,意思就是 undo all

三、set命令:

1)设置listfile

BBED> set listfile '/home/oracle/bbed.list' 
BBED-00300: unable to translate filename(报错是正常的,可以通过show all查看配置)

2)设置filename

BBED> set filename '/u01/app/oracle/oradata/test.dbf' 
FILENAME       /u01/app/oracle/oradata/test.dbf

3)设置BLOCK(通过rowid获取)

BBED> set BLOCK 135
BLOCK#         135

4)设置count

BBED> set count 8192 
COUNT           8192

5)设置file(通过rowid获取)

BBED> set file 5
FILE#           5
6)通过show all查看BBED配置

BBED> show all
FILE#           0
BLOCK#         135
OFFSET         0
DBA             0x00000000 (0 0,135)
FILENAME       /u01/app/oracle/oradata/test.dbf
BIFILE         bifile.bbd
LISTFILE       /home/oracle/bbed.list
BLOCKSIZE       8192
MODE           Browse
EDIT           Unrecoverable
IBASE           Dec
OBASE           Dec
WIDTH           80
COUNT           8192
LOGFILE         log.bbd
SPOOL           N

7)dump文件

BBED> dump
 File: /u01/app/oracle/oradata/test.dbf (5)
 Block: 135              Offsets:    0 to 8191           Dba:0x01400087
------------------------------------------------------------------------
 06a20000 87004001 d5850400 00000406 80a40000 01000000 bd350000 38710400 
 00000000 02003200 80004001 09001200 de000000 4b59c000 26003200 03200000 
 d5850400 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00010300 ffff1800 711f591f 591f0000 03008b1f 7e1f711f 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 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 002c0102 02c10406 43434343 
 43432c01 0202c103 06424242 4242422c 010202c1 02064141 41414141 0406d585


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值