Skip to content

服务器托管,北京服务器托管,服务器租用-价格及机房咨询

Menu
  • 首页
  • 关于我们
  • 新闻资讯
  • 数据中心
  • 服务器托管
  • 服务器租用
  • 机房租用
  • 支持中心
  • 解决方案
  • 联系我们
Menu

使用BBED查看SYSTEM文件头的root dba及bootstrap$

Posted on 2023年5月6日 by hackdl

数据库版本11.2.0.4

实验思路是:     –其中数据库OPEN时的TRACE信息

file#1 block#1==>root dba==>struct ktetb

即先从SYSTEM的数据文件头:file#1 block#1 找到root dba的位置,然后在root dba所在的块内,找到struct ktetb 所描述的块的位置,然后查看struct ktetb指定的块中的内容(bootstrap$ 的内容)

1.使用DUMP数据文件头查看root dba

DUMP 数据文件头可见以下信息:

Creation   at   scn: 0x0000.00000015 11/14/2013 14:24:22

Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0  

 reset logs count:0x318f5cd7 scn: 0x0000.00000001

 prev reset logs count:0x0 scn: 0x0000.00000000

 recovered at 11/15/2013 10:50:16

 status:0x2004

root dba:0x00400208 chkpt cnt: 67 ctl cnt:66

##########

只有system才有root dba,用来定位bootstrap$,存储的是16进制表示的二进制数,其中10bit是数据文件号, 22 bit是BLOCK号。

ctl cnt 是控制文件的一份拷贝,用于鉴别控制文件是否来自于备份.

关于root dba:在SYSTEM文件头,Oracle存储了一个root dba:

Root dba: This field only occurs in data file #1, and is the location of blocks required during bootstrapping the data dictionary (bootstrap$)。

ORACLE 10g之前, root dba:0x004001a1,指向file 1 block 417对象,DUMP 417对象可以发现最终指向的是file 1 block 377。

ORACLE 10G中是root dba:0x00400179,指向file 1 block 377

ORACLE 11G中root dba:0x00400208,指向file 1 block 520

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

在11G中root dba:0x00400208具体指向位置计算方法如下:     –一个字节8bit,一个16进制可以表示4bit二进制

首先算出来每一个byte对应的二进制值,如下:

00000000    01000000    00000010    00001000

前10bit 文件号:  0000000001   

后22bit 块号:   0000000000001000001000

对应的10进制的文件号和块号是:1号文件的520号块

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

BIT_TO_NUMBER(‘0000000001’)

—————————

                          1

BYS@ bys3>select bit_to_number(‘0000000000001000001000’) from dual;

BIT_TO_NUMBER(‘0000000000001000001000’)

—————————————

                                    520

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

2.使用bbed来查看root dba的指向

[oracle@bys3 ~]$

cat par.bbd

blocksize=8192

listfile=bbedfile.txt

mode=edit

[oracle@bys3 ~]$

cat bbedfile.txt

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:

BBED: Release 2.0.0.0.0 – Limited Production on Fri Nov 29 09:22:04 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)

        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

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

BBED>

print kcvfhrdb         —kcvfhrdb就是root dba指向的具体数据块位置

ub4 kcvfhrdb                                @96       0x00400208

oracle引导会去读这个地方:file# 1 block# 520

0x00400208如何转换为具体的文件号及块号?   – 第一小节

计算的大致方法示例如下:

DBA(data block address)===file#(10bit)+block#(22bit)==32bit

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

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

file#=00000000 01 —–文件号

block#=000000  00000000 00000001  –>号块

此处的计算是:

0x00400208先转换为二进制为:00000000 01000000  00000010 00001000

数据文件号是:0000000001     数据块号是:0000000000001000001000

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

BIT_TO_NUMBER(‘0000000001’)

—————————

                          1

BYS@ bys3>select bit_to_number(‘0000000000001000001000’)  from dual;

BIT_TO_NUMBER(‘0000000000001000001000’)

—————————————

                                    520

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

3.在数据库中查询file# 1 header_block=520的块的信息— bootstrap$

BYS@ bys3>col segment_name for a15

BYS@ bys3>select segment_name,segment_type,header_file,header_block from dba_segments where header_block=520;

