--创建表空间,指定数据文件初始大小10M,开启自动扩展,最大大小20M。
SQL> create tablespace tbs_Test datafile 'd:\tbs01.dbf' size 10m autoextend on maxsize 20m;
表空间已创建。
SQL> create table tttt tablespace tbs_test as select * from dba_objects;
表已创建。
SQL> col segment_name for a50
SQL> col file_name for a50
SQL> select segment_name,bytes/1024/1024 from dba_segments where SEGMENT_name='TTTT';
SEGMENT_NAME BYTES/1024/1024
-------------------------------------------------- ---------------
TTTT 13
--可以看出,创建的表占空间13M,超出了初始大小。
SQL> select file_name,file_id,maxbytes/1024/1024 from dba_data_files;
FILE_NAME FILE_ID MAXBYTES/1024/1024
-------------------------------------------------- ---------- ------------------
C:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF 1 32767.9844
C:\APP\ORACLE\ORADATA\ORCL\SYSAUX01.DBF 3 32767.9844
C:\APP\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF 5 32767.9844
C:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF 6 32767.9844
C:\APP\ORACLE\ORADATA\ORCL\EXAMPLE01.DBF 7 32767.9844
C:\APP\ORACLE\ORADATA\ORCL\SECURE_TBS01.DBF 8 0
C:\APP\ORACLE\ORADATA\ORCL\TBS_BIG01.DBF 9 33554432
C:\APP\ORACLE\ORADATA\ORCL\TT01.DBF 10 0
C:\APP\ORACLE\ORADATA\ORCL\TTS01.DBF 11 0
C:\APP\ORACLE\ORADATA\ORCL\UNDOTBS02.DBF 12 0
D:\TBS01.DBF 13 20
已选择 11 行。
SQL> select file_name,file_id,maxbytes/1024/1024 from dba_data_files where file_id=13;
FILE_NAME FILE_ID MAXBYTES/1024/1024
-------------------------------------------------- ---------- ------------------
D:\TBS01.DBF 13 20
--数据文件(FILE_IDY为13)的最大大小为20M
--再次插入报空间不足,证明此次插入无法超过MAXSIZE(20M)的限制。
SQL> insert into tttt select * from tttt;
insert into tttt select * from tttt
*
第 1 行出现错误:
ORA-01653: 表 SYS.TTTT 无法通过 128 (在表空间 TBS_TEST 中) 扩展
--修改数据文件大小为30M
SQL> alter database datafile 'd:\tbs01.dbf' resize 30m;
数据库已更改。
SQL> select file_name,file_id,maxbytes/1024/1024 from dba_data_files where file_id=13;
FILE_NAME FILE_ID MAXBYTES/1024/1024
-------------------------------------------------- ---------- ------------------
D:\TBS01.DBF 13 20
--修改数据文件大小为30M后,数据文件字典信息中最大大小没有变化,还是20M。此时还能插入吗?
SQL> insert into tttt select * from tttt;
已创建 91923 行。
--证明可以继续插入,文件大小(30M)超出了最大大小(20M)时,还是以30M为限制 。
SQL> insert into tttt select * from tttt;
insert into tttt select * from tttt
第 1 行出现错误:
ORA-01653: 表 SYS.TTTT 无法通过 128 (在表空间 TBS_TEST 中) 扩展
--继续插入报错,因此超出了30M的限制
SQL> select segment_name,bytes/1024/1024 from dba_segments where SEGMENT_name='TTTT';
SEGMENT_NAME BYTES/1024/1024
-------------------------------------------------- ---------------
TTTT 29
--修改文件的最大大小为50M
SQL> alter database datafile 'd:\tbs01.dbf' autoextend on maxsize 50m;
数据库已更改。
SQL> select file_name,file_id,maxbytes/1024/1024 from dba_data_files where file_id=13;
FILE_NAME FILE_ID MAXBYTES/1024/1024
-------------------------------------------------- ---------- ------------------
D:\TBS01.DBF 13 50
--继续插入
SQL> insert into tttt select * from tttt;
已创建 183846 行。
--可以插入成功。
总结:
数据文件参数 bytes 和 maxbytes,在数据插入中会选择值大的为最大限制。
但修改bytes(resize)时不会修改数据字典maxbytes的值。但这之中,是以两个值中较大的值作为最大限制
|