表空間是 Oracle 資料庫磁碟管理的最高邏輯層。Oracle 11g 預設必須建立四大核心表空間:SYSTEM、SYSAUX、TEMP、UNDOTBS1。本文系統整理表空間架構、查詢語法、建立/刪除指令與實戰案例,助您掌握存儲管理核心技能。
| 表空間 | 主要用途 |
|---|---|
| SYSTEM | 儲存資料字典、PL/SQL 程式碼、SYS 使用者物件等核心中繼資料 |
| SYSAUX | 輔助 SYSTEM,儲存非字典的選項相關資料(如 AWR、統計資訊等) |
| TEMP | 提供大型排序、雜湊聯結、索引建立等操作的暫存空間 |
| UNDOTBS1 | 儲存 Undo 資訊,支援讀一致性、交易回滾與快照隔離 |
表空間 → 區段 → 區塊 → 資料區塊。一個區段只能駐留在單一表空間;一個區塊只能屬於單一資料檔案。查詢表空間與資料檔案對應關係:
COL TABLESPACE_NAME FOR A10
COL FILE_NAME FOR A50
COL BYTES FOR 999,999,999
SELECT TABLESPACE_NAME, FILE_NAME, BYTES
FROM DBA_DATA_FILES
ORDER BY TABLESPACE_NAME;
COL OWNER FOR A10
COL SEGMENT_NAME FOR A30
COL SEGMENT_TYPE FOR A20
SELECT SEGMENT_TYPE, SEGMENT_NAME, OWNER
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME = 'USERS';
SELECT OWNER AS "使用者", COUNT(SEGMENT_NAME) AS "物件數量"
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME = 'SYSAUX'
GROUP BY OWNER;
CREATE [SMALLFILE | BIGFILE] TABLESPACE tablespace_name
DATAFILE '/path/filename' SIZE n[K|M] REUSE
[,'/path/filename' SIZE n[K|M] REUSE] ...
[AUTOEXTEND [ON|OFF] NEXT n[K|M]]
[MAXSIZE [UNLIMITED | n[K|M]]]
[MINIMUM EXTENT n[K|M]]
[DEFAULT STORAGE storage_clause]
[ONLINE | OFFLINE]
[LOGGING | NOLOGGING]
[PERMANENT | TEMPORARY]
[EXTENT MANAGEMENT DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM SIZE n[K|M]]];
| 情境 | 指令 |
|---|---|
| 空表空間,保留資料檔 | DROP TABLESPACE ts_name; |
| 非空表空間,保留資料檔 | DROP TABLESPACE ts_name INCLUDING CONTENTS; |
| 空表空間,含資料檔 | DROP TABLESPACE ts_name INCLUDING DATAFILES; |
| 非空表空間,含資料檔 | DROP TABLESPACE ts_name INCLUDING CONTENTS AND DATAFILES; |
| 存在跨表空間外鍵關聯 | DROP TABLESPACE ts_name INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; |
注意:指定 DATAFILES 時前方必須有 CONTENTS 關鍵字,否則報錯。
CREATE TABLESPACE exampletb
DATAFILE 'E:\examp01.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M,
'E:\examp02.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M;
DROP TABLESPACE exampletb;
CREATE TABLESPACE exampletb
DATAFILE 'E:\examp01.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M REUSE,
'E:\examp02.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M REUSE;
CREATE TABLE scott.student (
ID NUMBER,
NAME VARCHAR2(10)
) TABLESPACE exampletb;
DROP TABLESPACE exampletb INCLUDING CONTENTS;
說明:資料最終寫入 examp01.dbf、examp02.dbf 兩個檔案中。
CREATE TABLESPACE exampletb
DATAFILE 'E:\examp01.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M REUSE,
'E:\examp02.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M REUSE;
DROP TABLESPACE exampletb INCLUDING DATAFILES;
CREATE TABLESPACE exampletb1
DATAFILE 'E:\examp03.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M;
CREATE TABLESPACE exampletb2
DATAFILE 'E:\examp04.dbf' SIZE 5M AUTOEXTEND ON NEXT 128K MAXSIZE 1000M;
CREATE TABLE test1 (MOBILE NUMBER(13) PRIMARY KEY) TABLESPACE exampletb1;
CREATE TABLE test2 (MOBILE NUMBER(13) REFERENCES test1(MOBILE)) TABLESPACE exampletb2;
DROP TABLESPACE exampletb1 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
此指令會同時移除主鍵表空間、資料檔,並級聯刪除外鍵約束。
AUTOEXTEND 並設定合理 MAXSIZE,避免空間耗盡導致業務中斷。LOCAL UNIFORM SIZE 管理區塊,減少碎片並提升分配效能。DBA_FREE_SPACE 與 DBA_DATA_FILES,提前規劃擴容。