SEGMENT_NAME    SEGMENT_TYPE       HEADER_FILE HEADER_BLOCK

————— —————— ———– ————

BOOTSTRAP$      TABLE                        1          520

截取bootstrap$;表的前几行

SYS@ bys3>col SQL_TEXT for a110

SYS@ bys3>

select * from bootstrap$;   –截取部分

     LINE#       OBJ# SQL_TEXT

———- ———- ————————————————————————————————————–

        -1         -1 8.0.0.0.0                        —–兼容8.0以后版本

         0          0 CREATE ROLLBACK SEGMENT SYSTEM STORAGE (  INITIAL 112K NEXT 56K MINEXTENTS 1 MAXEXTENTS 32765 OBJNO 0 EXTENTS

                      (FILE 1 BLOCK 128))             –创建系统回滚段

        20         20 CREATE TABLE ICOL$(“OBJ#” NUMBER NOT NULL,”BO#” NUMBER NOT NULL,”COL#” NUMBER NOT NULL,”POS#” NUMBER NOT NULL,

                      “SEGCOL#” NUMBER NOT NULL,”SEGCOLLENGTH” NUMBER NOT NULL,”OFFSET” NUMBER NOT NULL,”INTCOL#” NUMBER NOT NULL,”S

                      PARE1″ NUMBER,”SPARE2″ NUMBER,”SPARE3″ NUMBER,”SPARE4″ VARCHAR2(1000),”SPARE5″ VARCHAR2(1000),”SPARE6″ DATE) S

                      TORAGE (  OBJNO 20 TABNO 4) CLUSTER C_OBJ#(BO#)

        42         42 CREATE INDEX I_ICOL1 ON ICOL$(OBJ#) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEX

                      TENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 42 EXTENTS (FILE 1 BLOCK 384))

使用Ultraedit把文字转换为16进制OBJ#=0行的SQL_TEXT转换为16进制数:   –用于下一步时与BBED DUMP数据块的信息对比

00000000h: 43 52 45 41 54 45 20 52 4F 4C 4C 42 41 43 4B 20 ; CREATE ROLLBACK

00000010h: 53 45 47 4D 45 4E 54 20 53 59 53 54 45 4D 20 53 ; SEGMENT SYSTEM S

00000020h: 54 4F 52 41 47 45 20 28 20 20 49 4E 49 54 49 41 ; TORAGE (  INITIA

00000030h: 4C 20 31 31 32 4B 20 4E 45 58 54 20 35 36 4B 20 ; L 112K NEXT 56K

00000040h: 4D 49 4E 45 58 54 45 4E 54 53 20 31 20 4D 41 58 ; MINEXTENTS 1 MAX

00000050h: 20 45 58 54 45 4E 54 53 20 33 32 37 36 35 20 4F ;  EXTENTS 32765 O

00000060h: 42 4A 4E 4F 20 30 20 45 58 54 45 4E 54 53 20 28 ; BJNO 0 EXTENTS (

00000070h: 46 49 4C 45 20 31 20 42 4C 4F 43 4B 20 31 32 38 ; FILE 1 BLOCK 128

00000080h: 29 29                                           ; ))

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

4.使用BBED查看root dba的指向的file# 1 block# 520的详细信息

接第2步中BBED的使用

BBED> set dba 0x00400208

        DBA             0x00400208 (4194824 1,520)

        BBED> show all

        FILE#           1

        BLOCK#          520

        OFFSET          0

        DBA             0x00400208 (4194824 1,520)

        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

BBED> map

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

 Block: 520                                   Dba:0x00400208

————————————————————

 Unlimited Data Segment Header

 struct kcbh, 20 bytes                      @0       

 struct ktech, 72 bytes                     @20      

 

struct ktemh, 16 bytes                     @92      

 struct ktetb[1], 8 bytes                   @108     

 struct ktshc, 8 bytes                      @4148    

 struct ktsfs_seg[1], 20 bytes              @4156    

 struct ktsfs_txn[16], 320 bytes            @4176    

 ub4 tailchk                                @8188

BBED> print ktemh        

