SQL> select file_name,bytes,maxbytes
2 from dba_data_files
3 where
tablespace_name='TEST_1';
FILE_NAME BYTES MAXBYTES
-------------------------------------- ---------- ----------
F:\TEST1.ORA 10485760 0
SQL> select
file_name,bytes,maxbytes,autoextensible
2 from dba_data_files
3 where
tablespace_name='TEST_1';
FILE_NAME BYTES MAXBYTES AUT
-------------------------------------- ---------- ----------
---
F:\TEST1.ORA 10485760 0 NO
当缺省autoextend on(off)参数的时候默认值为
no,即不自动扩展
SQL> drop tablespace test_1 including
contents and datafiles;
我们再在create tablespace里指定autoextend off
SQL> create tablespace test_1
2 datafile 'f:\test1.ora' size
5m
3 autoextend off
4 segment space management
auto;
表空间已创建。
SQL> select
file_name,bytes,maxbytes,autoextensible
2 from dba_data_files
3 where
tablespace_name='TEST_1';
FILE_NAME BYTES MAXBYTES AUT
-------------------------------------- ---------- ----------
---
F:\TEST1.ORA 5242880 0 NO
此时数据文件也不自动扩展,同样也没有最大值maxbytes
我们将datafile resize下看autoextend及maxbytes
SQL> alter database datafile 'f:\test1.ora'
resize 6m;
数据库已更改。
SQL> select
file_name,bytes,maxbytes,autoextensible
2 from dba_data_files
3 where
tablespace_name='TEST_1';
FILE_NAME BYTES MAXBYTES AUT
-------------------------------------- ---------- ----------
---
F:\TEST1.ORA 6291456 0 NO
然后我们改变autoextend为on,但是不指定具体的maxbytes
SQL> alter database datafile 'f:\test1.ora'
autoextend on;
数据库已更改。
SQL> select
file_name,bytes,maxbytes,autoextensible
2 from dba_data_files
3 where
tablespace_name='TEST_1';
FILE_NAME BYTES MAXBYTES AUT
-------------------------------------- ---------- ----------
---
F:\TEST1.ORA 6291456 3.4360E+10 YES
可见目前maxbytes已经有了值,但是因为没有指定值,因而系统给了一个默认值
我们再来给maxbytes指定一个值
SQL> alter database datafile 'f:\test1.ora'
autoextend on maxsize 10m;
数据库已更改。
SQL> select
file_name,bytes,maxbytes,autoextensible
2 from dba_data_files
3 where
tablespace_name='TEST_1';
FILE_NAME BYTES MAXBYTES AUT
-------------------------------------- ---------- ----------
---
F:\TEST1.ORA 6291456 10485760 YES
可以看到maxbytes已经为我们指定的值,这就说明maxbytes是与autoextend
on 相关的
SQL> alter database datafile 'f:\test1.ora'
autoextend off maxsize 10m;
alter database datafile 'f:\test1.ora' autoextend off maxsize
10m
*
ERROR 位于第 1 行:
ORA-00900: 无效 SQL 语句
当同时指定autoextend off与maxsize
的时候就会出错
我们再来试一下
SQL> alter database datafile 'f:\test1.ora'
autoextend off;
数据库已更改。
SQL> select
file_name,bytes,maxbytes,autoextensible
2 from dba_data_files
3 where
tablespace_name='TEST_1';
FILE_NAME BYTES MAXBYTES AUT
-------------------------------------- ---------- ----------
---
F:\TEST1.ORA 6291456 0 NO
当改变autoextend值为off的时候maxsize的值又归为0
再看resize与maxsize
SQL> create tablespace test1
2 datafile 'f:\test1.ora' size
2m
3 autoextend on maxsize
4m
4 segment space management
auto;
SQL> select
file_name,bytes,maxbytes,autoextensible
2 from dba_data_files
3 where
tablespace_name='TEST1';
FILE_NAME BYTES MAXBYTES AUT
-------------------------------------- ---------- ----------
---
F:\TEST1.ORA 2097152 4194304 YES
SQL> alter database datafile 'f:\test1.ora'
resize 6m;
数据库已更改。
这说明我们可以手动更改datafile的大小在maxbytes的范围外,只有自动扩展的时候maxbytes起作用,手动修改了size的大小,在存储数据时可以超过maxbytes的限制
SQL> select
file_name,maxbytes/1024/1024 max_m,bytes/1024/1024 byte_m
from dba_data_files
where tablespace_name='TEST1';
FILE_NAME MAX_M BYTE_M
-------------------------------------- ---------- ----------
F:\TEST1.ORA 4 6
这个size的大小已经超出了maxsize限定的范围,我们再来看看在表空间test1里唯一的表的大小
SQL> select segment_name
,sum(bytes)/1024/1024 byte_m
2 from user_extents
3 where
segment_name='TEST1_1'
4 group by
segment_name;
SEGMENT_NAME BYTE_M
------------------ ----------
TEST1_1 5
表的大小已经是5M,说明数据文件的容量是6M,但是超过6M的数据是不能被存储的