Oracle表空间(Tablespace)(二)

2014-11-24 12:44:27 · 作者: · 浏览: 1
议使用local managed的证据。

4. 假如SYSTEM TableSpace是local managed,那么其他TableSpace必须是local managed。

5. 若没指定使用local managed或者dictionary managed,则预设使用local managed。

6. 使用local managed可以增进效能,因为减少了SYSTEM TableSpace的效能竞争。

7. 使用local managed则不需要做空间缝合(loalescing),因为相邻的不同大小的extent,辨识extent使用状态的bits也在一起,Oracle可以直接使用这些相邻的extent。不需要先进行缝合才可以使用。这也可以增进部份效能。

§local managed的extent空间管理(Extent Management):AUTOALLOCATE与UNIFORM

  AUTOALLOCATE与UNIFORM这两个参数,是用来设定Local managed的extent大小的参数。AUTOALLOCATE是让Oracle自己来决定extent的大小;而UNIFORM则是强制规定TableSpace中extent的为固定的大小。通常若你明确的知道extent必须多大,才会使用UNIFORM,使用UNIFORM的好处是每个extent的大小都相同,不会产生空间破碎的问题。但是如果无法预知extent必须多大,使用AUTOALLOCATE会比较好,让Oracle自己决定使用extent的大小,可以比较符合实际的需求,因此会比较节省空间,但是这可能会产生部分空间破碎的问题。使用AUTOEXTENT,Oracle会使用的extent大小为64k、1M、8M、64M。根据我系统上使用的结果,99.95%的extent都是使用64k、只有少部分使用1M的extent,所以其实破碎的情况不严重,使用AUTOALLOCATE在我的系统上其实就够用了。想知道你的TableSpace所使用的Extent有几种,请用下列的语法:

Select bytes,count(*) from dba_extents where tablespace_name='your_tablespace_name' group by bytes

§Local managed中的Segment的空间管理(Segment Space Management ):AUTO与MANUAL

  Tablespace中的Segment的空间管理上,可以设置的参数为AUTO与MANUAL。MANUAL是使用我们熟悉的PCTUSED、FREELISTS、FREELIST GROUPS的方式来管理Segment中的data block;而AUTO则是使用bitmaps来管理data block。使用AUTO来管理的话,以往create tablespace或create table时设定的storage的参数设定都不需要再设定了,因为data block的管理已经是bitmaps了,不再是free list了。如果没有特别的需求话,使用AUTO会比使用MANUAL有更好的空间利用率,与效能上的提升。

----------------------------------------------------------------------------------------------------------------------------------------------------------------

1、创建表空间

创建表空间的完整命令:

Create [undo] tablespace

datafile [,]

mininum extent k|m

blocksize [k]

logging clause

force logging

default storage_clause

online | offline

permanent | temporary

extent_manager_clause

segment_manager_clause

1)、undo指定系统将创建一个回滚表空间

2)、tablespace指定表空间名称

3)、datafile指定数据文件的路径、名称、大小及自增长状况:具体形如'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 50M autoextend on next 10M maxsize 500M,也可以指定on为off,就没有后面的递增和最大尺寸了,也可以在maxsize后面指定最大尺寸unlimited说明表空间无限大。

4)、mininum extent k|m指出在表空间的extent的最小值,这个参数可以减少空间碎片,保证在表空间的extent是这个数值的整数倍;

5)、blocksize [k]设置块的大小,如果要设置这个参数,必须设置成db_block_size的整数倍;

6)、logging cluse指示这个表空间上所有用户对象的日志属性,缺省是logging;

7)、force logging指示表空间进入强制日志模式。此时系统将记录表空间上对象的所有改变,除了临时段的改变。这个参数高于logging参数中的nologging选项;

8)、default storage_clause声明缺省的存储子句;

9)、online|offline指定表空间状态;

10)、permanent | temporary指出表空间的属性,是永久表空间还是临时表空间。永久表空间存放的是永久对象,临时表空间存放的是session生命期中存在的临时对象。这个参数生成的临时表空间创建后一直都是字典管理,不能使用extent management local选项。如果要创建本地管理表空间,必须使用create temporary tablespace。声明了这个参数就不能声明block size。

11)、extent_manager_clause说明表空间如何管理extent。一旦声明了这个子句,就只能通过移植的方式改变这些参数。如果希望表空间本地管理的话,声明local选项。本地管理表空间是通过位图管理的。Autoallocate说明表空间自动分配extent,用户不能指定extent的大小。只有9.0以上的版本具有这个功能。Uniform说明表空间的范围的固定大小,缺省是1M。不能将本地管理的数据库的SYSTEM表空间设置成字典管理。ORACE推荐使用本地管理表空间。如果没有设置这个子句,oracle会进行默认设置。如果初始化参数compatible小于9.0.0,那么系统创建字典管理表空间,如果大于9.0.0,那么按如下设置:

如果没有指定default storage_clause,oracle创建一个自动分配的本地管理表空间;否则如果指定了mininum extent,那么oracle判断mininum extent、initial、next是否相等,以及pctincrease是否为0,如果满足这2个条件,oracle吃醋昂就一个本地管理表空间,extent siz