本文内容主要参考: 老盖的《循序渐进 Oracle数据库管理,优化与备份恢复》
以及博文 http://jolly10.itpub.net/post/7268/472662
1. 本地管理表空间的区大小分配方式
表空间的管理方式主要有:本地管理和数据字典管理。本地管理采用在位图记录区的分配情况,而数据字典管理的方式采用字典表记录区的分配情况,本地管理方式从10g开始渐渐被淘汰。区作为基本分配单位分配给段时,其大小也有区别的。
create tablespace lmt_bmb
datafile 'lmt_bmb' size 100M autoextend off
logging
permanent
extent management local uniform size 1M --uniform方式,区大小固定为1M
blocksize 8k
segment space management manual --段管理方式确认后,将无法修改,之能重建
flashback on;
create tablespace lmt_bmb_auto
datafile 'lmt_bmb_auto.dbf' size 100M autoextend off
logging permanent
extent management local autoallocate --autoallocate方式,区大小又系统自动分配
blocksize 8k
segment space management manual
flashback on;
uniform方式按统一的区大小分配给段,而autoallocate方式会逐渐调整分配给段的大小。通过以下语句可以查询表空间的情况:
SQL> select tablespace_name, extent_management, allocation_type
2 from dba_tablespaces;
TABLESPACE_NAME EXTENT_MANAGEMENT ALLOCATION_TYPE
------------------------------ ----------------- ---------------
SYSTEM LOCAL SYSTEM
SYSAUX LOCAL SYSTEM
UNDOTBS1 LOCAL SYSTEM
TEMP LOCAL UNIFORM
USERS LOCAL SYSTEM
ADDDATA01 LOCAL SYSTEM
ADDDATA02 LOCAL SYSTEM
ADDINDX01 LOCAL SYSTEM
ADDINDX02 LOCAL SYSTEM
ADDTEMP01 LOCAL UNIFORM
UNDOTBS001 LOCAL SYSTEM
LMTS LOCAL SYSTEM
LMT_BMB LOCAL UNIFORM
LMT_BMB_AUTO LOCAL SYSTEM
system表示autoallocate方式,后续通过dump数据文件头来了解区的位图信息,以及区分配方式。
2. Uniform方式以及数据文件头的位图信息
SQL> create table test tablespace lmt_bmb as select * from dba_users where 1=0;
Table created
SQL> select tablespace_name, extent_id, block_id, blocks from dba_extents where tablespace_name = 'LMT_BMB';
TABLESPACE_NAME EXTENT_ID BLOCK_ID BLOCKS
------------------------------ ---------- ---------- ----------
LMT_BMB 0 9 128
Test表创建时是从block_i