首先声明一下:不论你使用的存储设备是哪种文件系统,COOKED、ASM,哪怕是原始分区,以下所讨论的概念都适用。
BLOCK(块)
block 是oracle中最小的分配单位,也是最小的I/O单位,可以在创建数据库时设定block的大小,可以设为任意的大小,但为了支持与兼容方面,建议现实中设为2的幂,例如:
2KB、4KB、8KB,最大为32KB。
EXTENT(区)
extent 是由逻辑连续的block组成的,注意是逻辑上的,一般来讲,文件本身在磁盘上不是连续的,extent的大小可能是一个block的大小,也可能大到2GB,
SEGMENT(段)
segment 是由一个或多个extent组成的,segment就是占用存储空间的数据库对象,例如表、索引等,segment在tablespace中,但可以包含这个tablespace中的多个数据文件中的数据
TABLESPACE(表空间)
ORACLE数据库是由一个或多个TABLESPACE构成,什么是TABLESPACE? 一种逻辑上的存储容器,包括一个或多个datafile(数据文件)。tablespace可以包含多个segment(表段,索引段等),但一个segment只能属于一个tablespace。
上图中圆柱形代表datafile(user_data01.db和user_data02.dbf),T1,T2,I1是3个segment(可能是2个表和1个索引),这个USER_DATA TABLESPACE分配了4个extent,T1和I1各有一个extent。如果这个TABLESPACE需要更多的空间,可以调整已分配给该TABLESPACE的datafile的大小,也可以增加第三个datafile。
要说明的是上述所讨论的概念除了block都是逻辑上的概念,所谓连续的也是逻辑上连续的。