Oracle Database 中关于null值的存储

php中文网
发布: 2016-06-07 17:58:45
原创
1335人浏览过

这里主要验证了number 和 varchar2 两种数据类型null值的存储 先来介绍一下row piece的结构 引用官方文档的一张结构图 通常情况下,不包括(cluster table 和 chain row)一个rowpiece 包括row header 和 column data 关于其他情况,会在以后的研究中陆续放

 

这里主要验证了number 和 varchar2 两种数据类型null值的存储

先来介绍一下row piece的结构

 

 

引用官方文档的一张结构图


 

 

通常情况下,不包括(cluster table 和 chain row)一个rowpiece 包括row header 和 column data

关于其他情况,会在以后的研究中陆续放出。

BBED> dump /v
File: /u01/apps/Oracle/oradata/david/users01.dbf(4)
Block: 531     Offsets: 8173to 8191  Dba:0x01000213
-------------------------------------------------------
3c020302 c1020353 59530444 55414c01 l<...>
06fbd4                            l .ûÔ

例如:一个rowpiece的前3个字节 3c0203它表示

1个字节的flag
1个字节的lb(itl slot)
1个字节的columncount

如例中
3c=flag=00111100=--HDFL--=header+delete+first+last
02=lb itl slot 0x02
03=column count


列值信息包括:
列的长度,列的value
例如02c102
表示占用2个byte
c102 表示的是具体的值

dump 的信息 可以使用 UTL_RAW.CAST_TO_xxxx 来翻译(感谢itpub iori809的指导)

 

 


 

下面开始验证

首先环境为11.1.0.6 linux x64

  1. dex@FAKE> desc ts  
  2.  Name                                                              Null?    Type  
  3.  ----------------------------------------------------------------- -------- --------------------------------------------   
  4.  ID                                                                         NUMBER  
  5.  NAME                                                                       VARCHAR2(20)  
  6.  COUNT                                                                      NUMBER  
  7.   
  8.   
  9. dex@FAKE> select t.*,  
  10.   2         dbms_rowid.rowid_relative_fno(t.rowid) as "FNO#",  
  11.   3         dbms_rowid.rowid_block_number(t.rowid) as "BLK#",  
  12.   4         dbms_rowid.rowid_row_number(t.rowid) as "ROW#"  
  13.   5    from dex.ts t  
  14.   6  ;  
  15.   
  16.   
  17.         ID NAME                      COUNT       FNO#       BLK#       ROW#  
  18. ---------- -------------------- ---------- ---------- ---------- ----------   
  19.          1 dd                                       4         31          0  
  20.          2                               2          4         31          1  
  21.            2                             3          4         31          2  
  22.          4                                          4         31          3  

 

建表语句:dex@FAKE> create table ts ( id number , name varchar2(20) , count number ) ;
因为表中没有使用long 类型的column,所以表中列的顺序和建表中的列的声明顺序相同。
BBED> set dba 4,31
        DBA             0x0100001f (16777247 4,31)
BBED> map
 File: /u01/apps/Oracle/oradata/fake/users01.dbf (4)
 Block: 31                                    Dba:0x0100001f
------------------------------------------------------------
 KTB Data Block (Table/Cluster)


 struct kcbh, 20 bytes                      @0       


 struct ktbbh, 72 bytes                     @20      


 struct kdbh, 14 bytes                      @100     


 struct kdbt[1], 4 bytes                    @114     


 sb2 kdbr[3]                                @118     


 ub1 freespace[8036]                        @124     


 ub1 rowdata[28]                            @8160    


 ub4 tailchk                                @8188    
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号