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