创建数据库表空间时,为什么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行。
hoegh2016.03.02
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30162081/viewspace-2024072/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30162081/viewspace-2024072/