假设当前数据库的DB_BLOCK_SIZE为D(K),建表的DDL设定了INITIAL为T,MINEXTENTS为S,PCTINCREASE为P,NEXT为N
本文的DB_BLOCK_SIZE=8K
1、字典管理
MIN_EXTENT:可以是大于0的任意整数
PCT_INCREASE:
INITIAL:,则如果建表时设定的INITIAL设定的值大于2*D,则实际INITIAL=CEIL(T/D)*D;如果建表时设定的INITIAL设定的值小于等于2*D,则实际INITIAL值为2*D。
如:EXP-1
create table test1
(
a number
)
tablespace system--字典管理表空间
storage
(
initial 1k
next 1k
minextents 4
pctincrease 20
);
在这个例子中,实际INITIAL为16K;
EXP-2
create table test2
(
a number
)
tablespace system--字典管理表空间
storage
(
initial 100k
next 100k
minextents 4
pctincrease 20
);
在这个例子中,实际的INITIAL=CEIL(100/8)*8=104
NEXT:
如果S=1,则实际的NEXT=CEIL(INITIAL*(1+P/100)/N)*N,其中INITIAL为实际值,而不是设定值;
如果S>1,则NEXT的实际值为S=1的情况下的第S+1个extent的值
EXP-3
create table test1
(
a number
)
tablespace system--字典管理表空间
storage
(
initial 100k
next 100k
minextents 1
pctincrease 20
);
在本例中,实际的NEXT=CEIL(104*1.2/8)*8=128
EXP-4
create table test1
(
a number
)
tablespace system--字典管理表空间
storage
(
initial 100k
next 100k
minextents 4
pctincrease 20
);
在本例中,实际的NEXT=192。
第二个EXTENT=INITIAL=104
SQL> select ceil(104*1.2/8)*8 from dual;(第3个EXTENT)
CEIL(124.8/8)*8
---------------
128
SQL> select ceil(128*1.2/8)*8 from dual;(第4个EXTENT)
CEIL(128*1.2/8)*8
-----------------
160
SQL> c/128/160
1* select ceil(160*1.2/8)*8 from dual;(第5个EXTENT)
SQL> /
CEIL(160*1.2/8)*8
-----------------
192
在本例中,NEXT=192K
2、本地管理
在创建表空间和创建表时,都可以设置storage参数。其中表的storage参数的优先级大于表空间的参数。如果建表时没有指定storage,则oracle会继承表所对应的表空间的存储参数。
INITIAL
LMT下,oracle在表空间一级不能设定NEXT, PCTINCREASE, MINEXTENTS, MAXEXTENTS,但在段一级可以设定这几个参数(如在建表、索引的时候)。如果在段一级设定了这几个参数,则这几个参数将用来计算段的INITIAL值,此时段的INITIAL值将不是设定值,而是通过计算得到。
如果LMT表空间不是UNIFORM,则:
EXP-5
create table test
(
a number
)
storage
(
initial 100k
next 100k
minextents 4
pctincrease 100
);
该表所在表空间为本地管理的,这个表的实际的INITIAL为832K。
在LMT下,extent都是以64K为基本单位的,其初始的extent一般为64K。在本例中,MINEXTENTS为4,则前四个extent的实际大小分别为:
104K-104K-208K-416K(PCTINCREASE 100,参考DICT下INITIAL的计算方法)
所以,本例中INITIAL=104+104+208+416=832K。由于LMT下的EXTENT最小单位是64K,832刚好是64的倍数,所以oracle分配13个extents给INITIAL;如果计算得到的INITIAL不是64K的整数倍,oracle会按一下方法计算并分配:
CEIL(INITIAL/64)*64
如果LMT是UNIFORM(UNIT SIZE=16K),则
EXP-6
create table test
(
a number
)
tablespace t_uniform
storage
(
initial 100k
next 100k
minextents 4
);
则INITIAL=104+104+104+104=416,建表时oracle分配了26个extent给test
LMT下,PCTINCREASE, NEXT参数将不复存在(不能修改)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21601207/viewspace-689659/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21601207/viewspace-689659/