初探bbed

看见高手都是玩这个  改内部数据结构    跳过坏块等案例的
 
-============================
Oracle BBED( Oracle Block Browser and Editor)工具是Oracle内部提供的数据块级别查看和修改工具。借助这个工具,我们可以方便的查看到Oracle块block级别的 存储细节信息,更好的了解Oracle Internal结构技术细节。

  1、环境介绍

  首先,要说明BBED是非Oracle推荐使用的工具,只提供给内部进行恢复处理使用,对外是不提供任何资料和相关技术支持。所以,我们如果计划使用该工具,特别是在生产环境下使用,都是我们的最后选择方案。一定要在有备份能恢复的时候进行使用,否则贸然使用BBED,容易造成数据库启动失败或者更严重的问题。

  BBED提供的版本中,只有Linux/Unix,在Windows上是没有对应版本的。索引使用BBED的环境通常是命令行方式。而且BBED在Oracle内部是没有提供编译好的现成版本,需要我们手工性编译链接操作。

  本篇分别针对Oracle10g和11g上编译BBED方法进行记录,权当一个备忘。

  2、Oracle10g下编译BBED

  本方法适用于Oracle10g以及之前的可见版本。

  首先查看系统中相关环境变量,定位到BBED的库文件目录。

  [oracle@oracle10g~]$ env | grep ORACLE ORACLE_SID=wilson ORACLE_BASE=/u01 ORACLE_HOME=/u01/oracle

  BBED对应的对象object文件通常是在$ORACLE_HOME/rdbms/lib里。

  [oracle@oracle10g~]$ cd $ORACLE_HOME/rdbms/lib [oracle@oracle10glib]$ pwd /u01/oracle/rdbms/lib

  之后,使用Linux系统的make命令进行编译和连接,生成执行程序bbed.

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

  Linking BBED utility (bbed)

  rm -f /u01/oracle/rdbms/lib/bbed gcc -o /u01/oracle/rdbms/lib/bbed -L/u01/oracle/rdbms/lib/ -L/u01/oracle/lib/ -L/u01/oracle/lib/stubs/ -L/usr/lib -lirc /u01/oracle/lib/s0main.o /u01/oracle/rdbms/lib/ssbbded.o /u01/oracle/rdbms/lib/sbbdpt.o `cat /u01/oracle/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 /u01/oracle/rdbms/lib/defopt.o -ldbtools10 -lclntsh `cat /u01/oracle/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u01/oracle/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/oracle/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u01/oracle/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/oracle/lib/sysliblist` -Wl,-rpath,/u01/oracle/lib -lm `cat /u01/oracle/lib/sysliblist` -ldl -lm -L/u01/oracle/lib

  就可以查看到生成的可执行文件bbed.

  [oracle@oracle10glib]$ ls -l bbed -rwxr-xr-x 1 oracle oinstall 540313 Jun 16 09:15 bbed

  通常将bbed拷贝到目录$ORACLE_HOME/bin目录下,因为该目录是被加入到PATH环境变量里,系统全局各个位置都能访问到。之后,就是构建常用的参数文件一类的内容。

  [oracle@oracle10glib]$ cp bbed $ORACLE_HOME/bin

  [oracle@oracle10gbin]$ ls -l bbed -rwxr-xr-x 1 oracle oinstall 540313 Jun 16 09:20 bbed

  [oracle@oracle10gbin]$ cat par.txt blocksize=8192 listfile=filelist.txt mode=edit

  尝试启动BBED.

  [oracle@oracle10gbin]$ bbed Password:

  BBED: Release2.0.0.0.0 - Limited Production on Thu Jun 16 09:23:18 2011

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

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

  BBED>

  安装成功!

 
--============================
 
设置环境
可以使用SQL语句生成
select file#||' '||name||' '||bytes from v$datafile;
 
新建file.txt
 
1 C:\APP\CA\ORADATA\TESTDB\SYSTEM01.DBF 786432000
2 C:\APP\CA\ORADATA\TESTDB\SYSAUX01.DBF 713031680
3 C:\APP\CA\ORADATA\TESTDB\UNDOTBS01.DBF 99614720
4 C:\APP\CA\ORADATA\TESTDB\USERS01.DBF 275251200
5 C:\APP\CA\ORADATA\TESTDB\EXAMPLE01.DBF 104857600
6 C:\APP\CA\PRODUCT\11.2.0\DBHOME_1\TEST_DATA01.DBF 33554432
7 C:\APP\CA\ORADATA\TESTDB\UNDOTBS02.DBF 10485760
8 C:\APP\CA\ORADATA\TESTDB\UNDOTBS03.DBF 121896960
9 C:\APP\CA\ORADATA\TESTDB\TBS_TEST_16K.DBF 10485760
 
新建bbed.txt
 
blocksize=8192
listfile=C:\app\ca\file.txt
mode=edit
 
 
 
 
BBED> info
 File#  Name                                                        Size(blks)
 -----  ----                                                        ----------
     1  C:\APP\CA\ORADATA\TESTDB\SYSTEM01.DBF                            96000
     2  C:\APP\CA\ORADATA\TESTDB\SYSAUX01.DBF                            87040
     3  C:\APP\CA\ORADATA\TESTDB\UNDOTBS01.DBF                           12160
     4  C:\APP\CA\ORADATA\TESTDB\USERS01.DBF                             33600
     5  C:\APP\CA\ORADATA\TESTDB\EXAMPLE01.DBF                           12800
     6  C:\APP\CA\PRODUCT\11.2.0\DBHOME_1\TEST_DATA01.DBF                 4096
     7  C:\APP\CA\ORADATA\TESTDB\UNDOTBS02.DBF                            1280
     8  C:\APP\CA\ORADATA\TESTDB\UNDOTBS03.DBF                           14880
     9  C:\APP\CA\ORADATA\TESTDB\TBS_TEST_16K.DBF                         1280
 
--===================================
SQL> create table haocp ( a varchar2(10)) tablespace users;

Table created.

SQL> insert into haocp values('a');

1 row created.

SQL> commit;

SQL> select segment_name,file_id,block_id,blocks from dba_extents where segment_name = 'HAOCP';

 select segment_name,file_id,block_id,blocks from dba_extents where segment_name = 'HAOCP';
 
SEGMENT_NAME FILE_ID BLOCK_ID BLOCKS
 HAOCP       4       648        8
刚才创建的haocp表在file 4 blcok 648 - 648+8上面,用bbed看看651的内容  653
 
 
BBED> find /x 61 curr
 File: C:\APP\CA\ORADATA\TESTDB\USERS01.DBF (4)
 Block: 653              Offsets: 8187 to 8191           Dba:0x0100028d
------------------------------------------------------------------------
 610106a4 c9
 <32 bytes per line>
BBED> dump file 4 block 653
 File: C:\APP\CA\ORADATA\TESTDB\USERS01.DBF (4)
 Block: 653              Offsets: 8187 to 8191           Dba:0x0100028d
------------------------------------------------------------------------
 610106a4 c9
 <32 bytes per line>
 
BBED> help modify
MODIFY[/x|d|u|o|c] numeric/character string
      [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
BBED> modify 98 file 4 block 653 offset 8187
BBED-00215: editing not allowed in BROWSE mode

BBED> show
        FILE#           4
        BLOCK#          653
        OFFSET          8187
        DBA             0x0100028d (16777869 4,653)
        FILENAME        C:\APP\CA\ORADATA\TESTDB\USERS01.DBF
        BIFILE          bifile.bbd
        LISTFILE
        BLOCKSIZE       8192
        MODE            Browse
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE
        SPOOL           No
BBED> set mode edit
        MODE            Edit
BBED> show
        FILE#           4
        BLOCK#          653
        OFFSET          8187
        DBA             0x0100028d (16777869 4,653)
        FILENAME        C:\APP\CA\ORADATA\TESTDB\USERS01.DBF
        BIFILE          bifile.bbd
        LISTFILE
        BLOCKSIZE       8192
        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE
        SPOOL           No
 
把表中的a 改成b
 
BBED> modify 98 file 4 block 653 offset 8187
 File: C:\APP\CA\ORADATA\TESTDB\USERS01.DBF (4)
 Block: 653              Offsets: 8187 to 8191           Dba:0x0100028d
------------------------------------------------------------------------
 620106a4 c9
 <32 bytes per line>
BBED> verify
DBVERIFY - Verification starting
FILE = C:\APP\CA\ORADATA\TESTDB\USERS01.DBF
BLOCK = 652
Block 652 is corrupt
***
Corrupt block relative dba: 0x0100028c (file 0, block 652)
Bad check value found during verification
Data in bad block -
 type: 6 format: 2 rdba: 0x0100028c
 last change scn: 0x0000.015cc9a4 seq: 0x1 flg: 0x06
 consistency value in tail: 0xc9a40601
 check value in block header: 0x136, computed block checksum: 0x300
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***

DBVERIFY - Verification complete
Total Blocks Examined         : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 1
Total Blocks Influx           : 0
BBED> help sum
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
BBED> sum file 4 block 653
Check value for File 4, Block 653:
current = 0x0136, required = 0x0236
BBED> sum file 4 block 653 apply
Check value for File 4, Block 653:
current = 0x0236, required = 0x0236
BBED> verify
DBVERIFY - Verification starting
FILE = C:\APP\CA\ORADATA\TESTDB\USERS01.DBF
BLOCK = 652

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
 
 
 

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

转载于:http://blog.itpub.net/607244/viewspace-750955/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值