查詢表空間內所有段(表、索引、LOB 等)及其大小:
SELECT tablespace_name AS TABLESPACE_NAME,
segment_name AS SEGMENT_NAME,
SUM(bytes)/1024/1024 AS SEGMENT_SIZE_MB
FROM dba_segments
WHERE tablespace_name = '&TABLESPACE_NAME'
GROUP BY tablespace_name, segment_name
ORDER BY 3;
包含擁有者、段類型(TABLE/INDEX/LOBSEGMENT 等):
SELECT owner AS OWNER,
segment_name AS SEGMENT_NAME,
segment_type AS SEGMENT_TYPE,
SUM(bytes)/1024/1024 AS SEGMENT_SIZE_MB
FROM dba_segments
WHERE tablespace_name = '&TABLESPACE_NAME'
GROUP BY owner, segment_name, segment_type
ORDER BY 4;
針對特定物件類型,結合 DBA_TABLES、DBA_INDEXES、DBA_LOBS:
SELECT owner, 'TABLE' AS SEGMENT_TYPE, table_name AS SEGMENT_NAME
FROM dba_tables
WHERE tablespace_name = '&TABLESPACE_NAME'
UNION ALL
SELECT owner, 'INDEX' AS SEGMENT_TYPE, index_name AS SEGMENT_NAME
FROM dba_indexes
WHERE tablespace_name = '&TABLESPACE_NAME'
UNION ALL
SELECT owner, 'LOBSEGMENT' AS SEGMENT_TYPE, segment_name AS SEGMENT_NAME
FROM dba_lobs
WHERE tablespace_name = '&TABLESPACE_NAME';
| 方法 | 優點 | 適用場景 |
|---|---|---|
| 方法一 | 簡潔、含大小統計、涵蓋所有段類型 | 空間佔用分析、大物件定位 |
| 方法二 | 含擁有者、類型、大小,資訊最全 | 詳細審計、擁有者歸屬確認 |
| 方法三 | 語義清晰,區分邏輯物件與物理段 | 開發人員尋找特定類型物件 |
SELECT * FROM (
SELECT owner, segment_name, segment_type,
ROUND(SUM(bytes)/1024/1024,2) AS SIZE_MB
FROM dba_segments
WHERE tablespace_name = '&TABLESPACE_NAME'
GROUP BY owner, segment_name, segment_type
ORDER BY 4 DESC
) WHERE ROWNUM <= 10;