【BBED】BBED基礎知識

恩強Boy發表於2020-11-25

一、  BBED 介紹

BBED(Block Browerand EDitor Tool) ,用來直接檢視和修改資料檔案資料的一個工具,是 Oracle 一款內部工具,可以直接修改 Oracle 資料檔案塊的內容,在一些極端恢復場景下比較有用。該工具不受 Oracle 支援,所以預設是沒有生成可執行檔案的,在使用前需要重新 連結

二、  BBED 安裝

10g 11g oracle bbed 的安裝方式有所不同的是 , 編譯 11g BBED 的時候,會報出庫 obj 檔案缺失的錯誤。解決的思路也很簡單,就是從 Oracle10g 下對應的 bbedus.msb sbbdpt.o ssbbded.o  檔案複製出 。其中,將 sbbdpt.o ssbbded.o  放在 $ORACLE_HOME/rdbms/lib 目錄下; bbedus.msb 放在 $ORACLE_HOME/rdbms/mesg 目錄下。

$ mv ssbbded.o sbbdpt.o /u01/app/oracle/product/11.2.0/db_1/rdbms/lib/

$ mv bbedus.msb /u01/app/oracle/product/11.2.0/db_1/rdbms/mesg/

執行以下命令進行編譯

$ cd $ORACLE_HOME/rdbms/lib

$ make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

rm -f /u01/app/oracle/product/ 11.2.0 /db_1/rdbms/lib/bbed  gcc -o/u01/app/oracle/product/ 11.2.0 /db_1/rdbms/lib/bbed-L/u01/app/oracle/product/ 11.2.0 /db_1/rdbms/lib/-L/u01/app/oracle/product/ 11.2.0 /db_1/lib/-L/u01/app/oracle/product/ 11.2.0 /db_1/lib/stubs/ -L/usr/lib -lirc /u01/app/oracle/product/ 11.2.0 /db_1/lib/s0main.o/u01/app/oracle/product/ 11.2.0 /db_1/rdbms/lib/ssbbded.o/u01/app/oracle/product/ 11.2.0 /db_1/rdbms/lib/sbbdpt.o  cat/u01/app/oracle/product/ 11.2.0 /db_1/lib/ldflags  -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10-lnnz10 -lnl10 /u01/app/oracle/product/ 11.2.0 /db_1/rdbms/lib/defopt.o-ldbtools10 -lclntsh cat/u01/app/oracle/product/ 11.2.0 /db_1/lib/ldflags -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lnro10 cat /u01/app/oracle/product/ 11.2.0 /db_1/lib/ldflags -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lmm -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10-lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 cat/u01/app/oracle/product/ 11.2.0 /db_1/lib/ldflags -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lnro10 cat/u01/app/oracle/product/ 11.2.0 /db_1/lib/ldflags -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10 -lcore10-lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10-lnls10 -lcore10 -lnls10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10-lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 cat/u01/app/oracle/product/ 11.2.0 /db_1/lib/sysliblist-Wl,-rpath,/u01/app/oracle/product/ 11.2.0 /db_1/lib -lm cat /u01/app/oracle/product/ 11.2.0 /db_1/lib/sysliblist-ldl -lm -L/u01/app/oracle/product/ 11.2.0 /db_1/lib “` 

三、進入bbed

1. 檢視相關引數

相關的引數可以透過help 檢視:

$ 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]

2.BBED 的通常用法

一般使用bbed ,都是將一些配置資訊寫入到一個引數文字里,在呼叫 bbed 時,指定該引數檔案。如:

$   bbedparfile=bbed.par

 

這裡我們先演示一個示例。

1) 先獲取datafile 的資訊

datafile 的資訊寫入一個檔案,格式為:檔案編號  檔名字 檔案大小。可以透過如下 SQL    獲取:

SQL> set pages 200

SQL> select file#||' '||name||' '||bytes from v$datafile ;

FILE#||''||NAME||''||BYTES

---------------------------------------------------------

1 /u01/app/oracle/oradata/orcl/system01.dbf 786432000

2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 576716800

3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 94371840

4 /u01/app/oracle/oradata/orcl/users01.dbf 5242880

5 /u01/app/oracle/oradata/orcl/example01.dbf 328335360

6 /u01/app/oracle/oradata/orcl/test01.dbf 52428800

7 /u01/app/oracle/oradata/orcl/test02.dbf 62914560

2 將上面查詢出來的datafile 資訊儲存到文字里。

$  vi  / home/oracle /filelist.txt

1 /u01/app/oracle/oradata/orcl/system01.dbf 786432000

2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 576716800

3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 94371840

4 /u01/app/oracle/oradata/orcl/users01.dbf 5242880

5 /u01/app/oracle/oradata/orcl/example01.dbf 328335360

6 /u01/app/oracle/oradata/orcl/test01.dbf 52428800

7 /u01/app/oracle/oradata/orcl/test02.dbf 62914560

3 建立parameter file

$ vi  / home/oracle /bbed.par

blocksize=8192

listfile=/ home/oracle /filelist.txt

mode=edit

4 使用parameter file 連線 bbed

$ bbed parfile=/ home/oracle /bbed.par

Password: 預設密碼 blockedit

BBED: Release 2.0.0.0.0 - Limited Production on Mon Nov 9 19:53:48 2020

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       /u01/app/oracle/oradata/dave2/system01.dbf

       BIFILE          bifile.bbd

        LISTFILE        /u01/filelist.txt

       BLOCKSIZE       8192

       MODE            Edit

       EDIT            Unrecoverable

       IBASE           Dec

       OBASE           Dec

       WIDTH           80

       COUNT           512

       LOGFILE         log.bbd

       SPOOL           No

3.BBED 常用命令

$ bbed

Password:   預設密碼 blockedit

BBED: Release 2.0.0.0.0 - Limited Production on Mon Nov 9 18:44:54 2020

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

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

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 ]

常用引數解釋:

Ø  info 檢視 list 檔案內容(可以進行操作的資料檔案)

Ø  set 設定當前的環境  

Ø  show 檢視當前的環境引數,跟 sqlplus 的同名命令類似。  

Ø  dump 列出指定 block 的內容  

Ø  find 在指定的 block 中查詢指定的字串,結果是顯示出字串,及

偏移量–offset ,偏移量就是在 block 中的位元組數  

Ø  modify 修改指定 block 的指定偏移量的值,可以線上修改。  

Ø  copy 把一個 block 的內容 copy 到另一個 block  

Ø  verify 檢查當前環境是否有壞塊  

Ø  sum 計算 block checksum

Ø  undo 回滾當前的修改操作,如果手誤做錯了, undo 一下就 ok 了,回到原來的狀態。  

Ø  revert 回滾所有之前的修改操作

 

 

---- end ----


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2736967/,如需轉載,請註明出處,否則將追究法律責任。