首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 段深度解析:四大類型、儲存層次與管理要點

     編輯:Oracle 資料庫基礎

段在 Oracle 儲存架構中的定位

段是資料庫物件(表、索引、Undo 等)在儲存層面的具體體現,「一個物件對應一個段」。段隸屬於單一表空間,但可跨越該表空間內的多個資料檔;表空間與段是邏輯儲存上的一對多,段不直接與資料檔對話,而是透過區塊 間接映射。

四大段類型詳解

1. 資料段

  • 用途:儲存堆疊表、分區表、叢集表的實際資料列。
  • 命名:預設與表名相同。
  • 查詢:SELECT segment_name, tablespace_name, bytes, blocks FROM user_segments WHERE segment_type='TABLE';

2. 索引段

  • 用途:儲存 B-tree、Bitmap 等索引結構。
  • 查詢:SELECT * FROM user_indexes; / SELECT * FROM user_segments WHERE segment_type='INDEX';

3. 回滾段 / Undo 段

  • 功能:保存交易修改前的舊映像,支援 ROLLBACK、讀取一致性、閃回查詢。
  • 演進:
    • 8i 及以前:手動管理回滾段,DBA 需依交易量規劃段數與儲存參數,極易成為瓶頸。
    • 9i+:引入 Undo 表空間,由 SMON 自動管理 Undo 段,參數 UNDO_MANAGEMENT=AUTO 啟用。

4. 臨時段

  • 用途:ORDER BY、GROUP BY、HASH JOIN、CREATE INDEX 等操作的中間排序/雜湊空間。
  • 生命週期:會話/交易結束自動釋放,儲存於 TEMP 表空間。

段與區塊、儲存參數的關係

  • 區塊:段成長的最小單位,由 INITIAL、NEXT、PCTINCREASE(舊版)或 AUTOALLOCATE 控制大小。
  • 高水位線 (HWM):標記段內已格式化區塊的邊界,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,將段管理交給資料庫核心。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved