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

来源:互联网 发布:设计师怎么卖淘宝模板 编辑:程序博客网 时间:2024/05/17 18:02
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
原创粉丝点击