6.6.2 如何扩展数据文件

扩展数据文件意味着在磁盘上为数据文件分配新的磁盘空间。数据文件有两种扩展方式,即手工扩展和自动扩展。

在创建表空间或者向表空间中添加新的数据文件时,如果通过关键字AUTOEXTEND指定数据文件的自动扩展属性为ON,则该数据文件可以自动扩展。如果没有指定数据文件的自动扩展属性,那么这个文件是不能自动扩展的,只能手工进行扩展。

如果数据文件以前没有自动扩展功能,可以为其指定自动扩展的功能。例如,以下语句为表空间TS6中的数据文件TS6.DBF指定自动扩展功能:


SQL>ALTER DATABASE

DATAFILE'/home/oracle/ts61.dbf'

AUTOEXTEND ON NEXT 128K MAXSIZE 100M;


在上面的语句中,NEXT用于指定每次对数据文件扩展的空间大小,MAXSIZE用于指定数据文件最大允许的大小。对于已经具有自动扩展功能的数据文件,也可以修改它的NEXT和MAXSIZE属性。

我们还可以取消数据文件的自动扩展功能。如:


SQL>ALTER DATABASE

DATAFILE'/home/oracle/ts61.dbf'

AUTOEXTEND OFF;


在创建表空间时,或者向表空间中添加数据文件时,可以同时指定数据文件的自动扩展属性。例如:


SQL>CREATE TABLESPACE TS6

DATAFILE'/home/oracle/ts6_1.dbf'SIZE 10M AUTOEXTEND ON NEXT 256K,

'/home/oracle/ts6_2.dbf'SIZE 20M AUTOEXTEND ON NEXT 1M;


数据文件的自动扩展信息可以从数据字典视图dba_data_files中获得。例如,下面的语句用于查看表空间TS1中数据文件的自动扩展信息,包括文件目前的大小、是否可以自动扩展、每次扩展的大小、文件的最大大小。


SQL>SELECT file_name, bytes, autoextensible, increment_by, maxbytes

FROM dba_data_files

WHERE tablespace_name='TS1';


在上述命令的执行结果中,文件的目前大小和最大大小均以字节为单位,而每次扩展的大小则以数据块数为单位。

在手工扩展数据文件时,需要通过RESIZE为数据文件指定新的大小。例如,以下语句用于将数据文件TS6_1.DBF的大小改为100MB:


SQL>ALTER DATABASE

DATAFILE'/home/oracle/ts6_1.dbf'RESIZE 100M;


实际上,即使数据文件具有自动扩展属性,我们也可以手工改变文件的大小。为数据文件指定的大小可以比原来的大,也可以比原来的小。也就是说,数据文件的大小可以手工扩展,也可以手工缩减。在缩减数据文件的大小时,必须保证能够容纳已有的数据。