ITPub博客

首页 > 数据库 > Oracle > Ask Hoegh(6)——uniform size为什么必须放在autoextend on next的后面?

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

原创 Oracle 作者:hoegh 时间:2016-03-02 14:25:16 0 删除 编辑
问:
创建数据库表空间时,为什么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博客 ” ,链接:https://blog.itpub.net/30162081/viewspace-2024072/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-03-13

  • 博文量
    132
  • 访问量
    2219945