掌握 Oracle 對象空間佔用情況是容量規劃、性能調優、存儲成本控制的基礎。本文提供從基礎查詢到生產可用腳本的完整方案,解決引號轉義、空行干擾、分區表識別等實戰痛點。
| 視圖 | 範圍 | 適用場景 |
|---|---|---|
| USER_SEGMENTS | 當前用戶 | 開發/測試環境快速查詢 |
| DBA_SEGMENTS | 全庫(需 DBA 權限) | 生產環境全域統計 |
| USER_EXTENTS | 當前用戶區塊詳情 | 碎片分析、區塊分佈 |
SELECT segment_name,
segment_type,
ROUND(SUM(bytes)/1024/1024, 2) AS size_mb
FROM user_segments
GROUP BY segment_name, segment_type
ORDER BY size_mb DESC;
SELECT segment_name,
ROUND(SUM(bytes)/1024/1024, 2) AS size_mb
FROM user_segments
WHERE segment_type = 'TABLE'
GROUP BY segment_name
ORDER BY size_mb DESC;
SELECT segment_name,
ROUND(SUM(bytes)/1024/1024, 2) AS size_mb
FROM user_segments
WHERE segment_type = 'INDEX'
GROUP BY segment_name
ORDER BY size_mb DESC;
SELECT segment_name,
ROUND(SUM(bytes)/1024/1024, 2) AS size_mb
FROM user_segments
WHERE segment_type = 'TABLE PARTITION'
GROUP BY segment_name
ORDER BY size_mb DESC;
Oracle 中單引號轉義有兩種方式:
SET LINESIZE 300
SET HEAD OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SPOOL gen_table_size.sql
SELECT 'SELECT ''' || segment_name || ''' AS table_name, ' ||
'ROUND(SUM(bytes)/1024/1024, 2) AS size_mb ' ||
'FROM user_segments ' ||
'WHERE segment_type = ' || CHR(39) || 'TABLE' || CHR(39) ||
' AND segment_name = ' || CHR(39) || segment_name || CHR(39) ||
' GROUP BY segment_name;'
FROM user_segments
WHERE segment_type = 'TABLE';
SPOOL OFF
-- 執行生成的腳本
@gen_table_size.sql
SELECT owner,
tablespace_name,
segment_type,
segment_name,
ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb
FROM dba_segments
WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'INDEX', 'INDEX PARTITION', 'LOB', 'LOB PARTITION')
GROUP BY owner, tablespace_name, segment_type, segment_name
ORDER BY size_gb DESC;
| 需求 | 解決方案 |
|---|---|
| 快速查看前 20 大表 | 基礎查詢 + `WHERE ROWNUM <= 20` |
| 定位某 Schema 大表 | `DBA_SEGMENTS` + `OWNER = 'SCOTT'` |
| 分區表單分區大小 | `SEGMENT_TYPE = 'TABLE PARTITION'` |
| LOB 段空間佔用 | `SEGMENT_TYPE IN ('LOB','LOB PARTITION')` |
| 動態生成腳本避免引號錯誤 | 使用 `CHR(39)` 或雙單引號 |
| 結果去空行統計總和 | 導出文本 → Excel 自動篩選 → 求和 |
空間統計看似簡單,但引號轉義、分區識別、結果清洗等細節決定了腳本在生產環境的可用性。建議將上述查詢封裝為標準化監控腳本,納入日常巡檢體系,做到「心中有數,規劃有據」。