導入大量資料時常遇到 ORA-01658: unable to create INITIAL extent,原因是表空間不足。本文提供表空間使用率監控查詢、手動擴容 RESIZE、自動擴展 AUTOEXTEND ON NEXT ... MAXSIZE 完整操作指南。
SELECT tablespace_name, SUM(bytes)/1024/1024 AS size_mb
FROM dba_data_files
GROUP BY tablespace_name
ORDER BY size_mb;
SELECT tablespace_name, SUM(bytes)/1024/1024 AS free_mb
FROM dba_free_space
GROUP BY tablespace_name
ORDER BY free_mb;
SELECT file_name, tablespace_name, autoextensible
FROM dba_data_files;
-- 將資料檔擴展至 2GB
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\XXX.DBF' RESIZE 2048M;
ALTER DATABASE DATAFILE 'XXXXXX.DBF' AUTOEXTEND ON NEXT 200M;
ALTER DATABASE DATAFILE 'XXXXXX.DBF' AUTOEXTEND ON NEXT 200M MAXSIZE 1024M;
ALTER DATABASE DATAFILE 'XXXXXX.DBF' AUTOEXTEND OFF;
| 策略 | 適用場景 | 優點 | 風險 |
|---|---|---|---|
| 手動 RESIZE | 可預測增長、維護窗口固定 | 可控、無意外擴展 | 需人工干預,可能忘記導致業務中斷 |
| AUTOEXTEND 無上限 | 測試環境、臨時表空間 | 零維護 | 可能佔滿磁碟導致整機故障 |
| AUTOEXTEND + MAXSIZE | 生產環境核心表空間 | 自動緩衝 + 硬性上限保護 | 達上限仍會報錯,需監控告警 |
| 大檔案表空間 (BIGFILE) | 超大資料倉庫、單檔案 TB 級 | 管理檔案少、擴展彈性大 | 單點故障風險、備份還原較慢 |
SHRINK SPACE 或移動物件MAXSIZE 是否已達上限建議建立每日巡檢腳本,監控 DBA_FREE_SPACE 與 AUTOEXTENSIBLE 狀態,配合告警機制,將空間管理從被動救火轉為主動管控。