表空間分類:SYSTEM (核心字典) + 非 SYSTEM (用戶資料、索引、Undo、Temp)。最佳實踐:資料/索引/Undo/Temp 分離獨立表空間。
CREATE TABLESPACE userdat
DATAFILE '/home/oracle/oradata/userdat01.dbf'
SIZE 10M AUTOEXTEND ON NEXT 1M MAXSIZE 20M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
| 類型 | 用途 | 管理方式 |
|---|---|---|
| UNDO | 僅存儲 Undo 段 | 強制 LOCAL |
| TEMP | 僅供排序/雜湊/臨時段 | 建議 LOCAL |
-- 指定預設暫存表空間
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
-- 離線 (維護/備份/損壞隔離)
ALTER TABLESPACE users OFFLINE [NORMAL | TEMPORARY | IMMEDIATE];
ALTER TABLESPACE users ONLINE;
-- 唯讀 (歷史歸檔/唯讀報表/跨平台遷移)
ALTER TABLESPACE users READ ONLY;
ALTER TABLESPACE users READ WRITE;
限制:SYSTEM、含作用中 Undo 段、預設 Temp 表空間不可離線。
-- 含內容與資料檔一併刪除
DROP TABLESPACE userdat INCLUDING CONTENTS AND DATAFILES;
-- 手動調整大小
ALTER DATABASE DATAFILE '/home/oracle/oradata/users01.dbf' RESIZE 20M;
-- 新增資料檔至表空間
ALTER TABLESPACE users ADD DATAFILE '/home/oracle/oradata/users02.dbf' SIZE 100M;
-- 設定 OMF (Oracle Managed Files) 預設路徑
ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/home/oracle/oradata';
CREATE TABLESPACE userdat2 DATAFILE SIZE 2M; -- 自動生成 OMF 檔名
-- 表空間總覽
SELECT * FROM V$TABLESPACE;
-- 資料檔詳情
SELECT * FROM V$DATAFILE;
-- 表空間使用率與最大連續自由空間 (關鍵指標)
SELECT tablespace_name,
ROUND(100 * SUM(fs.bytes) / df.total_bytes, 2) AS pct_free,
MAX(fs.bytes)/1024/1024 AS max_free_mb
FROM dba_free_space fs,
(SELECT tablespace_name, SUM(bytes) total_bytes FROM dba_data_files GROUP BY tablespace_name) df
WHERE fs.tablespace_name = df.tablespace_name
GROUP BY tablespace_name, df.total_bytes;
AUTOEXTEND + MAXSIZE 防止空間耗盡宕機。READ ONLY,配合備份策略減少備份窗口。RETENTION GUARANTEE 保護長查詢/閃回需求。