ITPub博客

首页 > 数据库 > Oracle > BBED 安装与使用

BBED 安装与使用

原创 Oracle 作者:bestpaydata 时间:2015-11-02 09:44:21 0 删除 编辑
BBED 安装与使用
 Oracle8i 的BBED在windows 平台下的$ORACLE_HOME/bin下可以找到,9i中似乎未随软件发布,故在windows没有这个工具,
在linux上面有,需要编译。  
在9i/10g中连接生成bbed:
cd $ORACLE_HOME/rdbms/lib
[oracle@yzf lib]$  make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed


Linking BBED utility (bbed)
rm -f /oracle/db/11.2.0.3/rdbms/lib/bbed
gcc -o /oracle/db/11.2.0.3/rdbms/lib/bbed -m64 -L/oracle/db/11.2.0.3/rdbms/lib/ -L/oracle/db/11.2.0.3/lib/ -L/oracle/db/11.2.0.3/lib/stubs/  /oracle/db/11.2.0.3/lib/s0main.o /oracle/db/11.2.0.3/rdbms/lib/ssbbded.o /oracle/db/11.2.0.3/rdbms/lib/sbbdpt.o `cat /oracle/db/11.2.0.3/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -ldbtools11 -lclntsh  `cat /oracle/db/11.2.0.3/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /oracle/db/11.2.0.3/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/db/11.2.0.3/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /oracle/db/11.2.0.3/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/db/11.2.0.3/lib/sysliblist` -Wl,-rpath,/oracle/db/11.2.0.3/lib -lm    `cat /oracle/db/11.2.0.3/lib/sysliblist` -ldl -lm   -L/oracle/db/11.2.0.3/lib
gcc: /oracle/db/11.2.0.3/rdbms/lib/ssbbded.o:没有那个文件或目录
gcc: /oracle/db/11.2.0.3/rdbms/lib/sbbdpt.o:没有那个文件或目录
make: *** [/oracle/db/11.2.0.3/rdbms/lib/bbed] 错误 1
缺少/oracle/db/11.2.0.3/rdbms/lib/ssbbded.o、 /oracle/db/11.2.0.3/rdbms/lib/sbbdpt.o  两个文件导致不能编译,故需从10G 环境寻找这两个文件,或网上下载
http://download.csdn.net/download/jycjyc/4578006
[oracle@yzf vm_share]$ cp sbbdpt.o  $ORACLE_HOME/rdbms/lib
[oracle@yzf vm_share]$ cp ssbbded.o  $ORACLE_HOME/rdbms/lib
[oracle@yzf vm_share]$ cp bbedus.msb   $ORACLE_HOME/rdbms/mesg
 BBED是Oracle 内部使用的命令,所以Oracle 不提供技术支持。 为了安全,BBED设置了口令保护,默认密码为blockedit
[oracle@yzf lib]$ bbed
Password: 


BBED: Release 2.0.0.0.0 - Limited Production on Wed Oct 28 10:35:49 2015


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


************* !!! For Oracle Internal Use only !!! ***************


BBED> 
BBED 安装OK
------------------------------------------------------------------------------------------------------------
BBED 损坏块:
create tablespace  CORRUPT_TAB datafile '/oracle/db/oradata/co_tab.dbf' size 10M;
create table sdfd tablespace CORRUPT_TAB as select * from dba_tables;
create index sdsfd on sdfd(table_name)tablespace CORRUPT_TAB;
SQL>  select file#||' '||name||' '||bytes from v$datafile ;
FILE#||''||NAME||''||BYTES


OWNER      OBJECT_NAME          OBJECT_ID DATA_OBJECT_ID SUBOBJECT_ OBJECT_TYP
---------- -------------------- --------- -------------- ---------- ----------
DSG        SDFD                     83112          83112            TABLE     


查询对象SDFD  所在的dba:
select max(rowid),min(rowid)  from  SDFD
AAAUSoAAKAAAAHhAAG AAAUSoAAKAAAAFzAAA
SQL>  select dbms_rowid.rowid_object('&&rowid') data_object_id#,
  2         dbms_rowid.rowid_relative_fno('&&rowid') rfile#,
  3         dbms_rowid.rowid_block_number('&&rowid') block#,
  4         dbms_rowid.rowid_row_number('&&rowid') row#
  5   from dual;
Enter value for rowid: AAAUSoAAKAAAAHhAAG


DATA_OBJECT_ID#     RFILE#     BLOCK#       ROW#
--------------- ---------- ---------- ----------
          83112         10        481          6
Enter value for rowid: AAAUSoAAKAAAAFzAAA


DATA_OBJECT_ID#     RFILE#     BLOCK#       ROW#
--------------- ---------- ---------- ----------
          83112         10        371          0


1 将上面查询出来的datafile信息保存到文本里
[oracle@yzf ~]$ cat filelist.txt
1 /oracle/db/oradata/yzf/system01.dbf 2013265920
2 /oracle/db/oradata/yzf/sysaux01.dbf 692060160
3 /oracle/db/oradata/yzf/undotbs01.dbf 833617920
4 /oracle/db/oradata/yzf/users01.dbf 2233466880
5 /oracle/db/oradata/yzf/goldengate.dbf 209715200
6 /oracle/db/oradata/yzf/CR_PAY_DATA.DBF 10485760
7 /oracle/db/oradata/yzf/CR_PAY_IDX.DBF 10485760
8 /oracle/db/oradata/yzf/crpay_data.dbf 10485760
9 /oracle/db/oradata/yzf/crpay_idx.dbf 10485760
10 /oracle/db/oradata/co_tab.dbf 10485760
2 创建parameter file:
[oracle@db2 ~]$ cat bbed.par
blocksize=8192
listfile=/u01/filelist.txt
mode=edit 
3 使用parameter file 连接bbed:


[oracle@yzf ~]$ bbed parfile=bbed.par
Password: 


BBED: Release 2.0.0.0.0 - Limited Production on Wed Oct 28 11:39:20 2015


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


************* !!! For Oracle Internal Use only !!! ***************


BBED> show
        FILE#           1
        BLOCK#          1
        OFFSET          0
        DBA             0x00400001 (4194305 1,1)
        FILENAME        /oracle/db/oradata/yzf/system01.dbf
        BIFILE          bifile.bbd
        LISTFILE        /home/oracle/filelist.txt
        BLOCKSIZE       8192
        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE         log.bbd
        SPOOL           No
BBED> set  dba 10,371
        DBA             0x02800173 (41943411 10,371)
 如果设置成功,会返回该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(10,371);


PL/SQL procedure successfully completed.


SQL>  print dba


DBA
--------------------------------
41943411
BBED> show
        FILE#           10
        BLOCK#          371
        OFFSET          0
        DBA             0x02800173 (41943411 10,371)
        FILENAME        /oracle/db/oradata/co_tab.dbf
        BIFILE          bifile.bbd
        LISTFILE        /home/oracle/filelist.txt
        BLOCKSIZE       8192
        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE         log.bbd
        SPOOL           No
BBED> map 
 File: /oracle/db/oradata/co_tab.dbf (10)
 Block: 371                                   Dba:0x02800173
------------------------------------------------------------
 KTB Data Block (Table/Cluster)     


 struct kcbh, 20 bytes                      @0       -- Block Header Structure


 struct ktbbh, 96 bytes                     @20      --Transaction Fixed Header Structure


 struct kdbh, 14 bytes                      @124     --Data Header Structure


 struct kdbt[1], 4 bytes                    @138     --Table Directory Entry Structure


 sb2 kdbr[28]                               @142     --Row Directory


 ub1 freespace[1013]                        @198     


 ub1 rowdata[6977]                          @1211    


 ub4 tailchk                                @8188    --(See Tailchecks below)
Differentblock types are designated by the first byte of the block. The following tableshows how to decode the block type:
不同的block 可以第一个byte的值是不一样的。 具体值对应block 类型如下:
Header Block Types
ID   Type
01   Undo segment header
02   Undo data block
03   Save undo header
04   Save undo data block
05   Data segment header (temp, index, data and so on)
06   KTB managed data block (with ITL)
07   Temp table data block (no ITL)
08   Sort Key
09   Sort Run
10   Segment free list block
11   Data file header
Ifwe wanted to determine the number of rows in the block, we could print the dataheader structure or kdbh:
如果我们想确定block 中row的数量,可以print data header structure 或者kdbh。
BBED> p 
kcbh.type_kcbh
--------------
ub1 type_kcbh                               @0        0x06


BBED> p ktbbh
struct ktbbh, 96 bytes                      @20      
   ub1 ktbbhtyp                             @20       0x01 (KDDBTDATA)
   union ktbbhsid, 4 bytes                  @24      
      ub4 ktbbhsg1                          @24       0x000144a8
      ub4 ktbbhod1                          @24       0x000144a8


BBED> p kdbhnrow
sb2 kdbhnrow                                @126      49
--这个block上总共有49 个rows。
find命令可以用来搜索关键字
BBED> find /c SYSTEM 
COPY  复制块到指定的位置
BBED> copy dba 1,115362 to dba 1,115363
copy 是个危险的命令,慎用。
modify (m)修改
BBED> modify /c
使这些修改生效,就要使用sum命令。
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
--push命令将对象放到内存的stack,pop 将对象从内存写回磁盘


BBED> verify file 10   验证
DBVERIFY - Verification starting
FILE = /oracle/db/oradata/co_tab.dbf


Block Checking: DBA = 41943411, Block Type = KTB-managed data block
data header at 0x2adc8debd27c
kdbchk: fsbo(74) wrong, (hsz 308)
Block 371 failed with check code 6129


DBVERIFY - Verification complete


Total Blocks Examined         : 1280
Total Blocks Processed (Data) : 312
Total Blocks Failing   (Data) : 1
Total Blocks Processed (Index): 14
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 793
Total Blocks Marked Corrupt   : 0
Total Blocks Influx           : 0
Message 531 not found;  product=RDBMS; facility=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 [ | 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 ]
:
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] =
: [ 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 ]
UNDO
HELP [ | ALL ]
VERIFY [ DBA | FILE | FILENAME | BLOCK ]
CORRUPT [ DBA | FILE | FILENAME | BLOCK ]

gt

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30109892/viewspace-1820553/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-01-19

  • 博文量
    126
  • 访问量
    1054964