使用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 --如下面所示
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
##########################################################################
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
################
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
进入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> mapFile: /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
相关文章推荐
- BBED的使用-查看数据文件信息%SID
- bbed的使用--查看数据文件信息 & sid信息
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
- 使用WinDbg查看非当前线程所在模块的内存数据信息
- Hadoop编程学习(四):使用FileSystem类进行文件读写及查看文件信息
- UNIX环境高级编程学习之第六章系统数据文件和信息-GID To GroupName
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
- 使用BBED修改SCN让数据文件online
- 使用bbed让rac中的sysaux数据文件online
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
- python os.statvfs() 查看文件系统信息 磁盘使用情况
- SVN使用log,list,cat,diff查看所有及特定文件版本信息
- ORACLE查看数据文件-控制文件-日志文件-表空间信息
- Oracle使用dbfsize查看控制文件、数据文件、日志文件的block size
- 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题
- 使用AJAX方法可以不刷新页面就从服务器上获得信息(文件信息,方法,数据库中的数据)
- Linux-使用ctags、vim查看数据类型所在头文件
- 如何使用keytool查看android应用签名文件的信息
- IDA使用之旅(一)用IDA查看最简单的sys文件
- 使用socket实现简单数据文件传输