面试题:
4. 解释data block , extent 和 segment的区别(这里建议用英文术语)
解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
数据库逻辑上最小的单元就是data block, block 可以设置为2K, 4K, 8K....64k。
extent由block组成,segment则由extent组成,tablespace由segment组成,
datafile是数据库的物理表现形式,一个tablespace可以对应多个datafile,一个datafile只能属于一个tablespace。
§2.5 数据块、区间和段
§2.5.1 数据块(datablock)
l Oracle的数据块也叫Oracle块;
l Oracle系统在创建表空间时将数据文件格式化成若干个Oracle块;
l 每个Oracle块是Oracle系统处理的最小单位;
l 块的大小在安装系统时确定,可以选择“自定义安装”来设置大小;
l 块的大小一旦确定下来就不能改动;
l 块的大小可以从2k至64k不等;
l 块的大小可以用下面命令查到:
select name,value from v$parameter wherename like 'db_block_size';
§2.5.2 区间(extent)
l 分配给对象(如表)的任何连续块叫区间;
l 区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);
l 区间的大小由 next 决定;
l 一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象;
l 一个对象所用去多少区间可用下命令查到:
select segment_name,tablespace_name,count(*) from dba_extents
having count(*)>1 group by segment_name,tablespace_name;
§2.5.3 段(segment)
l 段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;
l 段可以有表段、索引段、回滚段、临时段和高速缓存段等;
l 段使用同表空间中的若干Oracle块(可以位于不同数据文件中)。
例:
CREATE TABLE abc ( empno number(4),ename varchar2(20),sal number(9,2))
TABLESPACE user_data storage(initial 500k next 256k pctincrease 0);
1)段被分配=初始区间=500k;
2)当开始的500k用完后就再分配256k;此时段=500k+256k;
3)如果所分配的区间又用完后,就再分配256k, …