Oracle:resize bigfile Tablespace
大文件的报空间表示只有一个数据文件的表空间。
但默认情况下,表空间为小文件表空间。
而对表空间的扩容,除了增加数据文件的方法外(小文件表空间),另一个方法就是通过“resize”子句,设定扩容到的位置。该方法仅用于对大文件表空间使用,因为大文件表空间只有一个数据文件,这使得resize的使用具有了可行性,也因为大文件表空间的概念是只有一个数据文件的表空间,故而无法通过增加表空间的方式进行扩容。
查看数据库的默认表空间类型:
1 2 3 4 5 6 7 |
SQL> select * from database_properties where property_name='DEFAULT_TBS_TYPE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------ ------------------------ ------------------------ DEFAULT_TBS_TYPE SMALLFILE Default tablespace type SQL> |
可以通过“alter database set …”指令修改该默认参数的值。
具体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
SQL> alter database set default bigfile tablespace; Database altered. SQL> select * from database_properties where property_name='DEFAULT_TBS_TYPE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------ ------------------------ ------------------------ DEFAULT_TBS_TYPE BIGFILE Default tablespace type SQL> alter database set default smallfile tablespace; Database altered. SQL> select * from database_properties where property_name='DEFAULT_TBS_TYPE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------ ------------------------ ------------------------ DEFAULT_TBS_TYPE SMALLFILE Default tablespace type SQL> |
查看当前的表空间是否是大文件表空间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SQL> select tablespace_name,bigfile from dba_tablespaces; TABLESPACE_NAME BIG ------------------------------ --- SYSTEM NO SYSAUX NO UNDOTBS1 NO TEMP NO USERS NO ALLAH NO ADAMHUAN NO 7 rows selected. SQL> |
如果对一个小文件表空间应用“alte tablespace xxx resize xxx”,你会收到如下错误:
1 2 3 4 5 6 7 8 |
SQL> alter tablespace users resize 400M; alter tablespace users resize 400M * ERROR at line 1: ORA-32773: operation not supported for smallfile tablespace USERS SQL> |
创建表空间的语句是:“create tablespace …”。
如果该语句中不特别的标注是否是大文件表空间或小文件表空间,则该语句会通过上述的“default_tbs_type”设定的值去指定表空间的类型去创建需要的表空间。
特别之处创建大文件表空间的语句是:“create bigfile tablespace …”,具体如下所示:
1 2 3 4 5 |
SQL> create bigfile tablespace irons datafile size 200m; Tablespace created. SQL> |
查看诸表空间的类型;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
SQL> select tablespace_name,bigfile from dba_tablespaces; TABLESPACE_NAME BIG ------------------------------ --- SYSTEM NO SYSAUX NO UNDOTBS1 NO TEMP NO USERS NO ALLAH NO ADAMHUAN NO IRONS YES 8 rows selected. SQL> |
对于大文件表空间“resize”就没有问题了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
SQL> select a.tablespace_name,sum(b.bytes)/1024/1024 "MB" from dba_tablespaces a,dba_data_files b where a.tablespace_name=b.tablespace_name group by a.tablespace_name order by a.tablespace_name; TABLESPACE_NAME MB ------------------------------ ---------- ADAMHUAN 100 ALLAH 100 IRONS 200 SYSAUX 720 SYSTEM 800 UNDOTBS1 135 USERS 200 7 rows selected. SQL> alter tablespace irons resize 400m; Tablespace altered. SQL> SQL> select a.tablespace_name,sum(b.bytes)/1024/1024 "MB" from dba_tablespaces a,dba_data_files b where a.tablespace_name=b.tablespace_name group by a.tablespace_name order by a.tablespace_name; TABLESPACE_NAME MB ------------------------------ ---------- ADAMHUAN 100 ALLAH 100 IRONS 400 SYSAUX 720 SYSTEM 800 UNDOTBS1 135 USERS 200 7 rows selected. SQL> |
————————————————————————————————————————————————————————————————
Ending。