问题:表空间是存储数据库对象的逻辑容器,在创建对象时不指定存储特性,则会继承表空间的存储特性,因此应如何创建可维护最优化的表空间
解决方案:
创建的表空间应具有如下特性(如果可以选择):
1、本地管理
2、ASSM(automatic segment space management),自动段空间管理
使用下面的语句创建:
create tablespace tools
datafile 'D:\oradata\o11r2\tool01.dbf'
size 100m
extent management local
uniform size 128k
segment space management auto
/
自11gr2起,extent management directory已被废弃
通过extent management local启用本地管理的表空间,如果system是本地管理的,那之后将不允许创建字典管理的表空间
通过segment space management auto启用ASSM
通过uniform size子句,设置每一次扩展都是同样的大小。也可以声明成autoallocate,这样oracle每次就会按照64k,1m,8m,64m扩展空间,如果表空间内对象大小不固定,那么最好是自动分配
工作原理:
oracle 11gr2之前可以使用字典管理的表空间,这种管理方式使用数据字典管理空间,当表和索引的扩展频繁时需要频繁更新数据字典,管理性能差
本地管理的表空间在每个数据文件使用一个位图管理对象扩展和空闲空间,效率较高
本地表空间管理+ASSM使很多空间方面的设置被废弃
在本地管理的表空间中,下面的参数不再生效:
next
pctincrease
minextents
maxextents
default
使用ASSM,下面的参数不用在手工设置:
pctused
freelists
freelist groups
与auto对应的是manual,manual需要手工设置上面的参数
通过下面的sql查看表空间和段空间的管理方式:
select tablespace_name,segment_space_management,extent_management from dba_tablespaces;
不能对system表空间使用ASSM,ASSM也仅对永久的本地管理表空间生效。
可以配置数据文件自动增长,配置了自动增长建议也配置数据文件最大值
size 1G autoextend on maxsize 10G
创建的表空间可以是smallfile或者bigfile,区别是后者只能有一个数据文件(10g之前只能用smallfile),8k的数据块大小可以创建32T的数据文件,使用下面的sql语句创建:
create bigfile tablespace tools_bf
datafile 'D:\oradata\o11r2\tool_bf01.dbf'
size 100m
extent management local
uniform size 128k
segment space management auto
/
select tablespace_name,bigfile from dba_tablespaces;
默认创建的是smallfile表空间
数据库默认的表空间是smallfile表空间,如果想更改为bigfile表空间
1、创建数据库时使用:set default bigfile tablespace进行设置
2、之后更改:alter database set default bigfile tablespace;
设置创建的表空间默认是smallfile还是bigfile
alter database set default bigfile tablespace;
alter database set default smallfile tablespace;
设置数据库用户的默认表空间
alter database default tablespace users;