oracle 數據庫 表空間 段 範圍 關係彙總

數據庫結構和空間管理 
一個ORACLE數據庫是數據的集合,被處理成一個單位。一個ORACLE數據庫有一個物理結構和一個邏輯結構。 
物理數據庫結構(physical database structure)是由構成數據庫的操作系統文件所決定。每一個ORACLE數據庫是由三種類型的文件組成:數據文件、日誌文件和控制文件。數據庫的文件爲數據庫信息提供真正的物理存儲。 
邏輯數據庫結構是用戶所涉及的數據庫結構。一個ORACLE數據庫的邏輯結構由下列因素決定: 
l 一個或多個表空間 
l 數據庫模式對象(即表、視圖、索引、聚集、序列、存儲過程) 
邏輯存儲結構如表空間(dataspace)、段(segment)和範圍將支配一個數據庫的物理空間如何使用。模式對象(schema object)用它們之間的聯繫組成了一個數據庫的關係設計。 

1) 物理結構 

(1) 數據文件 
每一個ORACLE數據庫有一個或多個物理的數據文件(data file)。一個數據庫的數據文件包含全部數據庫數據。邏輯數據庫結構(如表、索引)的數據物理地存儲在數據庫的數據文件中。數據文件有下列特徵: 
l 一個數據文件僅與一個數據庫聯繫。 
l 一旦建立,數據文件不能改變大小 
l 一個表空間(數據庫存儲的邏輯單位)由一個或多個數據文件組成。 
數據文件中的數據在需要時可以讀取並存儲在ORACLE內存儲區中。例如:用戶要存取數據庫一表的某些數據,如果請求信息不在數據庫的內存存儲區內,則從相應的數據文件中讀取並存儲在內存。當修改和插入新數據時,不必立刻寫入數據文件。爲了減少磁盤輸出的總數,提高性能,數據存儲在內存,然後由 ORACLE後臺進程DBWR決定如何將其寫入到相應的數據文件。 

(2) 日誌文件 
每一個數據庫有兩個或多個日誌文件(redo log file)的組,每一個日誌文件組用於收集數據庫日誌。日誌的主要功能是記錄對數據所作的修改,所以對數據庫作的全部修改是記錄在日誌中。在出現故障時,如果不能將修改數據永久地寫入數據文件,則可利用日誌得到該修改,所以從不會丟失已有操作成果。 
日誌文件主要是保護數據庫以防止故障。爲了防止日誌文件本身的故障,ORACLE允許鏡象日誌(mirrored redo log),以致可在不同磁盤上維護兩個或多個日誌副本。 
日誌文件中的信息僅在系統故障或介質故障恢復數據庫時使用,這些故障阻止將數據庫數據寫入到數據庫的數據文件。然而任何丟失的數據在下一次數據庫打開時,ORACLE自動地應用日誌文件中的信息來恢復數據庫數據文件。 

(3) 控制文件 
每一ORACLE數據庫有一個控制文件(control file),它記錄數據庫的物理結構,包含下列信息類型: 
l 數據庫名; 
l 數據庫數據文件和日誌文件的名字和位置; 
l 數據庫建立日期。 
爲了安全起見,允許控制文件被鏡象。 
每一次ORACLE數據庫的實例啓動時,它的控制文件用於標識數據庫和日誌文件,當着手數據庫操作時它們必須被打開。當數據庫的物理組成更改時,ORACLE自動更改該數據庫的控制文件。數據恢復時,也要使用控制文件。 

2) 邏輯結構 
數據庫邏輯結構包含表空間、段、範圍(extent)、數據塊和模式對象。 
(1) 表空間 
一個數據庫劃分爲一個或多個邏輯單位,該邏輯單位稱爲表空間(TABLESPACE)。一個表空間可將相關的邏輯結構組合在一起。DBA可利用表空間作下列工作: 
l 控制數據庫數據的磁盤分配。 
l 將確定的空間份額分配給數據庫用戶。 
l 通過使單個表空間在線或離線,控制數據的可用性。 
l 執行部分數據庫後備或恢復操作。 
l 爲提高性能,跨越設備分配數據存儲。 
數據庫、表空間和數據文件之間的關係如下圖所示: 
Database 

SYSTEM DATA 

Tablespace Tablespace 





DTATAFILE1 
(2MB) DATAFILE2 
(2MB) DATAFILE3 
(2MB) 

