段是資料庫物件(表、索引、Undo 等)在儲存層面的具體體現,「一個物件對應一個段」。段隸屬於單一表空間,但可跨越該表空間內的多個資料檔;表空間與段是邏輯儲存上的一對多,段不直接與資料檔對話,而是透過區塊 間接映射。
SELECT segment_name, tablespace_name, bytes, blocks FROM user_segments WHERE segment_type='TABLE';SELECT * FROM user_indexes; / SELECT * FROM user_segments WHERE segment_type='INDEX';ROLLBACK、讀取一致性、閃回查詢。UNDO_MANAGEMENT=AUTO 啟用。ORDER BY、GROUP BY、HASH JOIN、CREATE INDEX 等操作的中間排序/雜湊空間。TEMP 表空間。INITIAL、NEXT、PCTINCREASE(舊版)或 AUTOALLOCATE 控制大小。TRUNCATE 會重置 HWM,DELETE 不會。-- 查詢段大小與區塊分佈
SELECT segment_name, SUM(bytes)/1024/1024 AS size_mb, COUNT(*) AS extent_cnt
FROM user_segments
GROUP BY segment_name
ORDER BY size_mb DESC;
-- 縮減段空間 (10g+)
ALTER TABLE big_table ENABLE ROW MOVEMENT;
ALTER TABLE big_table SHRINK SPACE COMPACT;
ALTER TABLE big_table SHRINK SPACE;
理解段的四大類型與其在表空間中的儲存行為,是進行空間規劃、效能調校與故障排查的基礎。現代版本強烈建議啟用 AUTO UNDO 與 LOCAL AUTOALLOCATE,將段管理交給資料庫核心。