一,创建表空间语法:
CREATE [TEMPORARY | UNDO] TABLESPACE tablespace_name
[DATAFILE | TEMPFILE file_name SIZE K | M [REUSE] [AUTOEXTENT OFF|ON [NEXT number K | M MAXSIZE UNLIMITED | number K | M ] ] ]
[BLOCKSIZE number K]
[ONLINE | OFFLINE]
[LOGGING | NOLOGGING]
[FORCE LOGGING]
[DEFAULT STORAGE storage]
[COMPRESS | NOCOMPRESS]
[PERMANENT | TEMPORARY]
[EXTENT MANAGEMENT DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM SIZE number K | M ] ]
[SEGMENT SPACE MANAGEMENT AUTO | MANUAL]
1. TEMPORARY | UNDO 表明表空间用途,临时表空间/撤销表空间,不指定则标识基本表空间。
2. REUSE 文件存在则清除该文件,并重新创建,如果未使用,则当文件存在时将报错
3. BLOCKSIZE 创建非标准数据块表空间
4. DEFAULT STORAGE 只适用于数据字典管理的表空间,一般不用
5. EXTENT MANAGEMENT 盘区管理方式,一般选用LOCAL,字典管理方式存储效率不高,难以管理以及易造成磁盘碎片
6. AUTOALLOCATE,UNIFORM SIZE,盘区管理方式为LOCAL时适用, AUTOALLOCATE表示盘区大小由系统自动分配, UNIFORM设置盘区大小,所有盘区大小相同
7. SEGMENT SPACE MANAGEMENT 段管理方式,一般选用AUTO,这时Oracle采用位图来管理段中已用块和空闲块,如果选用MANUAL,Oracle使用可用列表来管理段中已用块和空闲块
示例:
SQL> create tablespace tls01
2 datafile 'f:\tls01.dbf' size 20m autoextend on next 10m maxsize unlimited;通过dba_tablespaces查询表空间属性:
SQL> desc dba_tablespaces;
名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------TABLESPACE_NAME NOT NULL VARCHAR2(30)
BLOCK_SIZE NOT NULL NUMBER INITIAL_EXTENT NUMBER NEXT_EXTENT NUMBER MIN_EXTENTS NOT NULL NUMBER MAX_EXTENTS NUMBER PCT_INCREASE NUMBER MIN_EXTLEN NUMBER STATUS VARCHAR2(9) CONTENTS VARCHAR2(9) LOGGING VARCHAR2(9) FORCE_LOGGING VARCHAR2(3) EXTENT_MANAGEMENT VARCHAR2(10) ALLOCATION_TYPE VARCHAR2(9) PLUGGED_IN VARCHAR2(3) SEGMENT_SPACE_MANAGEMENT VARCHAR2(6) DEF_TAB_COMPRESSION VARCHAR2(8) RETENTION VARCHAR2(11) BIGFILE VARCHAR2(3)示例:
SQL> select tablespace_name, extent_management, segment_space_management
2 from dba_tablespaces;TABLESPACE_NAME EXTENT_MAN SEGMEN
------------------------------ ---------- ------SYSTEM LOCAL MANUALUNDOTBS1 LOCAL MANUALSYSAUX LOCAL AUTOTEMP LOCAL MANUALUSERS LOCAL AUTOTLS01 LOCAL AUTO已选择6行。
二,修改表空间
1. 添加数据文件
ALTER TABLESPACE tablespace_name
ADD DATAFILE datafile_specification
示例:
SQL> alter tablespace tls01
2 add datafile 'f:\tls02.dbf' size 20m;
2. 修改数据文件大小
首先查询dba_data_files了解数据文件的位置,大小等信息
SQL> desc dba_data_files;
名称 是否为空? 类型 ----------------------------------------- -------- -----------------------FILE_NAME VARCHAR2(513)
FILE_ID NUMBER TABLESPACE_NAME VARCHAR2(30) BYTES NUMBER BLOCKS NUMBER STATUS VARCHAR2(9) RELATIVE_FNO NUMBER AUTOEXTENSIBLE VARCHAR2(3) MAXBYTES NUMBER MAXBLOCKS NUMBER INCREMENT_BY NUMBER USER_BYTES NUMBER USER_BLOCKS NUMBER ONLINE_STATUS VARCHAR2(7)SQL> select file_name, file_id, bytes from dba_data_files
2 where tablespace_name='TLS01';FILE_NAME FILE_ID BYTES
---------- ---------------------------------F:\TLS01.DBF 5 20971520F:\TLS02.DBF 6 20971520
注意:数据字典里表空间名是大写
修改数据文件大小:
ALTER DATABASE DATAFILE file_name RESIZE size
示例:
SQL> alter database datafile 'f:\tls01.dbf' resize 50m;
3. 修改数据文件自动扩展
SQL> alter database datafile 'f:\tls01.dbf' autoextend on;
同样适用于ALTER TABLESPACE ADD DATAFILE
4. 修改表空间状态
表空间状态:OFFLINE, ONLINE, READ ONLY, READ WRITE
SQL> alter tablespace tls01 offline;
5. 移动数据文件
如果数据文件所在磁盘空间不足,则需要将数据文件移到另一个磁盘,方法是:
1. 修改表空间状态offline
2. 复制数据文件到另一个磁盘
3. 使用ALTER TABLESPACE RENAME语句
4. 恢复表空间状态online
示例:
1) SQL> alter tablespace tls01 offline;
2) 通过操作系统命令复制或剪贴数据文件f:\tls01.dbf到e:\tls01.dbf
3) SQL> alter tablespace tls01
2 rename datafile 'f:\tls01.dbf' to 'e:\tls01.dbf';4) SQL> alter tablespace tls01 online;
重新查询dba_data_files,数据文件路径发生了变化
SQL> column file_name format a50
SQL> select file_id, file_name from dba_data_files
2 where tablespace_name='TLS01';FILE_ID FILE_NAME
---------- -------------------------------------------------- 5 E:\TLS01.DBF 6 F:\TLS02.DBF
三、删除表空间
DROP TABLESPACE tablespace_name
| [INCLUDING CONTENTS]
| [INCLUDING CONTENTS AND DATAFILES]
示例:
SQL> drop tablespace tls01
2 including contents and datafiles;表空间已删除。