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

Oracle 存儲結構深度解析:從表空間到數據塊

     編輯:Oracle 教學

Oracle 存儲結構深度解析:從表空間到數據塊

存儲結構總覽 表空間與數據文件關系

一、邏輯存儲層次

Oracle 採用多層次邏輯存儲架構,自大到小依次為:

  • Tablespace (表空間):邏輯存儲單元,由一個或多個數據文件組成,容量等於文件大小總和。表、索引等段對象建立在表空間中。
  • Segment (段):同一類型對象(如表段、索引段、Undo 段)在表空間中分配的空間集合。
  • Extent (擴展):連續的數據塊組,段增長的基本單位。
  • Block (塊/數據塊):Oracle 管理 I/O 的最小單位,默認 8KB。

二、核心系統表空間

三、數據塊物理結構

數據塊結構 行目錄與行數據 PCTFREE 示意 行鏈接/遷移

  • Block Header:塊地址、段類型、SCN、ITC (Interested Transaction List) 等。
  • Row Directory:行偏移量數組,指向行數據實際位置。
  • Row Data:真實行數據,含列長度、列值、Null 標誌等。
  • PCTFREE:預留空間百分比,默認 10%。防止 UPDATE 導致行長度增長無空間可用,從而觸發行遷移。

四、行遷移 vs 行鏈接

表空間用途備註
SYSTEM數據字典、系統元數據必須聯機,不可離線
SYSAUX輔助系統信息(AWR、EM、統計信息等)10g+ 引入,減輕 SYSTEM 壓力
UNDOTBS1存儲事務修改前的舊映像(Undo)支援閃回、讀一致性、回滾
TEMP排序、哈希連接、全局臨時表等臨時操作非持久化,實例重啟自動清理
現象成因影響解決
行遷移PCTFREE 過小,UPDATE 導致行不再適配原塊,整行移至新塊,原塊留指針邏輯讀翻倍(需讀兩塊)調大 PCTFREE、重建表 (ALTER TABLE MOVE / CTAS)
行鏈接單行數據大於塊大小(如 LONG/LOB),或插入時單塊無法容納跨塊讀取,性能損耗更大增大 DB_BLOCK_SIZE、將大字段移至 LOB 段、調整存儲屬性

五、操作系統層面對應關系

  • Oracle Block (8KB) → 多個 File System Block (通常 4KB) → 多個 Sector (512B)
  • Linux 下可用 dumpe2fs /dev/sda1 查看文件系統塊大小

六、常用查詢腳本

-- 查看所有表空間
SELECT * FROM DBA_TABLESPACES;

-- 查看數據文件與表空間映射
SELECT file_name, tablespace_name, bytes/1024/1024 MB FROM DBA_DATA_FILES;

-- 查看段空間使用
SELECT segment_name, segment_type, bytes/1024/1024 MB FROM DBA_SEGMENTS WHERE tablespace_name = 'USERS';

總結

理解 Oracle 存儲結構是容量規劃、性能調優、故障排查的基石。關鍵點在於:合理規劃表空間與數據文件分佈、正確設置 PCTFREE/PCTUSED 防止行遷移、監控段擴展頻率避免碎片化、善用本地管理表空間 (LMT) 簡化空間管理。

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