使用BBED修復Oracle壞塊恢復方法


  BBED是Block Browser/Editor的縮寫,是Oracle的一個內部工具,不對外發布文檔及支持。 BBED隨軟件發布,但是我們需要進行簡單的relink才能使用。

  

 

  雖然BBED工具的使用存在很多風險,但是如果利用得當,可以以之解決很多棘手的問題,並且可以練習壞塊修復等技術。

  例如在Oracle10g中的bbed工具,同樣需要我們手工relink才能使用,這個版本的工具同樣可以在其他版本的數據庫中使用:

  [oracle@danaly lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

  Linking BBED utility (bbed)

  rm -f /opt/oracle/product/10.2.0/rdbms/lib/bbed

  gcc -o /opt/oracle/product/10.2.0/rdbms/lib/bbed ...

  -L/opt/oracle/product/10.2.0/lib

  [oracle@danaly lib]$ bbed

  Password:

  BBED: Release 2.0.0.0.0 - Limited Production on Sun Sep 3 12:42:59 2006

  Copyright (c) 1982, 2005, Oracle. 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 [ | ALL ]

  POP [ALL]

  REVERT [ DBA | FILE | FILENAME | BLOCK ]

  UNDO

  HELP [ | ALL ]

  VERIFY [ DBA | FILE | FILENAME | BLOCK ]

  CORRUPT [ DBA | FILE | FILENAME | BLOCK ]

  Oracle Database 11g中缺省的未提供BBED庫文件,但是可以用10g的文件編譯出來,參考如下步驟:

  1.復制Oracle 10g文件

  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.編譯

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

  BBED的缺省口令為blockedit,請謹慎使用,內部工具。Oracle不做技術支持。

  我前面提到,可以通過這個工具模擬壞塊,以便進行壞塊相關的學習和研究,以下是一個示例.

  1.備份數據文件

  本測試中恢復損壞的文件,需要存在一個良好文件,本文簡單冷備份一下文件.

  [oracle@jumper conner]$ cp users01.dbf users01.dbf.bak

  2.修改BBED參數文件

  加入備份文件

  [oracle@jumper conner]$ vi filelist.txt

  1 /opt/oracle/oradata/conner/system01.dbf 440401920

  2 /opt/oracle/oradata/conner/undotbs01.dbf 104857600

  3 /opt/oracle/oradata/conner/users01.dbf 27262976

  4 /opt/oracle/oradata/conner/users01.dbf.bak 27262976

  ~

  ~

  ~

  "filelist.txt" 4L, 259C written

  [oracle@jumper conner]$ more par.bbd

  blocksize=8192

  listfile=filelist.txt

  mode=edit

  3.破壞數據塊

  [oracle@jumper conner]$ bbed parfile=par.bbd

  Password:

  BBED: Release 2.0.0.0.0 - Limited Production on Sun Sep 11 22:30:11 2005

  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

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

  BBED> set file 3

  FILE# 3

  BBED> modify 1000 file 3 block 17

  Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y

  File: /opt/oracle/oradata/conner/users01.dbf (3)

  Block: 17 Offsets: 0 to 511 Dba:0x00c00011

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

  03e80000 1100c000 75b5a320 00000104 06300000 01000000 611e0000 72b5a320

  00000000 03003201 0900c000 ffff0000 00000000 00000000 00000000 00800000

  72b5a320 00000000 00000000 00000000 00000000 00000000 00000000 00000000

  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00012600

  ffff5e00 d5037703 77030000 2600c21e 101e581d a91cf61b 471b941a dd192819

  6218b417 06175216 9715dd14 26146c13 b4120712 44118310 bc0ffa0e 380e790d

  b60cf40b 350b790a c0090409 45088b07 cc060e06 57059804 d5030000 00000000

  <32 bytes per line>

  BBED> verify

  DBVERIFY - Verification starting

  FILE = /opt/oracle/oradata/conner/users01.dbf

  BLOCK = 17

  Block 17 is corrupt

  ***

  Corrupt block relative dba: 0x00c00011 (file 0, block 17)

  Bad header found during verification

  Data in bad block -

  type: 3 format: 0 rdba: 0x00c00011

  last change scn: 0x0000.20a3b575 seq: 0x1 flg: 0x04

  consistency value in tail: 0xb5750601

  check value in block header: 0x3006, computed block checksum: 0xea05

  spare1: 0x0, spare2: 0x0, spare3: 0x0

  ***

  BBED> quit

  4.從備份文件中copy良好數據塊進行恢復

  [oracle@jumper conner]$ bbed parfile=par.bbd

  Password:

  BBED: Release 2.0.0.0.0 - Limited Production on Sun Sep 11 22:33:55 2005

  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

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

  BBED> set file 4

  FILE# 4

  BBED> show

  FILE# 4

  BLOCK# 1

  OFFSET 0

  DBA 0x01000001 (16777217 4,1)

  FILENAME /opt/oracle/oradata/conner/users01.dbf.bak

  BIFILE bifile.bbd

  LISTFILE filelist.txt

  BLOCKSIZE 8192

  MODE Edit

  EDIT Unrecoverable

  IBASE Dec

  OBASE Dec

  WIDTH 80

  COUNT 512

  LOGFILE log.bbd

  SPOOL No

  BBED> copy file 4 block 17 to file 3 block 17;

  Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y

  File: /opt/oracle/oradata/conner/users01.dbf (3)

  Block: 17 Offsets: 0 to 511 Dba:0x00c00011

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

  06020000 1100c000 75b5a320 00000104 06300000 01000000 611e0000 72b5a320

  00000000 03003201 0900c000 ffff0000 00000000 00000000 00000000 00800000

  72b5a320 00000000 00000000 00000000 00000000 00000000 00000000 00000000

  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00012600

  ffff5e00 d5037703 77030000 2600c21e 101e581d a91cf61b 471b941a dd192819

  6218b417 06175216 9715dd14 26146c13 b4120712 44118310 bc0ffa0e 380e790d

  b60cf40b 350b790a c0090409 45088b07 cc060e06 57059804 d5030000 00000000

  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

  <32 bytes per line>

  BBED> verify

  DBVERIFY - Verification starting

  FILE = /opt/oracle/oradata/conner/users01.dbf

  BLOCK = 17

  DBVERIFY - Verification complete

  Total Blocks Examined : 1

  Total Blocks Processed (Data) : 1

  Total Blocks Failing (Data) : 0

  Total Blocks Processed (Index): 0

  Total Blocks Failing (Index): 0

  Total Blocks Empty : 0

  Total Blocks Marked Corrupt : 0

  Total Blocks Influx : 0

  這樣就通過一個完好文件的完好數據塊復制,完成了簡單的復制恢復。

  5.數據庫驗證

  原文鏈接里包含詳細的表創建和其他步驟,供參考。

  SQL> select count(*) from bbed;

  select count(*) from bbed

  *

  ERROR at line 1:

  ORA-01578: ORACLE data block corrupted (file # 3, block # 17)

  ORA-01110: data file 3: '/opt/oracle/oradata/conner/users01.dbf'

  SQL> alter tablespace users offline;

  Tablespace altered.

  SQL> alter tablespace users online;

  Tablespace altered.

  SQL> select count(*) from bbed;

  COUNT(*)

  ----------

  523

  善用BBED可以從很多棘手的問題中拯救我們的數據庫,作為Oracle DBA需要了解這樣一個工具的存在。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM