数据块内部偏移量的基本计算方法

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/32715157

BASE的计算方法为:
对于ASSM:76+(itc-1) * 24= 52 + itc * 24
对于MSSM:68+(itc-1) * 24= 44 + itc * 24

[email protected]> select * from v$type_size where component in (‘KCB‘,‘KTB‘);

COMPONEN TYPE     DESCRIPTION                       TYPE_SIZE
-------- -------- -------------------------------- ----------
KCB      KCBH     BLOCK COMMON HEADER                      20
KTB      KTBIT    TRANSACTION VARIABLE HEADER              24
KTB      KTBBH    TRANSACTION FIXED HEADER                 48
KTB      KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT          8

1、我们先对ASSM做测试

[email protected]> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

[email protected]> create tablespace assm datafile ‘/u01/app/oracle/oradata/zmdb/assm01.dbf‘ size 50M;

Tablespace created.

[email protected]> create table gyj_t5(id int,name varchar2(100))  tablespace assm;

Table created.

[email protected]> insert into gyj_t5 values(1,‘AAAAA‘);

1 row created.

[email protected]> insert into gyj_t5 values(2,‘BBBBB‘);

1 row created.

[email protected]> insert into gyj_t5 values(3,‘CCCCC‘);

1 row created.

[email protected]> COMMIT;

Commit complete.

[email protected]> alter system flush buffer_cache;

System altered.

[email protected]> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,id,name from gyj_t5;

     FILE#     BLOCK#          ID   NAME
---------- ----------   ---------- ----------
        10        135          1    AAAAA
        10        135          2    BBBBB
        10        135          3    CCCCC

BBED> set file 10 block 135
        FILE#           10
        BLOCK#          135

BBED> p kdbr[0]
sb2 kdbr[0]                                 @118      8076

BBED> p *kdbr[0]
rowdata[24]
-----------
ub1 rowdata[24]                             @8176     0x2c

BBED> x /rnc
rowdata[24]                                 @8176
-----------
[email protected]: 0x2c (KDRHFL, KDRHFF, KDRHFH)
[email protected]: 0x01
[email protected]:    2

col    0[2] @8179: 1
col    1[5] @8182: AAAAA

BBED> p ktbbhict
sb2 ktbbhict                                @36       2

8176-8076=76+(itc-1) * 24= 76+(2-1)* 24=100

2、我们对MSSM做测试

[email protected]> create tablespace mssm datafile ‘/u01/app/oracle/oradata/zmdb/mssm01.dbf‘ size 50M segment space management manual;

Tablespace created.

[email protected]> create table gyj_mssm(id int,name varchar2(100)) tablespace mssm;

Table created.

[email protected]> insert into gyj_mssm values(4,‘DDDDD‘);

1 row created.

[email protected]> insert into gyj_mssm values(5,‘EEEEE‘);

1 row created.

[email protected]> insert into gyj_mssm values(6,‘FFFFF‘);

1 row created.

[email protected]> commit;

Commit complete.

[email protected]> col name for a20
[email protected]> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,id,name from gyj_mssm;

     FILE#     BLOCK#         ID NAME
---------- ---------- ---------- --------------------
        11        129          4 DDDDD
        11        129          5 EEEEE
        11        129          6 FFFFF

BBED> set file 11 block 129
        FILE#           11
        BLOCK#          129

BBED> p kdbr[0]
sb2 kdbr[0]                                 @110      8084

BBED> p *kdbr[0]
rowdata[24]
-----------
ub1 rowdata[24]                             @8176     0x2c

BBED> x /rnc
rowdata[24]                                 @8176
-----------
[email protected]: 0x2c (KDRHFL, KDRHFF, KDRHFH)
[email protected]: 0x01
[email protected]:    2

col    0[2] @8179: 4
col    1[5] @8182: DDDDD

BBED> p ktbbhict
sb2 ktbbhict                                @36       2

8176-8084=68+(itc-1) * 24=68+(2-1)*24=92

3、为什么ASSM要比MSSM多了8个字节

************MSSM
BBED> set file 11 block 129
        FILE#           11
        BLOCK#          129

BBED> map /v
 File: /u01/app/oracle/oradata/zmdb/mssm01.dbf (11)
 Block: 129                                   Dba:0x02c00081
