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

Oracle 9i 段類型全景探秘:從 DBA_SEGMENTS 到 SYS.OBJ$ 核心視圖深度解析 18 種段類型

     編輯:Oracle 資料庫基礎

前言:超越 TABLE/INDEX 的段類型世界

透過 DBA_SEGMENTS、SYS_DBA_SEGS、SYS_OBJECTS 核心視圖定義,系統性梳理 Oracle 9i 所有 18 種段類型,含實際查詢驗證與儲存特徵。

18 種段類型完整清單

段類型來源視圖典型物件
TABLESYS_OBJECTS (TAB$)普通表、巢狀表主表
TABLE PARTITIONSYS_OBJECTS (TABPART$)表分區
TABLE SUBPARTITIONSYS_OBJECTS (TABSUBPART$)表子分區
INDEXSYS_OBJECTS (IND$)一般索引、IOT 主索引、CLUSTER 索引
INDEX PARTITIONSYS_OBJECTS (INDPART$)索引分區
INDEX SUBPARTITIONSYS_OBJECTS (INDSUBPART$)索引子分區
CLUSTERSYS_OBJECTS (CLU$)叢集表
LOBSEGMENTSYS_OBJECTS (LOB$)LOB 資料段
LOB PARTITIONSYS_OBJECTS (LOBFRAG$ fragtype='P')LOB 分區
LOB SUBPARTITIONSYS_OBJECTS (LOBFRAG$ fragtype<>'P')LOB 子分區
LOBINDEXSYS_OBJECTS (IND$ type#=8)LOB 索引
NESTED TABLESYS_OBJECTS (TAB$ property=8192)巢狀表儲存段
ROLLBACKSYS_DBA_SEGS (UNDO$ type#=1)傳統回滾段
TYPE2 UNDOSYS_DBA_SEGS (UNDO$ type#=10)自動撤銷段 (9i+)
DEFERRED ROLLBACKSYS_DBA_SEGS (SEG$ type#=2)表空間離線時的延遲回滾段
TEMPORARYSYS_DBA_SEGS (SEG$ type#=3)磁碟排序、臨時表、CTAS 中間段
CACHESYS_DBA_SEGS (SEG$ type#=4)Bootstrap 核心段 (OBJ$ 等)
SPACE HEADERSYS_DBA_SEGS (SEG$ type#=9)區段管理標頭
UNDEFINEDSYS_DBA_SEGS (其他 type#)未識別類型

關鍵段類型深度解析

IOT (索引組織表) 的特殊段結構

  • 主表段類型為 INDEX(非 TABLE)
  • 溢流段類型為 TABLE (SYS_IOT_OVER_*)
  • 主鍵索引名稱系統生成:SYS_IOT_TOP_*

LOB 物件的雙段架構

  • 每個 LOB 欄位:1 個 LOBSEGMENT (資料) + 1 個 LOBINDEX (索引)
  • 分區表 LOB:每分區各有一組 LOBSEGMENT/LOBINDEX,但段類型顯示為 INDEX PARTITION
  • BFILE 無獨立段(僅存檔案指標)

巢狀表 (NESTED TABLE)

  • 每個巢狂表欄位對應 1 個 NESTED TABLE 段
  • 隱含欄位上自動建立索引

臨時段 (TEMPORARY) 的多重來源

  • 磁碟排序 (ORDER BY/GROUP BY 超出記憶體)
  • 全域臨時表 (GTT) 資料
  • CTAS 執行中間階段(完成前段名為數字如 1.84337,完成後轉為 TABLE)
  • 索引 REBUILD / 表 MOVE 過程中間段
  • 不在 DBA_SEGMENTS 中,查 V$TEMPSEG_USAGE

Bootstrap 段 (CACHE)

  • 唯一段,段頭位於檔案 1 區塊 833 (Root DBA)
  • 儲存 OBJ$、USER$、TS$ 等核心字典表位置
  • 啟動時由檔案頭 Root DBA 定位,極關鍵

實用查詢腳本


-- 查看所有段類型分布
SELECT segment_type, COUNT(*), SUM(bytes)/1024/1024 MB
FROM dba_segments
GROUP BY segment_type
ORDER BY MB DESC;

-- 找出碎片嚴重段 (extents >= 10)
SELECT owner, segment_name, segment_type, extents
FROM dba_segments
WHERE extents >= 10
ORDER BY extents DESC;

-- 查看臨時段使用情況
SELECT * FROM v$tempseg_usage;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved