表空间区的管理方式
LMT & DMT
LMT有两种方式控制区的大小:
autoallocate # 自动分配
uniform # 由DBA指定每个区的大小
区的分配机制
存储参数(storage parameters):用于控制段的空间分配,即如何给段分配空间。有两个级别的存储参数,表空间级别和表级别。表空间级别的存储参数是在创建表空间的时候指定的,用于定义该表空间中的表(段)的空间分配原则。表级别的存储参数是在创建表的时候定义表(段)的空间分配原则。
create tablespace sto1 datafile 'xxxx' size 10m default storage (initial 128k next 128k pctincrease 40 minextents 1 maxextents 999);
create table tbsto (
id number not null,
name varchar2(10) not null
) tablespace sto1
storage (initial 1m next 2m pctincrease 60 minextents 2 maxextents unlimited);
若建表时不指定存储参数,表将继承表空间的存储参数。
存储参数有:
initial # 表示分配给表(段)的初始区的大小
next # 指定第二个区的大小
pctincrease # 指定第三个及后续分配区的增长百分百
minextents # 指定创建表时,至少要分配多少个区给这个表(段)
maxextents # 指定可以给这个表(段)区的最大数量
如果表空间是LMT,可以指定区有统一的大小,也可以让Oracle决定后续的区大小。在创建表空间时,可以在extent management local中指定使用autoallocate和uniform来指定使用哪种分配方式。
autoallocate
create tablespace lmtbsb datafile 'xxx' size 10m extent management local autoallocate;
用户不指定区的大小,区的大小由Oracle决定。与block_size和已分配的大小有关。
uniform
create tablespace lmtbsb datafile 'xxxx' size 10m extent management local uniform size 128k;
Oracle会自动分配大小相同的区(128k),所有区的大小相同。
区空间的释放
truncate table ... drop storage # 回收分配给一个段的区
alter table ... deallocate unused # 回收已经分配给一个段,但还未使用的区