------------------------------------------------------------
 KTB Data Block (Table/Cluster)

 struct kcbh, 20 bytes                      @0
    ub1 type_kcbh                           @0
    ub1 frmt_kcbh                           @1
    ub1 spare1_kcbh                         @2
    ub1 spare2_kcbh                         @3
    ub4 rdba_kcbh                           @4
    ub4 bas_kcbh                            @8
    ub2 wrp_kcbh                            @12
    ub1 seq_kcbh                            @14
    ub1 flg_kcbh                            @15
    ub2 chkval_kcbh                         @16
    ub2 spare3_kcbh                         @18      

 struct ktbbh, 72 bytes                     @20
    ub1 ktbbhtyp                            @20
    union ktbbhsid, 4 bytes                 @24
    struct ktbbhcsc, 8 bytes                @28
    sb2 ktbbhict                            @36
    ub1 ktbbhflg                            @38
    ub1 ktbbhfsl                            @39
    ub4 ktbbhfnx                            @40
    struct ktbbhitl[2], 48 bytes            @44      

 struct kdbh, 14 bytes                      @92
    ub1 kdbhflag                            @92
    sb1 kdbhntab                            @93
    sb2 kdbhnrow                            @94
    sb2 kdbhfrre                            @96
    sb2 kdbhfsbo                            @98
    sb2 kdbhfseo                            @100
    sb2 kdbhavsp                            @102
    sb2 kdbhtosp                            @104     

 struct kdbt[1], 4 bytes                    @106
    sb2 kdbtoffs                            @106
    sb2 kdbtnrow                            @108     

 sb2 kdbr[3]                                @110     

 ub1 freespace[8036]                        @116     

 ub1 rowdata[36]                            @8152    

 ub4 tailchk                                @8188

*****************ASSM
BBED> set file 10 block 135
        FILE#           10
        BLOCK#          135

File: /u01/app/oracle/oradata/zmdb/assm01.dbf (10)
 Block: 141                                   Dba:0x0280008d
------------------------------------------------------------
 KTB Data Block (Table/Cluster)

 struct kcbh, 20 bytes                      @0
    ub1 type_kcbh                           @0
    ub1 frmt_kcbh                           @1
    ub1 spare1_kcbh                         @2
    ub1 spare2_kcbh                         @3
    ub4 rdba_kcbh                           @4
    ub4 bas_kcbh                            @8
    ub2 wrp_kcbh                            @12
    ub1 seq_kcbh                            @14
    ub1 flg_kcbh                            @15
    ub2 chkval_kcbh                         @16
    ub2 spare3_kcbh                         @18      

 struct ktbbh, 72 bytes                     @20
    ub1 ktbbhtyp                            @20
    union ktbbhsid, 4 bytes                 @24
    struct ktbbhcsc, 8 bytes                @28
    sb2 ktbbhict                            @36
    ub1 ktbbhflg                            @38
    ub1 ktbbhfsl                            @39
    ub4 ktbbhfnx                            @40
    struct ktbbhitl[2], 48 bytes            @44      

 struct kdbh, 14 bytes                      @100
    ub1 kdbhflag                            @100
    sb1 kdbhntab                            @101
    sb2 kdbhnrow                            @102
    sb2 kdbhfrre                            @104
    sb2 kdbhfsbo                            @106
    sb2 kdbhfseo                            @108
    sb2 kdbhavsp                            @110
    sb2 kdbhtosp                            @112     

 struct kdbt[1], 4 bytes                    @114
    sb2 kdbtoffs                            @114
    sb2 kdbtnrow                            @116     

 sb2 kdbr[3]                                @118     

 ub1 freespace[8028]                        @124     

 ub1 rowdata[36]                            @8152    

 ub4 tailchk                                @8188

对比
-----MSSM
   struct ktbbhitl[2], 48 bytes            @44     

 struct kdbh, 14 bytes                     @92 

---ASSM  
   struct ktbbhitl[2], 48 bytes            @44     

 struct kdbh, 14 bytes                      @100
 
@92---->@100  kdbh偏移量发生了变化,增加了8个byte。

数据块内部偏移量的基本计算方法

时间: 2024-11-29 06:04:18

数据块内部偏移量的基本计算方法的相关文章

Oracle数据块损坏篇之10231内部事件

