我们假设blocksize=8k,并创建一个表空间和两张表
SQL> create tablespace lmt datafile 'd:\oracle\oradata\testdb\lmt01.dbf' size1mblocksize 8k extent management local uniform. size 32k;
Tablespace created.
SQL> create table lmt (id number) tablespace lmt;
Table created.
SQL> insert into lmt values(1) ;
1 row created.
SQL> commit;
SQL> set serveroutput on
SQL> exec show_space('LMT')
Free Blocks.............................1
Total Blocks............................4
Total Bytes.............................32768
Unused Blocks...........................2
Unused Bytes............................16384
Last Used Ext FileId....................11
Last Used Ext BlockId...................9
Last Used Block.........................2
SQL> create table lmt2(id number) storage (initial 60k next 40k) tablespace lmt;
Table created.
整个数据文件的使用情况如图所示

前两个块block 1,block2为文件头,从3到8共6个块被位图区占用,也就是说,在数据文件头部共8个块用于系统消耗。如果我们的db_block_size为8192,那么很明显,占用的空间为64K(注意:对于不同的块大小,文件头部的块个数与大小可能会不一样)。
从block 9到block n用于segment空间的分配,由于我们创建了一张表LMT且表空间采用32k的uniform. extent size ,所以block 9-12则是分配给表LMT的extent。其中block 9是表LMT的segment header,block 10到12共3个块才真正存储用户的数据。而表LMT2尽管指定了initial 60k,next 40k的存储参数,但也由于uniform. extent 32k的缘故,被取整为64K,而next参数则被忽略,这些你可以查询user_extents,user_segments两个视图得到证实。
对于resize,可以总结如下
#uypF}[gR7W0如果是DMT:ITPUB个人空间ixXDH
在没有数据的情况下(指新的数据文件,没有被分配过),最小的resize尺寸是文件头(1block)+1block,最小free size为1block
FSC uP9H0在有数据的情况下,最小的resize尺寸是Used_space(HWM),可以让free size为nullITPUB个人空间Xy'H/^v(Cp8D
如果是LMT:
]Tl|6B
cK0在没有数据的情况下(指新的数据文件,没有被分配过),最小的resize尺寸是文件头(8*block or 64K或其它)+1*bit,
3n?K9U/H!|s0最小free size为1bitITPUB个人空间)z(}OM []&Dt
在有数据的情况下,最小的resize尺寸是Used_space(HWM),可以让free size为null
更多讨论:http://www.itpub.net/viewthread.php?tid=142629&extra=&page=3