设为首页 收藏本站
查看: 2467|回复: 0

[经验分享] 使用BBED修复Oracle坏块恢复方法

[复制链接]

尚未签到

发表于 2017-12-11 07:49:49 | 显示全部楼层 |阅读模式
  BBED是Block Browser/Editor的缩写,是Oracle的一个内部工具,不对外发布文档及支持。 BBED随软件发布,但是我们需要进行简单的relink才能使用。
DSC0000.png   虽然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:>  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>  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:>  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>  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:>  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>>
  Tablespace>
  SQL>>
  Tablespace>  SQL> select count(*) from bbed;
  COUNT(*)
  ----------
  523
  善用BBED可以从很多棘手的问题中拯救我们的数据库,作为Oracle DBA需要了解这样一个工具的存在。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-422857-1-1.html 上篇帖子: 如何让其他机器访问你的oracle数据库 下篇帖子: oracle存储过程(返回列表的存储结合游标使用)总结 以及在java中的调用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表