实验:某个分区数据块损坏,不完全恢复此分区表数据背景:数据库没有有效备份,某个分区中有数据块损坏.要求:最大限度恢复此分区数据.环境:RHEL 6.4 + Oracle 11.2.0.4 1. 初始化实验环境 2. 模拟分区中有数据块损坏情景 3. 尝试使用Oracle内部事件10231进行不完全恢复 Reference 1. 初始化实验环境 初始化创建模拟实验环境用到的表空间.业务用户.表,并导入测试数据.本次实验用到表空间DBS_D_JINGYU, 业务用户JINGYU, 分区表T_PART

Oracle core02_数据块

数据更改 oracle core完成了oracle的核心功能,recovery,读一致性等. 深入的了解oracle的机制,就从一个最简单的更新开始.对于oracle来说,最大的一个特性就是写了两次数据: 写数据到数据文件中 写数据的变更日志到日志文件中 对于最常见的数据更新来说,oracle主要做了一下动作: 创建数据块变更的日志记录即 redo change vector 创建数据块的映像即undo record 创建undo数据块变更的日志记录 更新数据块 下面就以update为例:记录变

探究InnoDB数据页内部行的存储方式

*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !important; } .markdown-body .anchor { position: absolute; top: 0; bottom: 0; left: 0; display: block; padding-right: 6px; padding-left: 30px; margin-left: -30

HDFS源码分析(三)-----数据块关系基本结构

前言 正如我在前面的文章中曾经写过,在HDFS中存在着两大关系模块,一个是文件与block数据块的关系,简称为第一关系,但是相比于第一个关系清晰的结构关系,HDFS的第二关系就没有这么简单了,第二关系自然是与数据节点相关,就是数据块与数据节点的映射关系,里面的有些过程的确是错综复杂的,这个也很好理解嘛,本身block块就很多,而且还有副本设置,然后一旦集群规模扩大,数据节点的数量也将会变大,如何处理此时的数据块与对应数据节点的映射就必然不是简单的事情了,所以这里有一点是比较特别的,随着系统的运行

oracle ora-01578 ORACLE 数据块损坏 (文件号 4, 块号 840339)

ORA-01578是 数据块物理坏块/损坏的一种,不同于逻辑损坏/坏块,一般 会伴随ORA-1110出现,一旦ORACLE读取到存在损坏的块就会报出Caused by: java.sql.SQLException: ORA-01578: ORACLE 数据块损坏 (文件号 4, 块号 840339)ORA-01110: 数据文件 4: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' 解决方法如下:1.使用DBV检查数据文件,在cmd目录下直接输入d

5.oracle的dump理解五 数据块理论

5.oracle的dump理解五 数据块理论 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51228514 前两篇描述了我们在操作层面看到的一些东西,但是没有理论指导,看到越多我们只会越迷糊.所以,蛤蟆从官方文档上摘取一些老少皆宜的内容来补脑. 块是数据块IO的最小单位. 1     数据块和操作系统块 从物理层面,数据库的块存储时候是由操作系统块组成.操作系统块是操作系统可以读写的最小数据单位.ORACLE块是一个逻辑存

Oracle数据块损坏的恢复实例

测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test conn jingyu/jingyu drop table t_test purge; create table t_test (id number, name char(2000)); --Insert data insert into t_test values(1, 'alfred 1');

Oracle 数据块损坏与恢复具体解释

1.什么是块损坏: 所谓损坏的数据块,是指块没有採用可识别的 Oracle 格式,或者其内容在内部不一致. 通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为"逻辑损坏"或"介质损坏". 假设是逻辑损坏,则是 Oracle 内部错误. Oracle 数据库检測到不一致之后,就将逻辑损坏的块标记为损坏.假设是介质损坏,则是块格式不对:从磁盘读取的块不包括有意义的信息. 通过恢复块,或者删除包括损坏块的数据库对象(或同一时候採用这两种

【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线

一.段的类型: 1.什么是段:段是存储单元. 1.段的类型有: 表 分区表 簇表 索引 索引组织表(IOT表) 分区索引 临时段 undo段 lob段(blob ,clob) 内嵌表(record类型,table类型) 启动段 :打开数据库时要装入的数据字典系统信息,故在系统表空间内. 注意:smon 回收不用的临时段和undo段. 2.表: 表是存储数据的逻辑单位. 表的功能: 存储.管理数据的基本单元, 表的类型: 普通表:堆表, 例:查询表的行的平均长度 AVG_ROW_LEN 平均长度