表空间创建格式及属性说明

今天看了很多关于创建表空间的帖子,但是觉得都不全面,所以决定结合自己的开发经验和网上资源总结一下。


ORACLE中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象.否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方存放,Oracle会提示:没有存储配额.  因此,在创建对象之前,首先要分配存储空间。


一、创建表空间完整的格式
CREATE [UNDO|TEMPORARY] TABLESPACE tablespace_name 
     DATAFILE 'path/filename' [SIZE INTEGER[K| M]]  [REUSE] 
     [AUTOEXTEND [OFF | ON ] ]
     [NEXT INTEGER[K | M]]
     [MAXSIZE [UNLIMITED | INTEGER[K | M]]]
     [MINIMUM EXTENT INTEGER[K | M]]
     [BLOCKSIZE integer [k]]
     [DEFAULT STORAGE storage_clause]
     [ONLINE | OFFLINE]
     [LOGGING | NOLOGGING]
     [FORCE LOGGING]
     [EXTENT MANAGEMENT [DICTIONARY | LOCAL]]
     [AUTOALLOCATE | UNIFORM [SIZE INTEGER[K | M]]]
     [SEGMENT SPACE MANAGEMENT [AUTO | MANUAL]]


二、表空间格式说明
1、UNDO
      说明系统将创建一个回滚表空间。
       在9i中数据库管理员可以不必管理回滚段,只有建立了undo表空间,系统就会自动管理回滚段的分配,回收的工作。当然,也可以创建一般的表空间,在上         面创建回滚段.不过对于用户来说,系统管理比自己管理要好很多.如果需要自己管理,请参见回滚段管理的命令详解.
       当没有为系统指定回滚表空间时,系统将使用system系统回滚段来进行事务管理。
2、tablespace_name表空间名满足oracle的命名规范即可。
3、DATAFILE 'path/filename' [SIZE INTEGER[K| M]]  [REUSE] 
      指定一个或多个数据文件路径和文件名,[SIZE INTEGER[K| M]]用来指定表空间在数据文件中所占的空间大小,K|M是说大小的单位是K还是M。
      [REUSE] 如果创建表空间指定的数据文件已经存在,则需要使用reuse注明,否则会报错。
      ERROR at line 1:
ORA-01537: cannot add data file 'E:\oracle\oradata\10.1.0\ZRPTEST\TB_TEST1.dbf'
- file already part of database
4、[AUTOEXTEND [OFF | ON ] ]  
      禁止或允许自动扩展数据文件,默认情况下为OFF
5、[NEXT INTEGER[K | M]] 
      指定当需要更多盘区时分配给数据文件的磁盘空间,以K或M为单位。
6、[MAXSIZE [UNLIMITED | INTEGER[K | M]]] 
      指定允许分配给数据文件的最大磁盘空间,当为UNLIMITED时表示只有当磁盘空间满时,才不允许再扩展数据文件。
7、[MINMUM EXTENT INTEGER[K | M]]  
      指定盘区大小是指定大小的整数倍。即initial和next盘区大小应为minimum extent的整数倍,这个参数可以减小空间碎片,保证表空间的范围是这个值的整数倍。
      【注:minextents 用于指定在创建时分配给段的盘区总数。使用这个参数,即使可用空间是不连续的,在创建对象时也能分配很大的空间。默认                    值和最小值都是1。如果minextents>1,盘区大小以next和pctincrease为基础计算。】
8、[BLOCKSIZE integer [k]]
        这个参数可以设定一个不标准的块的大小。如果要设置这个参数,必须设置db_block_size,至少一个db_nk_block_size,
        并且声明的integer的值必须等于db_nk_block_size.
       注意:在临时表空间不能设置这个参数。
9、 [DEFAULT STORAGE storage_clause]
       表示为在该表空间创建的全部对象指定缺省的存储参数,没有指定时oracle将会为所有对象指定一些系统默认的存储参数。
       storage_clause的语法格式如下:
       STORAGE(
            INITIAL integer[K|M]       --为段分配第一个区的大小
            NEXT     integer[K|M]       --为第一个扩展分区的大小
            MINEXTENTS integer|UMLIMITED      --创建段时分配的最小总区间数
            MAXEXTENTS integer|UMLIMITED     --创建段时分配的最大总区间数
            PCTINCREASE integer                           --每次扩展增量的大小
            FREELISTS integer                                  --模式对象中每一个自由列表组中自由列表的数量,表、族或索引的每个空闲列表组中的列表数量。
            FREELISTS GROUPS integer                  --指定表、族或索引的每个空闲列表组数量。
         )
10、[ONLINE | OFFLINE]
      ONLINE是指在创建表空间之后使该表空间立即对授权访问该表空间的用户可用。
      OFFLINE是指offline以后,未完成的事物可以提交或回滚,但不能发起新的事物,也不能进行查询。OFFLINE的四种模式
       (1)NORMAL:做检查点 
                 alter tablespace users  offline;           alter tablespace users online;
       (2)TEMPORARY:可以在数据文件损坏的情况下offline tablespace
                 alter tablespace users offline temporary;   alter tablespace users online;
       (3)IMMEDIATE:不做检查点,只有在归档模式下才可以offline tablespace,online时需要recover
                 alter tablespace users offline immediate;    recover tablespace users;       alter tablespace users online;
        (4)FOR RECOVER:在归档模式下才可以offonline,在基于时间点的恢复时使用。
                 alter tablespace users offline for recover;     recover tablsespace users;    alter tablespace users online;
11、[LOGGING | NOLOGGING]
      指定日志属性,它表示将来的表、索引等是否需要进行日志处理。默认值为LOGGING