Driver1 Driver2 

。每個數據庫可邏輯劃分爲一個或多個表空間 
。每一個表空間是由一個或多個數據文件組成,該表空間物理地存儲表空間中全部邏輯結構的數據。DBA可以建立新的表空間,可爲表空間增加數據文件或可刪除數據文件,設置或更改缺省的段存儲位置。 

每一個ORACLE數據庫包含有一個名爲SYSTEM的表空間,在數據庫建立是自動建立。在該表空間中總包含有整個數據庫的數據字典表。最小的數據庫可只需要SYSTEM表空間。該表空間必須總是在線。表和存儲的PL/SQL程序單元(過程、函數、包和觸發器)的全部存儲數據是存儲在SYSTEM表空間中。如果這些PL/SQL對象是爲數據庫建的,DBA在SYSTEM表空間中需要規劃這些對象所需要的空間。 
表空間利用增加數據文件擴大表空間,表空間的大小爲組成該表空間的數據文件大小的和。 
DBA可以使ORACLE數據庫中任何表空間(除SYSTEM表空間外)在線(ONLINE)或離線(OFFLINE)。表空間通常是在線,以致它所包含的數據對數據庫用戶是可用的。當表空間爲離線時,其數據不可使用。在下列情況下,DBA可以使其離線。 
。使部分數據不可用,而剩餘的部分允許正常存取 
。執行離線的表空間後備 
。爲了修改或維護一應用,使它和它的一組表臨時不可用。 
包含有正在活動的回滾段的表空間不能被離線,僅當回滾段不正在使用時,該表空間纔可離線。 
在數據字典中記錄表空間的狀態,在線還是離線。如果在數據庫關閉時一表空間爲離線,那麼在下次數據庫裝配和重新打開後,它仍然保持離線。 
當出現某些錯誤時,一個表空間可自動地由在線改變爲離線。通過使用多個表空間,將不同類型的數據分開,更方便DBA來管理數據庫。 
ORACLE 數據庫中一表空間是由一個或多個物理數據文件組成,一個數據文件只可與一個表空間想聯繫。當爲一表空間建立一數據文件時,ORACLE建立該文件,分配指定的磁盤空間容量。在數據文件初時建立後,所分配的磁盤不包含任何數據。表空間可以在線或離線。在ORACLE中還允許單獨數據文件在線或離線。 

(2) 段、範圍和數據塊 
ORACLE通過段、範圍和數據塊邏輯數據結構可更細地控制磁盤空間的使用。 

段 
段(SEGMENT)包含表空間中一種指定類型的邏輯存儲結構,是由一組範圍組成。在ORACLE數據庫中有幾種類型的段:數據段、牽引段、回滾段和臨時段。 
數據段:對於每一個非聚集的表有一數據段,表的所有數據存放在該段。每一聚集有一個數據段,聚集中每一個表的數據存儲在該段中。 
索引段:每一個索引有一索引段,存儲索引數據。 
回滾段:是由DBA建立,用於臨時存儲要撤消的信息,這些信息用於生成讀一致性數據庫信息、在數據庫恢復時使用、回滾未提交的事務。 
臨時段:當一個SQL語句需要臨時工作區時,由ORACLE建立。當語句執行完畢,臨時段的範圍退回給系統。 
ORACLE對所有段的空間分配,以範圍爲單位。 

範圍 
一個範圍(EXTENT)是數據庫存儲空間分配的一個邏輯單位,它由連續數據塊所組成。每一個段是由一個或多個範圍組成。當一段中間所有空間已完全使用時,ORACLE爲該段分配一個新的範圍。 
爲了維護的目的,在數據庫的每一段含有段標題塊(segment header block)說明段的特徵以及該段中的範圍目錄。 

數據塊 
數據塊(data block)是ORACLE管理數據文件中存儲空間的單位,爲數據庫使用的I/O的最小單位,其大小可不同於操作系統的標準I/O塊大小。 


數據塊的格式: 
公用的變長標題 
表目錄 
行目錄 
未用空間 
行數據 

