SELECT a.file_id "FileNo",
a.tablespace_name "Tablespace_name",
a.bytes "Total_Bytes",
a.bytes - SUM(NVL(b.bytes,0)) "Used_Bytes",
SUM(NVL(b.bytes,0)) "Free_Bytes",
ROUND(SUM(NVL(b.bytes,0))/a.bytes*100,2) "%Free"
FROM dba_data_files a, dba_free_space b
WHERE a.file_id = b.file_id(+)
GROUP BY a.tablespace_name, a.file_id, a.bytes
ORDER BY a.tablespace_name;
| FileNo | Tablespace | %Free | 狀態判斷 |
|---|---|---|---|
| 12 | RBS | 0.19% | 嚴重不足,需立即擴容 |
| 9 | JFSJTS | 16.02% | 接近 15% 警戒線,規劃擴容 |
| 1 | SYSTEM | 88.55% | 過度分配,但難以縮減(需重建庫) |
| 3 | TEMP | 99.94% | 極度浪費,可考慮縮減 |
EXP/IMP 匯出匯入釋放碎片空間,延緩新增資料檔經驗值:Extents > 5 視為過度擴展,易導致效能下降與管理困難。
SELECT SUBSTR(segment_name,1,15) Segment_name,
segment_type,
SUBSTR(tablespace_name,1,10) Tablespace_name,
extents,
max_extents
FROM dba_segments
WHERE extents > 5 AND owner = 'JFCL'
ORDER BY segment_name;
| Segment | Type | Tablespace | Extents | Max_Extents |
|---|---|---|---|---|
| CHHDFYB | TABLE | JFSJTS | 11 | 121 |
| DJHZFYB_BF | TABLE | JFSJTS | 17 | 500 |
| JFDH_DHHM | INDEX | IDX_JF | 6 | 1500 |
發現問題立即處理:EXP 匯出 → DROP → IMP 匯入,將離散 Extents 合併為單一連續區段。
imp userid=scott/tiger file=emp.dmp indexfile=emp.sql
emp.sql 修改 STORAGE 子句:
CREATE TABLE "SCOTT"."EMP" (...)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 10240 NEXT 10240 MINEXTENTS 1
MAXEXTENTS 121 PCTINCREASE 50 FREELISTS 1)
TABLESPACE "USER_DATA";
PCTINCREASE = 0 固定擴展大小,避免幾何級數增長INITIAL/NEXT 設為相同值,配合 LOCALLY MANAGED TABLESPACE 效果最佳INITIAL 減少擴展次數DROP → 執行修改後的 emp.sql → IMP 匯入資料CREATE TABLESPACE users_data DATAFILE '/u01/oradata/users_data01.dbf' SIZE 10G EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
PCTFREE/PCTUSED/FREELISTS 參數空間管理的核心是「監控→預警→優化→自動化」。從手工監控 DBA_FREE_SPACE 到 LMT+ASSM 全自動管理,DBA 角色從「空間會計」轉型為「架構師」。