Oracle中有一个表空间的概念,一个数据库可以有好几个表空间,表放在表空间下。
1. 创建表空间
创建表空间使用create tablespace命令:
CREATE TABLESPACE foo_tablespace DATAFILE 'E:/oracle/data/foo_tablespace.dbf' SIZE 20M AUTOEXTEND ON NEXT 5M MAXSIZE 500M;
DATAFILE 'E:/oracle/data/foo_tablespace.dbf' 指定逻辑上的表空间在磁盘上的物理存储文件。
SIZE 20M 指定表空间的初始大小,创建完成后到磁盘上查看:
不管里面有多少数据,初始化的时候会先分配20M。
AUTOEXTEND ON NEXT 5M 当之前分配的那20M空间用完了之后怎么办,这个时候就需要能够动态扩展,这里指定每次扩展的时候扩展5M的空间。
MAXSIZE 500M 动态扩展也总会有有一个上限的吧,这里指定动态扩展最大扩展到多少就不再继续扩展了。
创建完成后查看其相关信息:
SQL> SELECT * FROM dba_data_files; FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS -------------------------------------------------------------------------------- ---------- ------------------------------ ---------- ---------- --------- ------------ -------------- ---------- ---------- ------------ ---------- ----------- ------------- C:ORACLEPRODUCT10.2.0ORADATAORCLUSERS01.DBF 4 USERS 5242880 640 AVAILABLE 4 YES 3435972198 4194302 160 5177344 632 ONLINE C:ORACLEPRODUCT10.2.0ORADATAORCLSYSAUX01.DBF 3 SYSAUX 262144000 32000 AVAILABLE 3 YES 3435972198 4194302 1280 262078464 31992 ONLINE C:ORACLEPRODUCT10.2.0ORADATAORCLUNDOTBS01.DBF 2 UNDOTBS1 26214400 3200 AVAILABLE 2 YES 3435972198 4194302 640 26148864 3192 ONLINE C:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF 1 SYSTEM 503316480 61440 AVAILABLE 1 YES 3435972198 4194302 1280 503250944 61432 SYSTEM E:ORACLEDATAFOO_TABLESPACE.DBF 5 FOO_TABLESPACE 20971520 2560 AVAILABLE 5 YES 524288000 64000 640 20905984 2552 ONLINE
2. 使用表空间
查看用户的默认表空间:
SQL> SELECT username, default_tablespace FROM dba_users; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ MGMT_VIEW SYSTEM SYS SYSTEM SYSTEM SYSTEM DBSNMP SYSAUX SYSMAN SYSAUX FOO USERS SCOTT USERS SAM USERS TOM USERS OUTLN SYSTEM MDSYS SYSAUX ORDSYS SYSAUX CTXSYS SYSAUX ANONYMOUS SYSAUX EXFSYS SYSAUX DMSYS SYSAUX WMSYS SYSAUX XDB SYSAUX ORDPLUGINS SYSAUX SI_INFORMTN_SCHEMA SYSAUX USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ OLAPSYS SYSAUX MDDATA USERS DIP USERS TSMSYS USERS 24 rows selected
一些特殊用户的默认表空间是SYSTEM,普通用户的默认表空间是USERS。
修改用户的默认表空间(只对一个用户生效):
ALTER USER SCOTT DEFAULT TABLESPACE foo_tablespace;
修改数据库级别的默认表空间(对整个数据库都生效):
ALTER DATABASE DEFAULT TABLESPACE foo_tablespace;
关于表空间:
在Oracle9i中,如果没有用DEFAULT TABLESPACE子句指定用户默认表空间的话其默认表空间就是SYSTEM,而且也不能为数据库指定默认表空间。
在Oracle10g中定义数据库级别的默认表空间是USERS,在创建用户时如果没有指定默认表空间就会使用数据库级别默认表空间。
在创建表的时候指定使用哪一个表空间:
CREATE TABLE t_user( id INT NOT NULL , username VARCHAR2(20) NOT NULL , passwd CHAR(32) NOT NULL , CONSTRAINT PK_T_USER PRIMARY KEY (id) ) TABLESPACE foo_tablespace;
查看t_user表所属的表空间:
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM user_tables WHERE table_name='T_USER'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ T_USER FOO_TABLESPACE
对于已经创建了的表可以将其从一个表空间下移动到另一个表空间下:
ALTER TABLE t_user MOVE TABLESPACE users;
再查看,会发现之前的t_user已经到了默认的users表空间下:
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM user_tables WHERE table_name='T_USER'; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ T_USER USERS
3. 重命名表空间
重命名表空间,修改表名类似:
ALTER TABLESPACE foo_tablespace RENAME TO foobar_tablespace;
4. 删除表空间
删掉表空间,连同其内已有的数据对象和磁盘上之前指定的数据文件都一并删掉:
DROP TABLESPACE foo_tablespace INCLUDING CONTENTS AND DATAFILES;
需要注意删除表空间的时候表空间必须不在使用状态。即没有哪个数据库用其作为默认表空间。
.