使用BBED修复Oracle坏块恢复方法

  BBED是Block Browser/Editor的缩写,是Oracle的一个内部工具,不对外发布文档及支持。 BBED随软件发布,但是我们需要进行简单的relink才能使用。

  

  虽然BBED工具的使用存在很多风险,但是如果利用得当,可以以之解决很多棘手的问题,并且可以练习坏块修复等技术。

  例如在Oracle10g中的bbed工具,同样需要我们手工relink才能使用,这个版本的工具同样可以在其他版本的数据库中使用:

  [[email protected] 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

  [[email protected] 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.备份数据文件

  本测试中恢复损坏的文件,需要存在一个良好文件,本文简单冷备份一下文件.

  [[email protected] conner]$ cp users01.dbf users01.dbf.bak

  2.修改BBED参数文件

  加入备份文件

  [[email protected] 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

  [[email protected] conner]$ more par.bbd

  blocksize=8192

  listfile=filelist.txt

  mode=edit

  3.破坏数据块

  [[email protected] 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良好数据块进行恢复

  [[email protected] 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需要了解这样一个工具的存在。

时间: 2024-10-06 19:04:35

使用BBED修复Oracle坏块恢复方法的相关文章

基于rman的坏块恢复

转载请注明出处 http://blog.csdn.net/guoyjoe/article/details/30965303   实验步骤如下: 1.使用rman备份全库 Recovery Manager: Release 11.2.0.3.0 - Production on Sun Jun 8 15:30:35 2014 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected t

Oracle Rman修复逻辑坏块

RMAN 实现数据块恢复试用Rman可以实现数据块级的数据恢复,在传统恢复手段中即某个数据文件的一个数据块被损坏,就造成整个数据文件无法试用,此时必须通过备份恢复整个数据文件.显然这样的方法会会时间较长,而RMAN实现块级恢复,如果某个数据文件的数据损坏,通过数据文件的完整备份就可以恢复数据块. 案例:数据库是一个单实例ORACLE数据库,该库的总大小有700G.存储设备使用华为存储,备份设备使用希捷3T的移动硬盘.该数据库无DG无OGG.备份策略为每周六0点全库备份,周三0点1级差异备份其余时

无RMAN备份集情况下的坏块恢复

测试的环境是没有可用的RMAN备份集,但是有数据文件的热备,下面来看测试: --创建测试用户和测试表 [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on 16 16:01:02 2014 Copyright (c) 1982, 2005, Oracle.  All rights reserved. Connected to: Oracle Database 10g Ente

oracle坏块处理记录

1. 执行sql:select count(distinct id) from bw_fpzxx ,报错如下: ORA-01578: ORACLE 数据块损坏 (文件号 16, 块号 195428)ORA-01110: 数据文件 16: '/disk01/hwxx09.dbf'01578. 00000 -  "ORACLE data block corrupted (file # %s, block # %s)" 2.确认block_no 为195428的数据. select id,r

oracle数据库误删恢复方法

一.如果只是误删部分数据或者某条数据可以通过 1.select * from 误删除的表明 as of timestamp to_Date('恢复年月日  时分秒', '恢复时间格式')       where  查询条件; 如:select * from emp as of timestamp to_Date('2014-11-27 16:20:00', 'yyyy-mm-dd hh24:mi:ss')  where ename='scott'           //查询到误删除的数据 2.

AIX系统崩溃后oracle数据库的恢复方法

首先要确保数据库实例的完整性,包括控制文件,日志文件,表空间(系统表空间.用户表空间等). 新建同名数据库实例(表空间.用户等不需要). Sql>shutdown immediate关闭数据库 然后COPY原有文件到新实例文件夹中,也可以将新实例文件夹改名,然后将原有实例文件夹放入同目录下 Sql>startup mount加载原有实例,可能出现控制文件不要可写等相关错误,这时可设置文件权限为可读可写可执行(3个均需设置),加载成功后 Sql>select * from v$tables

Oracle数据库坏块的恢复

模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发生数据丢失.对于被有备份的数据库 发生数据块损坏,可能会发生数据的丢失或数据不丢失,这要根据发生坏块的所在的对象决定的,如索引块发生损坏,数据 就不会丢失,重建索引就可以了,发生数据丢失的多发生在表或分区表数据块上. 1.不丢数据的恢复方法 ---使用rman工具的 blockrecover blo

Oracle corrupt block(坏块) 详解

转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面的说明中,会用到链接中的一些内容. ORA-600 各个参数含义说明 http://blog.csdn.net/tianlesoftware/article/details/6645809 Oracle 不同故障的恢复方案 http://blog.csdn.net/tianlesoftware/ar

【转】基于RMAN实现坏块介质恢复(blockrecover)

本文转自:乐沙弥的世界 对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据块.恢复整个数据库或数据文件那不是大炮用来打蚊子,有点不值得!但前提条件是你得有一个可用的RMAN备份存在,因此,无论何时备份就是一切.本文演示了产生坏块即使用RMAN实现坏块恢复的全过程. 1.创建演示环境 SQL> select * from v$version where rownum<2;