您的位置:首页 > 其它

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

2013-11-28 01:04 417 查看
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

        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函数系统没有,自己建的,见:http://blog.csdn.net/q947817003/article/details/14103801

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    

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

 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



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