sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 运维DBA >

【学习笔记】Oracle create tablesapce创建表空间案例详解

时间:2016-11-20 17:59   来源:Oracle研究中心   作者:网络   点击:

天萃荷净 表空间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

Oracle研究中心

关键词:

Oracle create tablesapce

详解Oracle创建表空间语句