(3) 模式和模式對象 
一個模式(schema)爲模式對象(scehma object)的一個集合,每一個數據庫用戶對應一個模式。模式對象爲直接引用數據庫數據的邏輯結構,模式對象包含如表、視圖、索引、聚集、序列、同義詞、數據庫鏈、過程和包等結構。模式對象是邏輯數據存儲結構,每一種模式對象在磁盤上沒有一個相應文件存儲其信息。一個模式對象邏輯地存儲在數據庫的一個表空間中,每一個對象的數據物理地包含在表空間的一個或多個數據文件中。 

表 
表(table)爲數據庫中數據存儲的基本單位,其數據按行、列存儲。每個表具有一表名和列的集合。每一列有一個列名、數據類型、寬度或精度、比例。一行是對應單個記錄的列信息的集合。 

視圖 
一個視圖(view)是由一個或多個表(或其他視圖)中的數據的一種定製的表示,是用一個查詢定義,所以可認爲是一個存儲的查詢(stored query)或是一個虛表(virtual table)。視圖可在使用表的許多地方使用。 
由於視圖是由表導出的,視圖和表存在許多類似,視圖象表最多可定義254列。視圖可以被查詢,而在修改、插入或刪除時具有一定的限制,在視圖上執行的全部操作真正地影響視圖的基本表中的數據,受到基本表的完整性約束和觸發器的限制。 
視圖與表不同,一個視圖不分配任何存儲空間,視圖不真正地包含數據。由查詢定義的視圖相應於視圖引用表中的數據。視圖只在數據字典中存儲其定義。 
引入視圖有下列好處: 
。通過限制對錶的行預定義集合的存取,爲表提供附加的安全性 
。隱藏數據複雜性。 
。爲用戶簡化命令 
。爲基本表的數據提供另一種觀點。 
。可將應用隔離基本表定義的修改 
。用於不用視圖無法表示的查詢。 
。可用於保存複雜查詢。 

聚集 
聚集(cluster)是存儲表數據的可選擇的方法。一個聚集是一組表,將具有同一公共列值的行存儲在一起,並且它們經常一起使用。這些公共列構成聚集碼。例如:EMP表各DEPT表共享DEPTNO列,所以EMP表和DEPT表可聚集在一起,聚集碼的列爲DEPTNO列,該聚集將每個部門的全部職工行各該部門的行物理地存儲在同一數據塊中。 

索引 
索引(index)是與表和聚集相關的一種選擇結構。索引是爲提高數據檢索的性能而建立,利用它可快速地確定指定的信息。ORACLE索引爲表數據提供快速存取路徑。索引適用於一範圍的行查詢或指定行的查詢。 
索引可建立在一表的一列或多列上,一旦建立,由ORACLE自動維護和使用,對用戶是完全透明的。索引是邏輯地和物理地獨立於數據,它們的建立或刪除對錶沒有影響,應用可繼續處理。索引數據的檢索性能幾乎保持常數,而當一表上存在許多索引時,修改、刪除和插入操作的性能會下降。 
索引有唯一索引各非唯一索引。唯一索引保證表中沒有兩行在定義索引的列上具有重複值。ORACLE在唯一碼上自動地定義唯一索引實施UNIQUE完整性約束。 
組合索引是在表的某個列上所建立的一索引。組全索引可加快SELECT語句的檢索速度,在其WHERE子句中可引用組合索引的全部或主要部分 。所以在定義中給出列的次序,將經常存取的或選擇最多的列放在首位。 
在建立索引時,將在表空間自動地建立一索引段,索引段空間分配和保留空間的使用受下列方式控制: 
索引段範圍的分配常駐該索引段的存儲參數控制。 
其數據塊中未用空間可受該段的PCTFREE參數設置所控制。 

序列生成器 
序列生成器(sequence generator)產生序列號。在多用戶環境下該序列生成器特別有用,可生成各返回序列號而不需要磁盤I/O或事務封鎖。 
序列號爲ORACLE整數,最多可有38個數字。一個序列定義指出一般信息:序列的名字、上升或下降、序列號之間間距和其它信息。對所有序列的確的定義以行存儲在SYSTEM表空間中的數據字典表中,所以所有序列定義總是可用。由引用序列號的SQL語句使用序列號,可生成一個新的序列號或使用當前序列號。一旦在用戶會話中的SQL語句生成一序列號,該序列號僅爲該會話可用。序列號生成是獨立於表,所以同一序列生成器可用於一個和多個表。所生成序列號可用於生成唯一的主碼。 
參考資料: 參考資料:www.mno.cn
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章