程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle數據庫中的存儲層次體系-----數據文件--文件

Oracle數據庫中的存儲層次體系-----數據文件--文件

編輯:Oracle數據庫基礎
數據庫由一個或多個表空間構成。表空間(tablespace)是Oracle 中的一個邏輯存儲容器,位於存儲層次體系的頂層,包括一個或多個數據文件。這些文件可能是文件系統中的cooked文件、原始分區、ASM管理的數據庫文件,或者是集群文件系統上的文件。表空間包含段,請看下面的介紹。
1. 段
現在開始分析存儲層次體系,首先討論段,這是表空間中主要的組織結構。段(segment就是占用存儲空間的數據庫對象,如表、索引、回滾段等。創建表時,會創建一個表段。創建分區表時,則每個分區會創建一個段。創建索引時,就會創建一個索引段,依此類推。占用存儲空間的每一個對象最後都會存儲在一個段中,此外還有回滾段(rollback segment)、臨時段(temporary segment)、聚簇段(cluster segment)、索引段(index segment)等。

注意    上面有這樣一句話:“占用存儲空間的每一個對象最後都會存儲在一個段中”,這可能會把你搞糊塗。你會發現許多CREATE語句能創建多段的對象。之所以會產生困惑,原因是一條CREATE語句最後創建的對象可能包含0個、1個或多個段!例如,CREATE TABLE T ( x int primary key, y clob)就會創建4個段:一個是TABLE T的段,還有一個段對應索引(這個索引是為支持主鍵而創建的),另外還有兩個CLOB段(一個CLOB段是LOB索引,另一個段是LOB數據本身)。與之不同,CREATE TABLE T ( x int, y date ) cluster MY_CLUSTER則不會創建任何段。第10章還會更深入地討論這個概念。
2. 區段
段本身又由一個或多個區段組成。區段(extent)是文件中一個邏輯上連續分配的空間(一般來講,文件本身在磁盤上並不是連續的;否則,根本就不需要消除磁盤碎片的工具了!)。另外,利用諸如獨立磁盤冗余陣列(Redundant Array of Independent Disks,RAID)之類的磁盤技術,你可能會發現,一個文件不僅在一個磁盤上不連續,還有可能跨多個物理磁盤。每個段都至少有一個區段,有些對象可能還需要至少兩個區段(回滾段就至少需要兩個區段)。如果一個對象超出了其初始區段,就會請求再為它分配另一個區段。第二個區段不一定就在磁盤上第一個區段旁邊,甚至有可能不在第一個區段所在的文件中分配。第二個區段可能與第一個區段相距甚遠,但是區段內的空間總是文件中的一個邏輯連續空間。區段的大小可能不同,可以是一個Oracle數據塊,也可以大到2 GB。
3. 塊
區段又進一步由塊組成。塊(block是Oracle中最小的空間分配單位。數據行、索引條目或臨時排序結果就存儲在塊中。通常Oracle從磁盤讀寫的就是塊。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved