天萃荷净
表空间Tablespace是Oracle数据库逻辑结构中的一个层次。创建管理表空间和对应的数据文件,是DBA的一项重要工作内容。本篇从不同的表空间特性谈起,说明使用的参数特性。
创建表空间语句语法:
CREATE [UNDO]
TABLESPACE tablespace_name
[
DATAFILE datefile_spec1 [,datefile_spec2] ......
[{
MININUM EXTENT integer [k|m] |
BLOCKSIZE integer [k] |
logging clause |
FORCE LOGGING
|
DEFAULT {data_segment_compression}
storage_clause |[online|offline] |[
PERMANENT|
TEMPORARY]
|
extent_manager_clause |segment_manager_clause}]
1、undo
说明系统将创建一个回滚表空间。
在9i中数据库管理员可以不必管理回滚段,
只有建立了undo表空间,系统就会自动管理回滚段的分配,回收的工作。 当然,也可以创建一般的表空间,在上面创建回滚段.不过对于用户来说,系统管理比自己管理要好很多. 如果需要自己管理,请参见回滚段管理的命令详解.
当没有为系统指定回滚表空间时,系统将使用system系统回滚段来进行事务管理。
2、tablespace_name
指出表空间的
名称。
3、datafile datefile_spec1
指出表空间包含什么空间数据文件。
datefile_spec1是形如:
['filename'] [SIZE integer [ K | M ]] [REUSE] [autoextend_clause]
其中filename是数据文件的路径名,可以是相对路径,也可以是绝对路径。
[
autoextend_clause]是形如:
AUTOEXTEND { OFF | ON [
NEXT integer [ K | M ] ] [
maxsize_clause] }
size:是文件的大小,
REUSE:表示文件是否被重用.
AUTOEXTEND:表明是否自动扩展.
OFF | ON :表示自动扩展是否被关闭.
NEXT :表示数据文件满了以后,扩展的大小.
maxsize_clause:表示数据文件的最大大小.例如MAXSIZE { UNLIMITED | integer [ K | M ] }.
UNLIMITED :表示无限的表空间.
integer:是数据文件的最大大小.
例:
DATAFILE 'D:/oracle/oradata/IMAGEDATA01.dbf'
SIZE 2000M
, 'D:/oracle/oradata/IMAGEDATA02.dbf'
SIZE 2000M
4、MININUM EXTENT integer [k|m]
指出在
表空间中范围的最小值。这个参数
可以减小空间碎片,保证在表空间的范围是这个数值的整数倍。
5、BLOCKSIZE integer [k]
这个参数可以设定一个不标准的块的大小。如果要设置这个参数,
必须设置db_block_size, 至少一个db_nk_block_size,并且
声明的integer的值必须等于db_nk_block_size.
注意:在临时表空间不能设置这个参数。
6、logging clause
这个子句声明这个表空间上所有的用户对象的日志属性(缺省是logging),包括表,索引,分区,物化视图,物化视图上的索引,分区。
7、FORCE LOGGING
使用这个子句指出表空间进入强制日志模式。此时,系统将记录表空间上对象的所有改变,除了临时段的改变。
这个参数高于对象的nologging选项。
注意:设置这个参数数据库不行open并且出于读写模式。而且,在临时表空间和回滚表空间中不能使用这个选项。
8、DEFAULT storage_clause
声明缺省的存储子句。
9、online|offline
改变表空间的状态。online使表空间创建后立即有效.这
是缺省值. offline使表空间创建后无效.这个值,可以从dba_tablespace中得到。
10、PERMANENT|TEMPORARY
指出表空间的属性,是
永久表空间还是
临时表空间。
永久表空间存放的是永久对象;
临时表空间存放的是session生命期中存在的临时对象。 这个参数生成的临时表空间创建后一直都是字典管理,不能使用extent management local选项。
如果要创建本地管理表空间,必须使用create temporary tablespace
注意,声明了这个参数后,不能声明block size
11、extent_management_clause
这是最重要的子句,说明了表空间
如何管理范围。一旦你
声明了这个子句,
只能通过移植的方式改变这些参数。
如果希望表空间
本地管理的话,
声明local选项。本地管理表空间是
通过位图管理的。
autoallocate说明表空间自动分配范围,用户不能指定范围的大小。只有9.0以上的版本具有这个功能。
uniform说明表空间的范围的
固定大小,缺省是1m。
不能将本地管理的数据库的system表空间设置成字典管理。
推荐使用本地管理表空间。
如果没有设置extent_management_clause,oracle会给他设置一个默认值。
如果初始化参数compatible小于9.0.0,那么系统创建字典管理表空间。
如果大于9.0.0,那么按照如下设置:
如果没有指定default storage_clause,oracle创建一个自动分配的本地管理表空间。
否则,
如果指定了mininum extent,那么oracle判断mininum extent 、initial、next是否相等,以及pctincrease是否=0.
如果满足以上的条件,oracle创建一个本地管理表空间,extent size是initial.
如果不满足以上条件,那么oracle将创建一个自动分配的本地管理表空间。
如果没有指定mininum extent。initial、那么oracle判断next是否相等,以及pctincrease是否=0。
如果满足oracle创建一个本地管理表空间并指定uniform。否则oracle将创建一个自动分配的本地管理表空间。
注意:本地管理表空间只能存储永久对象。
如果你声明了local,将不能声明default storage_clause,mininum extent、temporary.
EXTENT MANAGEMENT LOCAL
12、segment_management_clause
段空间管理的方式,
自动或者
手动:
SEGMENT SPACE MANAGEMENT {AUTO|MANUAL}
--
13、在使用命令行创建表空间Tablespace的过程中,包括几个方面的参数
数据文件参数:包括表空间对应数据文件名称,初始大小和可变化规则;
Extent(分区):分配规则方案:表空间对segment对象进行增加空间分配的时候,使用的分配方法和策略;
Segment(段):对象管理方式:分为自动段对象管理或者手动段对象管理;
下面分别进行介绍:
1、数据文件Datafile参数
表空间是“表、段、区、块”Oracle四层逻辑结构中唯一与特定物理文件对应的层次。一个表空间可以对应不同硬盘上的多个文件,而一个文件只能属于一个表空间。
在建立表空间的时候,都会生成至少一个数据文件作为表空间信息保存的地方。如果在Create tablespace时没有进行指定datafile字句,那么Oracle会自动依据OMF的方式创建出一个数据文件。
指定数据文件的字句是使用datafile作为关键字,后面内容包括文件路径、初始大小、拓展方式和每次增加空间大小。
SQL> create tablespace test datafile 'd:\oradata\orcl\test.dbf' size 10m autoextend on next 1m maxsize 100m;
Tablespace created
size子句:指定生成数据文件的初始大小,默认值通常为100m。对成熟的系统部署移植工作而言,通常是可以确定文件的固定大小。避免经常性的文件膨胀,引起性能变化;
autoextend开关与next子句:文件大小变化开关是通过autoextend来实现的。如果设置on,表示该文件允许进行动态拓展,文件写满之后就会以next指定的大小进行拓展。如果设置为off,则该文件不进行拓展;
next子句:当文件设置为可拓展时,next为每次进行拓展的步长。如果数据文件是经常大批量的增加,设置一个较大的next值为好;
maxsize子句:文件大小上限;
2、extent分区分配方案
表空间Tablespace内部容纳的逻辑结构就是段segment对象。段对象通常是和数据库各个Schema中的对象相关联。表空间空间管理中一个重要方面就是将新的extent分配给segment对象。一个segment会对应一个或者多个extent对象。extent区就是连续的block块集合。
从Oracle发展历程看,extent分配方案有两个阶段。首先出现的是Dictionary Mangage Tablespace,就是数据字典管理方式。数据库中维护一个数据表,每次进行extent分配管理的时候,都要访问该数据表。DMT代表了一个时代,同时也伴随着致命的缺陷。
数据库的一个重要指标就是并行度。一旦出现并行瓶颈,就意味着系统架构存在缺陷。DML就是这样的一个问题,当数据库表空间存在大量的分配请求时,该数据表容易形成瓶颈。于是,DML就被一种新的分配方法Locally Mangage Tablespace(LMT)所取代。
目前的Oracle数据库,都是缺省使用LMT方法的。LMT简单来说,就是利用位图表技术,将分配extent的方法和记录记录在数据文件的文件头上。这样,不同文件的分配压力,就从一个数据表上分散到多个文件上。
目前的Oracle数据库,是可以同时支持LMT和DMT的。但是,新系统一般都会使用LMT。LMT策略下,有存在分配extent大小的问题。
每次进行extent分配的策略,有系统自动和统一大小uniform. size两种方法。
automatic allocation自动分配大小。对每个分配extent的大小,由系统自动进行大小判定。这种方式的优点是每次的extent大小比较灵活。但是缺点也是很严重,就是引起大量的存储碎片。
uniform. size统一大小。每次分配的extent的大小都是固定的,这样可以很大程度的避免碎片问题。默认uniform. size大小是1M。
3、段segment管理策略
最后介绍表空间创建参数中的segment管理策略。segment对应的通常是一个数据库留存对象信息,如数据段、索引段、回滚段。Segment space management对应的是对segment空间管理的策略,目前有auto和manual两种方式。
ASSM(auto)方式:ASSM是代表新趋势的技术,10g中对应的shrink space功能,就是以ASSM技术作为基础,有效减低HWM,避免出现过多的空间浪费。在过去需要设计的pctfree、pctlist等参数,也使用自动化方式进行管理;
手工(Manual)方式:与自动ASSM相对应。与ASSM不同在于每个segment对象都能拥有独立的存储设置参数;
在segment管理策略上,目前一般都选择ASSM策略。但并不意味着ASSM是万能的,还存在一些局限。
例:
SQL> create tablespace tradway datafile '/u01/oradata/WILSON/datafile/trad.dbf' size 100m autoextend off extent management local uniform. size 1m segment space management manual;
Tablespace created
对应数据字典的信息为:
SQL> select tablespace_name, extent_management, allocation_type,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPACE_MANAGEMENT
------------------------------ ----------------- --------------- ------------------------
(篇幅原因,有省略……)
TRADWAY LOCAL UNIFORM MANUAL
9 rows selected
实例1:创建永久表空间
可以一次创建单个表空间,也可以一次性创建多个表空间
1.1创建单个表空间
create tablespace ts_something
logging
datafile '/dbf1/ts_sth.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
1.2创建多个表空间
CREATE TABLESPACE TS_IMAGEDATA
NOLOGGING
DATAFILE 'D:"oracle"oradata"DATA01.dbf' SIZE 2000M,
'D:"oracle"oradata"DATA02.dbf' SIZE 2000M,
'D:"oracle"oradata"DATA03.dbf' SIZE 2000M,
'D:"oracle"oradata"DATA04.dbf' SIZE 2000M,
'D:"oracle"oradata"DATA05.dbf' SIZE 2000M EXTENT
MANAGEMENT LOCAL SEGMENT
SPACE MANAGEMENT AUTO;
CREATE TABLESPACE TS_IMAGEDATA
LOGGING
DATAFILE 'E:"ORACLE"ORADATA"DATA_01.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_02.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_03.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_04.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
实例2:创建撤销表空间
create undo tablespace ts_undo
datafile '/dbf/undo.dbf' size 100M;
CREATE UNDO TABLESPACE ts_undo01
DATAFILE '/data/ts_undo01.dbf'
SIZE 50000M REUSE
autoextend on;
创建私用表空间:
create tablespace jf_data datafile '/opt/oracle/app/oracle/oradata/mydata/jfdata.dbf' size 1000M autoextend on next 500M maxsize unlimited;
create tablespace jf_index datafile '/opt/oracle/app/oracle/oradata/mydata/jfindex.dbf' size 1000M autoextend on next 500M maxsize unlimited;
--------------------------------------ORACLE-DBA----------------------------------------
最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle create tablesapce创建表空间案例详解
本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/1302.html