Ask Hoegh(6)——uniform size为什么必须放在autoextend on next的后面?

问:
创建数据库表空间时,为什么uniform size必须放在autoextend on (next)的后面,否则会报错?autoextend on next和uniform size子句的功能一样吗?

答:这两个问题本质上是一个问题,弄清楚autoextend on (next)和uniform size的基本概念就明白了。

首先,我们看一下创建表空间的语法:

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}]

其中,autoextend on (next)属于datefile_spec1范畴的概念,即用来描述数据文件的;
       而uniform size属于extent_manager_clause范畴的概念,说明了表空间如何管理extent。
因此,我们得出结论—— autoextend on子句是紧跟datafile定义的,因此一定在 uniform size的前面;二者的功能也是不一样的。


接下来,我们详细介绍一下这两个子句。

datefile_spec1

datefile_spec1 是形如  ['filename'] [SIZE integer [ K | M ]] [REUSE] [autoextend_clause]  其中,[autoextend_clause]是形如: AUTOEXTEND { OFF | ON [ NEXT integer [ K | M ] ] [maxsize_clause] }

具体的,filename是数据文件的全路径名,size是文件的大小,REUSE表示文件是否被重用。

AUTOEXTEND表明是否自动扩展. OFF | ON  表示自动扩展是否被关闭,NEXT 表示数据文件满了以后,扩展的大小。

maxsize_clause表示数据文件的最大大小.形如MAXSIZE { UNLIMITED | integer [ K | M ] }.UNLIMITED 表示无限的表空间.integer是数据文件的最大大小。

extent_management_clause

这是最重要的子句,说明了表空间如何管理extent。一旦声明了这个子句,只能通过移植的方式改变这些参数。

如果希望表空间本地管理的话,声明local选项。本地管理表空间是通过位图管理的。autoallocate说明表空间自动分配extent,用户不能指定extent的大小。只有9.0以上的版本具有这个功能。
uniform说明表空间的extent的固定大小,缺省是1m。oracle推荐使用本地管理表空间。


最后,我们再延伸一个问题。

如果 autoextend on next设置的自动扩展数值小于uniform size定义的extent或不是extent的整数倍数,Oracle会如何处理?我们通过实验测试一下。
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

SQL>
SQL> create tablespace test
 2  datafile 'e:\hoegh\test01.dbf' size 10m
 3   uniform size 1m autoextend on;
uniform size 1m autoextend on
               *
第 3 行出现错误:
ORA-02180: 无效的 CREATE TABLESPACE 选项


SQL>
SQL> create tablespace test
 2  datafile 'e:\hoegh\test01.dbf' size 10m
 3   autoextend on next 1m uniform size 2m;

表空间已创建。

SQL>
SQL> select tablespace_name,next_extent,initial_extent from dba_tablespaces;

TABLESPACE_NAME                NEXT_EXTENT INITIAL_EXTENT
------------------------------ ----------- --------------
SYSTEM                                              65536
UNDOTBS1                                            65536
SYSAUX                                              65536
TEMP                               1048576        1048576
USERS                                               65536
EXAMPLE                                             65536
TEST                               2097152        2097152

已选择7行。

~~~~~~~ the end~~~~~~~~~
hoegh
2016.03.02



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30162081/viewspace-2024072/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30162081/viewspace-2024072/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值