12、[FORCE LOGGING]
       使用这个子句指出表空间进入强制日志模式。此时,系统将记录表空间上对象的所有改变,除了临时段的改变。这个参数高于对象的nologging选项。
       注意:设置这个参数指数据库不可以open并且进入读写模式。而且,在临时表空间和回滚表空间中不能使用这个选项。
13、[PERMANENT | TEMPORARY]
       指出表空间的属性,是永久表空间还是临时表空间。永久表空间存放的是永久对象,临时表空间存放的是session生命期中存在的临时对象。
       这个参数生成的临时表空间创建后一直都是字典管理,不能使用extent management local选项。
       如果要创建本地管理表空间,必须使用create temporary tablespace
       注意,声明了这个参数后,不能声明block size
14、[EXTENT MANAGEMENT [DICTIONARY | LOCAL]]
        [AUTOALLOCATE | UNIFORM [SIZE INTEGER[K | M]]]
        这是最重要的子句,说明了表空间如何管理范围。一旦你声明了这个子句,只能通过移植的方式改变这些参数。
        如果希望表空间本地管理的话,声明local选项。本地管理表空间是通过位图管理的。autoallocate说明表空间自动分配范围,用户不能指定范围的大小。
        只有9.0以上的版本具有这个功能。uniform说明表空间的范围的固定大小,缺省是1m。
         不能将本地管理的数据库的system表空间设置成字典管理。oracle公司推荐使用本地管理表空间。
         如果没有设置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.
15、[SEGMENT SPACE MANAGEMENT [AUTO | MANUAL]]
       指定 表空间段的管理方式,AUTO为系统自动管理,MANUAL为手工管理。默认为AUTO。


三、表空间创建实例
1、创建一个本地自动分配管理的永久表空间:
      SQL> create tablespace ZRP_MAIN_TB 
  2    datafile 'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB1.dbf' size 200M,
  3             'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB2.dbf' size 200M AUTOEXTEND ON  NEXT
 1M MAXSIZE 2000M 
  4    ONLINE 
  5    LOGGING 
  6    EXTENT MANAGEMENT LOCAL AUTOALLOCATE 
  7    SEGMENT SPACE MANAGEMENT AUTO;


Tablespace created.


SQL> create tablespace ZRP_MAIN_TB 
  2    datafile 'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB1.dbf' size 200M,
  3             'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB2.dbf' size 200M 
  4    EXTENT MANAGEMENT LOCAL AUTOALLOCATE ;


Tablespace created.


注:这里不能设置MINIMUN EXTENT 和BLOCKSIZE,否则会报错。
SQL> create tablespace ZRP_MAIN_TB 
  2    datafile 'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB1.dbf' size 200M,
  3             'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB2.dbf' size 200M AUTOEXTEND ON  NEXT
 1M MAXSIZE 2000M 
  4    MINIMUM EXTENT 32K 
  5    BLOCKSIZE 1
  6    ONLINE 
  7    LOGGING 
  8    EXTENT MANAGEMENT LOCAL AUTOALLOCATE 
  9    SEGMENT SPACE MANAGEMENT AUTO;
create tablespace ZRP_MAIN_TB
*
ERROR at line 1:
ORA-25143: default storage clause is not compatible with allocation policy


2、创建一个数据字典管理的的永久表空间:
SQL> CREATE TABLESPACE ZRP_MAIN_TB 
  2    DATAFILE 'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB1.dbf' size 200M,
  3             'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\MAIN_TB2.dbf' size 200M AUTOEXTEND ON  NEXT
 1280K MAXSIZE 2000M 
  4    MINIMUM EXTENT 128K 
  5    BLOCKSIZE 1
  6    DEFAULT STORAGE(
  7      INITIAL 1280K 
  8   NEXT    1280K 
  9   MINEXTENTS 1 
 10   MAXEXTENTS 4096 
 11   PCTINCREASE 0 
 12    )
 13    ONLINE 
 14    LOGGING 
 15    EXTENT MANAGEMENT DICTIONARY 
 16    UNIFORM SIZE 200M;
CREATE TABLESPACE ZRP_MAIN_TB
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace


错误原因:在ORACLE9i之后,系统缺省安装时为本地管理表空间(LOCAL MANAGED TABLESPACE)LMT。
注:这里不能设置SEGMENT SPACE MANAGEMENT AUTO;


3、创建一个临时表空间:
格式一:
SQL> create temporary tablespace ZRP_TMP_TB1
  2  tempfile 'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\TMP_TB1.dbf' size 100M
  3  autoextend on 
  4  next 1M
  5  extent management local 
  6  /


Tablespace created.
注意:这里不能用AUTOALLOCATE 、SEGMENT SPACE MANAGEMENT AUTO、LOGGING、ONLINE等标记符。


格式一:
create temporary tablespace ZRP_TMP_TB3 
tempfile 'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\TMP_TB3.dbf' size 100M
autoextend on 
next 10M 
maxsize 100M
extent management local 
uniform size 99M;
注意:1、在创建表空间过程中uniform size的大小必须小于数据文件的size大小
            2、在创建表空间过程中maxsize的大小必须大于等于数据文件的size大小 




4、创建一个UNDO表空间:
create undo tablespace ZRP_UNDO_TB1 
datafile 'E:\oracle\oradata\10.1.0\ZRPTEST\ZRP_TB\UNDO_TB1.dbf' size 100M
autoextend on 
next 10M 
maxsize 100M
online 
extent management local autoallocate; 
segment space management auto;
注意:这里不能定义minimum extent、blocksize、default storage、online、logging、segment space management。




       
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值