0
点赞
收藏
分享

微信扫一扫

使用BBED查看数据文件头(block# 1)的简单使用及查询DBID/DB_NAME等信息


DBID及DB_NAME的查看在最后。
进入BBED及初始设置如下:

[oracle@bys3 ~]$ 
cat par.bbd 

 blocksize=8192

 listfile=bbedfile.txt

 mode=edit

 [oracle@bys3 ~]$
 cat bbedfile.txt   --可以通过select file#,name from v$dbfile;  select file#,name from v$datafile;

 1       /u01/oradata/bys3/system01.dbf  524288000

 2       /u01/oradata/bys3/sysaux01.dbf  340787200

 3       /u01/oradata/bys3/undotbs01.dbf 209715200

 4       /u01/oradata/bys3/user01.dbf    52428800

 [oracle@bys3 ~]$ bbed parfile=par.bbd

 Password:    -
-输入默认密码  blockedit

 BBED: Release 2.0.0.0.0 - Limited Production on Thu Nov 28 10:14:54 2013

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

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

BBED> show all

  --如下面所示

一、关于BBED使用命令show all中显示DBA的计算:

BBED> show all       

---这命令显示了当前的文件号、BLOCK号,偏移号、COUNT数等信息。需要提前SET FILE SET BLOCKSIZE SET BLOCK等


        FILE#           1


        BLOCK#          1


        OFFSET          0


    

    DBA             0x00400001 (4194305 1,1)             -------

表示的是当前的FILE 1的BLOCK 1

   

解读:块号是:1,块的DBA:0x00400001   即1号数据文件的1号块                               

FILENAME        /u01/oradata/bys3/system01.dbf

         BIFILE          bifile.bbd

         LISTFILE        bbedfile.txt

         BLOCKSIZE       8192

         MODE            Edit

         EDIT            Unrecoverable

         IBASE           Dec

         OBASE           Dec

         WIDTH           80

      
   COUNT           512

         LOGFILE         log.bbd

         SPOOL           No

计算如下:
 DBA(data block address)===file#(10bit)+block#(22bit)==32bit

 16进制中两个字符表示1bytes,

 DBA=0x00400001====> 转换为二进制为:00000000 01000000  00000000 00000001

  file#=00000000 01 -----1号文件

  block#=000000  00000000 00000001  -->号块


 所以对于DBA=0x00400001的计算如下:

示例计算DBA=0x00400001前四个字符对应的二进制数值:--注意要两个两个的计算,0x表示是16进制,不是具体的数值。
 BYS@ bys3>select number_to_bit(to_number('00','xxxxxxx')) num from dual;      -
--这里的number_to_bit函数系统没有,自己建的,见:

 NUM

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

 00000000

 BYS@ bys3>select number_to_bit(to_number('40','xxxxxxx')) num from dual;

 NUM

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

 01000000

 所以前四个字符合起来对应的是二进制的:0000000001000000

 二进制中一个字符占用一个bit,故10bit就相当于前10个字符:00000000010:

 使用二进制转换为10进制的函数进行转换:

 BYS@ bys3>col num format 99999

 BYS@ bys3>select bit_to_number('0000000001')  from dual;

 BIT_TO_NUMBER('0000000001')

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

                           1

故DBA=0x00400001对应的数据文件号是1

同样的方法计算DBA=0x00400001对应的block#:也为1
 BYS@ bys3>select bit_to_number('0000000000000001')  from dual;

 BIT_TO_NUMBER('0000000000000001')

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

                                 1

 ##########################################################################

二、使用BBED的map命令查看1号块
 BBED> map

  File: /u01/oradata/bys3/system01.dbf (1)

  Block: 1                                     Dba:0x00400001

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

  Data File Header

  struct kcvfh, 860 bytes                    @0       

  ub4 tailchk                                @8188


 Data File Header表示是数据文件 头


  struct kcvfh, 860 bytes 表示大小为860个bytes,据说在不同版本大小不一样


 @0  表示从第一个字节开始


ub4 tailchk  表示4个块表示检验  ub4 --unsigned byte 4 无符号字节

  @8188  从8188开始,8188 8189 8190 8191 这四个。

   ########################

  BBED> map /v     --可以看到更详细的信息

  File: /u01/oradata/bys3/system01.dbf (1)

  Block: 1                                     Dba:0x00400001

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

  Data File Header

  struct kcvfh, 860 bytes                    @0       

     struct kcvfhbfh, 20 bytes               @0       

     struct kcvfhhdr, 76 bytes               @20      

     ub4 kcvfhrdb                            @96      

     struct kcvfhcrs, 8 bytes                @100     

     ub4 kcvfhcrt                            @108     

     ub4 kcvfhrlc                            @112     

     struct kcvfhrls, 8 bytes                @116     

     ub4 kcvfhbti                            @124     

     struct kcvfhbsc, 8 bytes                @128     

     ub2 kcvfhbth                            @136     

     ub2 kcvfhsta                            @138     

     struct kcvfhckp, 36 bytes               @484     

     ub4 kcvfhcpc                            @140     

     ub4 kcvfhrts                            @144     

     ub4 kcvfhccc                            @148     

     struct kcvfhbcp, 36 bytes               @152     

     ub4 kcvfhbhz                            @312     

     struct kcvfhxcd, 16 bytes               @316     

     sword kcvfhtsn                          @332     

     ub2 kcvfhtln                            @336     

     text kcvfhtnm[30]                       @338     

     ub4 kcvfhrfn                            @368     

     struct kcvfhrfs, 8 bytes                @372     

     ub4 kcvfhrft                            @380     

     struct kcvfhafs, 8 bytes                @384     

     ub4 kcvfhbbc                            @392     

     ub4 kcvfhncb                            @396     

     ub4 kcvfhmcb                            @400     

     ub4 kcvfhlcb                            @404     

     ub4 kcvfhbcs                            @408     

     ub2 kcvfhofb                            @412     

     ub2 kcvfhnfb                            @414     

     ub4 kcvfhprc                            @416     

     struct kcvfhprs, 8 bytes                @420     

     struct kcvfhprfs, 8 bytes               @428     

     ub4 kcvfhtrt                            @444     

  ub4 tailchk                                @8188    

  

 简单解读:
  struct kcvfhbfh, 20 bytes               @0       

     struct kcvfhhdr, 76 bytes               @20      

     ub4 kcvfhrdb                            @96   

    比如以上三条:truct kcvfhbfh, 20 bytes 从0bite到19bite
     struct kcvfhhdr, 76 bytes               @20 从20到95bit
     如果想查询kcvfhhdr这76bit具体信息,可以使用命令:print kcvfhbfh

 ################

三、计算DBID及DB_NAME
 
BBED> print kcvfhhdr   --打印出更详细信息,接上面。

 struct kcvfhhdr, 76 bytes                   @20      

    ub4 kccfhswv                             @20       0x00000000

    ub4 kccfhcvn                             @24       0x0b200000

    ub4 kccfhdbi                             @28       0xc82c8d97

    text kccfhdbn[0]                         @32      B

    text kccfhdbn[1]                         @33      Y

    text kccfhdbn[2]                         @34      S

    text kccfhdbn[3]                         @35      3

    text kccfhdbn[4]                         @36       

    text kccfhdbn[5]                         @37       

    text kccfhdbn[6]                         @38       

    text kccfhdbn[7]                         @39       

    ub4 kccfhcsq                             @40       0x000017bd

    ub4 kccfhfsz                             @44       0x0000fa00

    s_blkz kccfhbsz                          @48       0x00

    ub2 kccfhfno                             @52       0x0001

    ub2 kccfhtyp                             @54       0x0003

    ub4 kccfhacid                            @56       0x00000000

    ub4 kccfhcks                             @60       0x00000000

    text kccfhtag[0]                         @64       

    text kccfhtag[1]                         @65       

    text kccfhtag[2]                         @66       

    text kccfhtag[3]                         @67       

    text kccfhtag[4]                         @68       

    text kccfhtag[5]                         @69       

    text kccfhtag[6]                         @70       

    text kccfhtag[7]                         @71       

    text kccfhtag[8]                         @72       

    text kccfhtag[9]                         @73       

    text kccfhtag[10]                        @74       

    text kccfhtag[11]                        @75       

    text kccfhtag[12]                        @76       

    text kccfhtag[13]                        @77       

    text kccfhtag[14]                        @78       

    text kccfhtag[15]                        @79       

    text kccfhtag[16]                        @80       

    text kccfhtag[17]                        @81       

    text kccfhtag[18]                        @82       

    text kccfhtag[19]                        @83       

    text kccfhtag[20]                        @84       

    text kccfhtag[21]                        @85       

    text kccfhtag[22]                        @86       

    text kccfhtag[23]                        @87       

    text kccfhtag[24]                        @88       

    text kccfhtag[25]                        @89       

    text kccfhtag[26]                        @90       

    text kccfhtag[27]                        @91       

    text kccfhtag[28]                        @92       

    text kccfhtag[29]                        @93       

    text kccfhtag[30]                        @94       

    text kccfhtag[31]                        @95       

 ####################


DBID是对应的:ub4 kccfhdbi           @28       0xc82c8d97   kccfhdbi--这个名字最后三位也能联想下DBID

可以计算出DBID:16进制c82c8d97,转换为10进制数字:


BYS@ bys3>select name,dbid from v$database;


NAME            DBID


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


BYS3     

3358363031


BYS@ bys3>select to_number('c82c8d97','xxxxxxxxxxxxx') from dual;


TO_NUMBER('C82C8D97','XXXXXXXXXXXXX')


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


                          

3358363031


这里使用print kcvfhhdr中的16进制数不需要颠倒字节顺序,因为BBED里面已经转换过了。


解释:ub4 kccfhdbi                             @28       0xc82c8d97


   text kccfhdbn[0]                         @32      B


这表示ub4 kccfhdbi具体是在28,29.30.31这中个块上,


对应的DUMP是在:=见图3  16进制值是978d2cc8,需要颠倒一下即为:c82c8d97



使用BBED查看数据文件头(block# 1)的简单使用及查询DBID/DB_NAME等信息_oracle


DB_NAME从下面几个字节可以看出--不需要计算了:--也可以看出,DB_NAME不能超过8个字符的原因了


  text kccfhdbn[0]                         @32      B


   text kccfhdbn[1]                         @33      Y


   text kccfhdbn[2]                         @34      S


   text kccfhdbn[3]                         @35      3


   text kccfhdbn[4]                         @36       


   text kccfhdbn[5]                         @37       


   text kccfhdbn[6]                         @38       


   text kccfhdbn[7]                         @39       


这里演示一下计算的方法:  

  --kccfhdbn 看起来最后几个字母也像是DBNAME


32BIT-38BIT,对应的图3中的42595333 00000000


因为是字符型 ,不需要颠倒。


可以使用以下两种函数转换:

BYS@ bys3>

select chr(to_number((substr(replace('42595333 00000000',' '),rownum*2-1,2)),'xxxxxxxxxxx')) from dba_objects where rownum<9;



CHR(


----


B


Y


S


3







8 rows selected.


上一句:dba_objects在这里是只来显示相应的虚字段值了,保险起见应该选用一个行数大于8字节的表或视图就可以。


BYS@ bys3>

select UTL_RAW.CAST_TO_VARCHAR2 ('4259533300000000') from dual;   ---注意要去掉两组数之间空格


UTL_RAW.CAST_TO_VARCHAR2('4259533300000000')


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


BYS3


举报

相关推荐

0 条评论