/**
* Title:
* author:derwee
*email:daoweiyy@163.com
* Version: V1.0
*/
基于oracle DBMS单实例环境。本次实验还是基于看到资料和个人理解,暂时还无法深入跟踪oracle内部实现过程,具体的实现算法。只考究oracle中相对简单的堆表中数据块,数据扩展,段的分配和回收,暂时不管簇表,索引,回滚段,物化视图,空间不连续情况下,如何分配。更精确的数量关系待折腾了。
1.1 数据块,数据扩展,段简介
Oracle存储数据的最小粒度(finest level ofgranularity)被称为数据块(datablock)(也叫做逻辑块(logicalblock),Oracle块(Oracle block)或页(page))。一个数据块对应于磁盘上数个字节(byte)的物理数据库空间。往往对应着操作系统的文件系统的2的倍数个数据块。
处于数据块之上的逻辑数据库空间是数据扩展(extent)。数据扩展是为存储数据而分配的一组连续的数据块。
位于数据扩展之上的逻辑数据库存储结构是段(segment)。段由一组数据扩展 (extent)构成,这些数据扩展位于同一表空间(tablespace)中,用于存储各种逻辑数据结构。包括数据段和索引端。
1.2 Oracle的空间分配回收
Oracle为段(segment)分配空间时以数据扩展(extent)为单位。当段内已有的数据扩展没有可用空间时,Oracle为此段分配一个新的数据扩展。因为数据扩展是随需分配的,所以一个段内的数据扩展在磁盘上未必是连续的。
每个段(segment)的定义中都包含了数据扩展(extent)的存储参数(storageparameter)。存储参数适用于各种类型的段。这个参数控制着Oracle如何为段分配可用空间。比如
storage
(
initial 128K
next 128K
minextents 1
maxextents unlimited
pctincrease 0
)
创建该表后oracle会给bigdata.dept非配8个block(即128K,这里每个block是8KB),