struct ktemh, 16 bytes                      @92      

   ub4 count_ktemh                          @92       0x00000001

   ub4 next_ktemh                           @96       0x00000000

   ub4 obj_ktemh                            @100      0x0000003b

   ub4 flag_ktemh                           @104      0x40000000

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

ub4 obj_ktemh                            @100      0x0000003b

这一句描述的就是:root dba指向的object对象号:0x0000003b,依照以下方法转换为十进制,为:59

在数据库中据此对象号也可以查询出此表

BYS@ bys3>select to_number(‘3b’,’xxxxxxxxxx’) from dual;

TO_NUMBER(‘3B’,’XXXXXXXXXX’)

—————————-

                          59

BYS@ bys3>

select name from sys.obj$ where obj#=59;   —从数据库中也可以验证这个对象号指的是 BOOTSTRAP$

NAME

——————————

BOOTSTRAP$

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

5.使用BBED来验证BOOTSTRAP$表中OBJ#=0行记录是否存在于struct ktetb[1]指向的DBA 0x00400209中的信息

知道了BOOTSTRAP$对象号,那么BOOTSTRAP$记录的具体内容(select * from bootstrap$;)  –

存储在:file#1 block#520的struct ktetb[1]字段指向的块

BBED> print ktetb     –接上一步BBED操作

struct ktetb[0], 8 bytes                    @108     

 

  ub4 ktetbdba                             @108      0x00400209

   ub4 ktetbnbk                             @112      0x00000007

BBED> set dba 0x00400209

        DBA             0x00400209 (4194825 1,521)

BBED> set offset 8030    

        OFFSET          8030

–这个偏移量是书上看的,笨方法是把整个数据块8192字节都DUMP出来的16进制数全复制出来放在一个空文件中,然后使用第3步Ultraedit转换出来的16进制数字符,来查找,一个个查哈哈。

BBED> dump        —

DUMP出来的数据和第3步Ultraedit转换出来的16进制数字符可以一一对应

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

 Block: 521              Offsets: 8030 to 8191           Dba:0x00400209

————————————————————————

 2c010301 80018081

43524541 54452052 4f4c4c42 41434b20 5345474d 454e5420

 53595354 454d2053 544f5241 47452028 2020494e 49544941 4c203131 324b204e

 45585420 35364b20 4d494e45 5854454e 54532031 204d4158 45585445 4e545320

 33323736 35204f42 4a4e4f20 30204558 54454e54 53202846 494c4520 3120424c

 4f434b20 31323829 292c0103 033e6466 033e6466 09382e30 2e302e30 2e300106

 e501

 

服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net

Related posts:

  1. 泉州服务器托管费用价格
  2. 专业服务器托管租用服务提供商
  3. SPI的 CLK_POL和CLK_PHA
  4. g口服务器托管:高效稳定的托管服务
  5. 托管服务器登录需认证用户信息

服务器托管,北京服务器托管,服务器租用,机房机柜带宽租用

服务器托管

咨询:董先生

电话13051898268 QQ/微信93663045!

上一篇: 闪加查询、闪回版本查询、闪回事务查询
下一篇: 使用DUMP数据块与BBED查看BLOCK对比数据库修改时的SCN

最新更新

  • R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模|附代码数据
  • mosn基于延迟负载均衡算法 — 走得更快,期待走得更稳 | 京东云技术团队
  • C++之虚函数原理 虚函数表
  • etcd:增加30%的写入性能
  • 为什么要安装虚拟机–Linux系统,我的虚拟机安装过程记录—14版本虚拟机

随机推荐

  • 托管服务器机房选址及电话选择指南
  • 高效稳定的文件服务器托管服务
  • Docker基础:数据卷技术介绍
  • 服务器上的爬虫托管指南
  • 探究服务器租用费用:价格分析与比较

客服咨询

  • 董先生
  • 微信/QQ:93663045
  • 电话:13051898268
  • 邮箱:dongli@hhisp.com
  • 地址:北京市石景山区重聚园甲18号2层

友情链接

  • 服务器托管
  • 服务器租用
  • 机房租用托管
  • 服务器租用托管
©2023 服务器托管,北京服务器托管,服务器租用-价格及机房咨询 京ICP备13047091号-8