热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

OracleDatabase中关于null值的存储

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

这里主要验证了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<...á..SYS.DUAL.
06fbd4 l .ûÔ
<16 bytes per line>

例如:一个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. dex@FAKE> select t.*,
  8. 2 dbms_rowid.rowid_relative_fno(t.rowid) as "FNO#",
  9. 3 dbms_rowid.rowid_block_number(t.rowid) as "BLK#",
  10. 4 dbms_rowid.rowid_row_number(t.rowid) as "ROW#"
  11. 5 from dex.ts t
  12. 6 ;
  13. ID NAME COUNT FNO# BLK# ROW#
  14. ---------- -------------------- ---------- ---------- ---------- ----------
  15. 1 dd 4 31 0
  16. 2 2 4 31 1
  17. 2 3 4 31 2
  18. 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
推荐阅读
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 1.tarzxfapache-activemq-5.12.0-bin.tar.gztarzxfapache-activemq-5.12.0-bin.tar.gz2.cdapac ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • 本文旨在探讨信息安全专业的职业规划路径,结合个人经历和专家建议,为即将毕业的学生提供实用的指导。 ... [详细]
  • 本文总结了《编程珠玑》第12章关于采样问题的算法描述与改进,并提供了详细的编程实践记录。参考了其他博主的总结,链接为:http://blog.csdn.net/neicole/article/details/8518602。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文介绍了如何通过安装 rpm 包来使用 resize2fs 和 ext2online 工具进行系统文件的扩容。提供了详细的步骤和注意事项。 ... [详细]
author-avatar
猪猪情系qq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有