从 Oracle 存储层次体系结构看, oracle 数据库由一个或者多个表空间构成。
表空间 :是一个逻辑存储容器,它包含段,由一个或多个数据文件组成。段和数据文件的关系是,数据文件存储在段中。
段 :是实际占用存储空间的对象,段分为表段、索引段、回滚段、临时段等,段本身由一个或者多个区段组成。
区段 :是文件中一个逻辑上连续分配的空间,这里说是逻辑上,其实文件在物理磁盘上的分配并不是连续的,区段又由块组成。
块 :是 oracle 中最小的空间分配单位。
通常, oracle 从磁盘读写的就是块,数据行,索引条目,临时排序结果就存储在块中。 Oracle 中块的常见大小有: 2KB,4KB,8KB,16KB 。在某个特定的表空间中,块的大小是相同的。当然块的大小也可以不是 2 的幂,但是最好用 2 的幂次作为块的大小。下图是段、区段、数据块之间的关系图:
创建数据库时,就为数据库分配表空间,所以块也同时被创建。下图是块的具体结构:
块首部 :包含块类型的有关信息 ( 表快、索引块等 ) 、块上发生的活动事务和过去事务的有关信息(仅事务管理的块有此信息,例如临时排序块就没有事务信息),以及块在磁盘上的地址(位置)。
表目录 :包含了把行存储在这个块上的表的有关信息(可能一个块上存储了多个表的数据)。
行目录 :包含块中行的描述信息,它是一个指针,指向块中数据部分中的行。
块首部,表目录,行目录统称为块开销 ,这部分不存放数据,而是由 oracle 用来管理块自身。