Oracle體系結構1

關係模型
關係數據庫是一個符合關係模型理論的數據庫。 關係模型主要有以下三方面特性:
l結構性:定義良好的數據存儲和訪問機制
l易操作性:具有清晰定義的訪問機制,通過應用能操縱數據中的結構和數據
l完整性規則:完整性規則用來管理結構和數據
     關係數據庫適用簡單的關係(二維表)存儲數據,而關係是一個元組、元組中存儲的是無序的屬性值。
表是一個行(元組)和列(屬性)的式關係的兩維表示。 表中的每一行都有相同的列集。 關係數據庫是一個數據庫存儲數據的關係(表)。
RDMBS
關係模型是RDMBS的基本理論依據。從本質上來說,RDMBS提供數據在數據庫內的流轉、存儲和檢索,因此可以使用應用操縱RDBMS。RDMBS區分以下兩種操作:
l邏輯操作:應用指定什麼樣的內容被求情(What操作)。如檢索teachers表中的jsbh、gzje
l物理操作:應用決定要做什麼和怎麼做才能獲得請求的內容(How操作)。如檢索上述請求RDBMS可能需要使用索引去檢索要請求的行,然後從數據文件中將數據讀入到內存,以及可能還有的其他一些列操作(如排序),最後返回給用戶。
Oracle在RDBMS的基礎上,擴展了多態、繼承、用戶自定義類型等面向對象的特性,因此可以說Oracle也是一個ORDBMS。
 
數據訪問
    Oracle支持行業標準,對數據的訪問包括三種方法:
lSQL
如查詢、插入、刪除、更新行;創建、修改、替換、刪除對象;控制訪問數據及其對象(授權);保證數據的一致性和完整性
lPL/SQL
是Oracle對SQL進行的擴展,可以支持流程控制、函數、數據類型、變量、子程序、觸發器等。
lJava
Oracle數據庫也可以存儲Java編寫的程序單元,Java存儲過程是存儲在數據庫中並且發佈到SQL的具有一定作用的Java方法。Java中可以調用PL/SQL程序,PL/SQL中也可以調用Java程序。
總體結構圖
    客戶端發出的SQL命令由服務器端進程響應,在內存區域內進行語法分析、編譯和執行,將修改後的數據寫入數據文件,再將修改信息寫入日誌文件,最後將SQL執行的結果反饋給用戶。
 
Oracle總體體系結構
存儲結構
1.物理存儲結構
   (1).數據文件(一個或多個)
   (2).控制文件(也可以是多個)
(3).聯機重做日誌文件(兩個或多個)
  
 
2.邏輯存儲結構
   (1).塊(Data Block):數據庫數據存放在數據塊中,一個數據塊對應特定磁盤上字節數。塊是數據庫最小的邏輯存儲單元。
   (2).區(Extend):由一系列連續的塊組成的,其分配是單一分配的。區也是系統分配空間和回收空間的基本單位。
(3).段(Segment):表空間中特定類型的邏輯單位,由一個或多個區構成。包括數據段(Data Segment)、回滾段(Rollback Segment)、臨時段(Temporary Segment)和索引段(Index Segment)
   (4).表空間:邏輯磁盤空間,由數據文件組成,是最大的邏輯存儲單元。
 
 
Instance結構
Oracle數據庫的管理和訪問是由內存結構和進程完成的,客戶端程序連接到數據庫時,實際上是連接到實例的,此時Oracle實例服務分配除SGA外的內存給該客戶端程序,並啓動除了後臺進程以外的其它相應進程。
 1.數據庫進程
   (1).客戶端進程(Client Processes):這些進程創建和維護運行的應用程序或Oracle工具軟件代碼。 大多數環境中,有單獨的計算機客戶端進程
   (2).後臺進程(BackgroundProcesses):這些進程隨數據庫而啓動,用於完成各種維護任務,如將塊寫至磁盤、維護聯機重做日誌、清理異常中止的進程等
   (3).服務器進程(Server Processes):與客戶端進程交互,根據客戶的請求來完成任務。
 
 
 
2.內存結構
(1).SGA(System Global Area):一個包含 實例數據和控制信息的共享內存區域
    (2).PGA(Program Global Area):一個包含 服務器進程和後臺進程的數據和控制信息的共享內存區域 
實例與數據庫文件
   RDBMS的一個重要特徵是物理結構和邏輯結構是分開的,對一個方面的修改不會影響到另外一個方面。如存儲在某個數據文件中的表的重命名等。
   Oracle數據庫由三種文件組成,其與實例間的關係如下圖:
 
 
數據文件存儲機制
1.ASM
  自動存儲管理(ASM、 Automatic Storage Management )是一種高性能、且易於管理Oracle數據庫文件的存儲解決方案。ASM與傳統的文件系統和存儲管理相比,包括以下幾個優勢:
l 簡化諸如創建數據、管理磁盤空間等工作
l 提供了在所有磁盤之上的自動負載均衡,從而減少文件系統中的熱點
l存儲配置調整後能夠進行自我平衡調整,如當增加或移除磁盤時(物理磁盤),ASM可以自動進行聯機磁盤重組
2.操作系統的文件系統
  大多數數據庫是存儲在文件系統中的,即在一個連續的硬盤地址空間上建立的數據結構文件。所有的操作系統都有文件管理器(系統),其能在文件系統內負責分配磁盤空間給文件,同樣也能從文件內收回磁盤空間。一般創建數據庫時,默認的選項如果不選擇ASM,則一般都是使用文件系統。
3.裸設備
裸設備就是未經文件系統格式化的磁盤分區或者邏輯卷。使用裸設備的好處是執行直接的I/O或者大緩衝區的寫效率很高,因爲繞過了操作系統的緩衝區。
 
創建數據庫時的選項:
 
ASM存儲組件
  
   Oracle能夠將數據文件作爲一個 ASM文件存儲在 ASM磁盤組內,我們可以把ASM磁盤組看成是由ASM管理的磁盤集合的一個單元。
 
 
1.ASM磁盤
    ASM磁盤是配置給ASM磁盤組的存儲設備。ASM磁盤可以是一個物理磁盤或者分區、存儲陣列的邏輯單元號(LUN)、邏輯卷或者是網絡存儲設備。哪怕數據庫在運行期間,ASM也可以添加到ASM磁盤組,也可以從ASM磁盤組中刪除。將一個ASM磁盤添加到一個ASM磁盤組時,可以指定一個名字,也可以由ASM自動分配一個名字。
2.ASM磁盤組
    ASM磁盤組是管理ASM磁盤集合的邏輯單元。在磁盤組內部,包含了文件系統與數據庫文件的接口。對於存儲在ASM磁盤組中的文件內容,是以在所有磁盤之上以自動負載均衡的方式存儲的,從而減少文件系統中的熱點,因此其執行效率比得上裸設備。
3.ASM文件
  ASM文件存儲在ASM磁盤組內。Oracle數據庫與ASM通訊,數據文件、控制文件、聯機重做日誌文件和其它類型的文件均可存儲爲ASM文件。
4.ASM盤區
  ASM盤區是一種原始存儲器,用來保存ASM文件中的內容。一個ASM盤區由一到多個ASM文件組成,每個ASM盤區擁有磁盤上的一個或多個存儲單元。
5.ASM分配單元
  ASM分配單元是ASM磁盤組內用來進行分配的最基本單位。ASM分配單元是由ASM分配的一系列最小的連續磁盤空間,而一個或多個ASM分配單元組成一個ASM盤區。
 
ASM Instance
  
 
ASM實例是用來管理ASM磁盤(組)的特定實例。ASM實例和數據庫實例均需要共享訪問ASM磁盤組中的磁盤。ASM管理磁盤組的元數據,並向數據庫實例提供規範的信息。而數據庫實例無需通過ASM就能直接讀寫ASM磁盤。
ASM實例的構建技術與數據庫實例的構建技術是相同的,如也具有SGA,但 ASM實例無法裝入數據庫。
 
Oracle管理文件和用戶管理文件
Oracle管理文件是一種命名策略,能確保你將操作指定在對象上而不是文件上,如創建一個表空間而不指定其數據文件。另外,Oracle管理文件能夠替代管理員直接管理數據庫對應的操作系統文件。ASM要求使用Oracle自動管理文件。
用戶管理文件恰恰相反,對數據庫的操作系統文件管理是由用戶自己管理的(一般是管理員負責),如創建一個表空間時需要指定其數據文件。
通過初始化參數,可以對不同類型的文件指定不同的文件系統目錄,Oracle管理文件能夠確保數據庫創建的文件是唯一的,並且當不再需要時自動刪除文件。 兩種策略也可以混合使用
 
 
數據文件和表空間
  
l每個表空間由一個或多個數據文件組成
l數據庫中的數據是存儲在數據文件中的
l段中的數據可以跨多個數據文件,但不能跨多個表空間
l數據庫必須有SYSTEM和SYSAUX表空間,任何數據庫創建的時候,Oracle都會自動將第一個數據文件放在SYSTEM上
l
SYSTEM表空間包含數據字典 ,以及記錄數據庫元數據的一些列的數據表。 通常情況下,數據庫也有一個undo表空間和臨時表空間(通常命名TEMP )。
 
永久數據文件和臨時數據文件
   永久表空間中存儲的是持久模式對象,這些對象存儲在數據文件中。
臨時表空間中僅僅存儲的是會話期間模式對象,本地管理的臨時表空間擁有臨時文件,臨時文件用來處理排序等操作,當內存不足時,臨時文件也存儲部分本該存儲在內存中的結果集(虛擬內存)。
   永久數據文件和臨時數據文件的差異如下:
l持久的數據庫對象從來不會存儲在臨時文件中
l臨時文件總是設置成NOLOGGING模式,因此不會產生重做日誌信息;從存儲介質恢復時,也不會恢復臨時文件中的數據
永久數據文件和臨時數據文件的差異如下(續):
l臨時文件不能被設置爲只讀
l不能使用ALTER DATABASE語句創建一個臨時文件
l創建或者調整臨時文件時,並不能確保操作系統分配給該臨時文件的大小就一定能達到定義時指定的大小
l臨時文件的信息是記錄在數據字典視圖DBA_TEMP_FILES和動態執行視圖V$TEMPFILE中的,而不是DBA_DATA_FILES和V$DATAFILE中的
 
數據文件的聯機和脫機
 
u每個數據文件可以是脫機的也可以是聯機的,脫機則不可用(無效、不可訪問)、聯機則可用(有效、可訪問)
u當我們要對數據文件進行備份、重命名時可以將數據文件設置爲脫機模式
u表空間也可以設置爲脫機或聯機模式,也可以將一個聯機的表空間中的一個數據文件設置爲脫機模式而該表空間仍然保持爲聯機模式;如果將表空間設置爲脫機,則其所有數據文件都變成了脫機模式
 
數據文件的結構
  
 
數據文件頭包含文件自身的元數據(如大小、檢查點的SCN(System Change Number)),還要包含絕對數據文件編號(在數據庫內唯一標示的數據文件的編號)和相對數據文件編號(在表空間內唯一標示的數據文件的編號)
 
 
邏輯存儲結構

1.邏輯結構與物理結構的關係
l 邏輯結構由數據塊、區、段和表空間構成
l表空間中存儲的是數據文件
l數據文件是由操作系統的磁盤塊組成的,但是又劃分爲多個Oracle區
 
2.邏輯存儲層級構成

l 一個邏輯塊包含一個或多個具有相同大小的物理磁盤空間,是DB最小的邏輯存儲單元
l一個區由一系列連續的塊組成的,如上圖24k和72k的區的數據塊不同
l 一個段由一個或多個區組成,每個數據庫對象消耗的存儲資源都是在單一一個段裏面的,不會分佈在多個段上
l每個段屬於且僅僅屬於一個表空間,因此每個段中的區都是在一個表空間中的, 在表空間內部,段包含的區可以來自不同數據文件,而同一個區只能來自一個數據 文件
 
3.邏輯空間管理

邏輯空間管理是Oracle用來跟蹤和分配表空間中的區的。當數據塊對象請求一個區(存儲空間)時,數據庫必須擁有一個機制來找到並且提供一個區給該對象,同樣地,當數據庫對象不再需要該區時,數據庫也必須擁有一種機制來將不再需要的區變成可自由使用的區(釋放該區的資源)。
在表空間內部,Oracle基於創建對象時的存儲參數來管理表空間。表空間管理有兩種類型:本地管理的表空間和數據字典管理的表空間。
 
(1).本地管理表空間
Oracle默認的表空間管理模式。指在數據庫中使用位圖來管理表空間的區。
 
 
在表空間內部,對段的空間管理可以使用自動管理(ASSM: automatic segment space management )和手工管理(MSSM: manual segment space management )。
本地管理表空間會在數據文件的頭部維護一個位圖用來跟蹤數據文件主體部分已佔用和空閒的空間信息。位圖部分的每一位指向一個相應的數據塊組。當空間被分配或者被釋放時,Oracle改變位圖中這組空間對應的值,從而用來映射塊的最新狀態。
本地管理的表空間的優勢又:
l避免了使用數據字典管理段
在字典管理的表空間模式下,如果對一個數據字典表或者回滾段執行一個釋放操作,並且另外一個操作也執行釋放操作,則會造成遞歸操作。
 
本地管理的表空間的優勢有(續):
l自動跟蹤相鄰的空閒空間
這點有利於數據塊空閒區的拼接
l能自動判斷本地管理的區的大小
在本例管理的表空間模式下,將所有的區的大小都設置成相應的大小並覆蓋其存儲選項參數也可以作爲一種方案
Oracle對段的管理又包含自動段空間管理和手工段空間間管理,Oracle強烈建議在本地管理表空間模式下使用自動段空間管理
 
(2).數據字典管理表空間
數據字典表空間管理是指Oracle使用數據字典管理表空間中的區。當一個區被分配、釋放或者重複使用時,Oracle會更新數據字典中的相應表的記錄。
例如當一個數據表需要區時,Oracle查詢數據字典表並且搜索空閒的區,如果數據庫找到了空間,則會修改數據字典表,並在另外一個表中插入一行。
在後臺爲數據庫對象獲取空間的SQL是一種遞歸SQL,其執行需要序列化,因此對性能有負面影響,鑑於此,本地管理的表空間是默認的表空間管理模式。
 
 
數據塊
1.Oracle數據塊和操作系統塊
l在物理層面,數據庫中的數據是由操作系統塊組成的磁盤文件存儲的
l操作系統塊是操作系統能夠讀寫的最小數據塊
lOracle數據塊是Oracle能夠讀寫的最
小數據單位,其大小和結構對操作系統是未知的
l對操作系統塊而言,Oracle數據塊具有邏輯分離性:
p應用程序無需知道磁盤上數據的物理地址
p數據庫的數據可以是不同物理磁盤上的鏡像或者條狀的
  
 
 
1.Oracle數據塊和操作系統塊
(1).數據庫塊的大小
l由初始化參數DB_BLOCK_SIZE設定
l每個數據庫具有一個數據庫塊大小,在創建數據庫時被設置
l除非重新創建數據庫,該參數不可修改
l如果沒有指定該參數,則其大小由操作系統指定,標準的大小包括4k和8k
l數據塊大小可以與操作系統塊大小不同,但必須是操作系統塊大小的倍數
2.Oracle數據塊格式
  
 
  
3.數據塊空間管理
隨着Oracle對數據塊自底部向上填充數據,數據塊頭和數據行之間的空閒空間也會縮小,此外將一個可空行的數據更新成一個非空值時,也會導致空閒空間的減小。數據庫管理數據塊中的空閒空間其目的是優化性能和避免空間的浪費。
(1).PCTFREE
  PCTFEE參數告訴數據庫,需要保留塊中多大百分比的空間以預備Update操作,因此PCTREE對防止行遷移和避免空間的浪費具有重要作用。如下面的建表語句:
CREATE TABLE test_table (n NUMBER) PCTFREE 20;   
 
數據庫先在數據塊中增加行,引起行數據向上增長接近塊頭,同時塊頭也在向數據行增長,PCTFEE爲20%,能
確保該數據塊至少20%的空間是空閒的。例如,數據庫能防止INSERT語句造成的塊頭和數據行佔據整個塊90%的空間而只保留10%的空閒空間情況的發生。
 
 
1.區的分配
默認情況下,當段創建的時候數據庫會爲其分配一個初始化區(initial extent ),區始終
存在於一個數據文件中,此時儘管還沒有數據寫入到該段中,初始化區中的數據依然被保留爲段所專用。每一個段中的第一個數據塊都包含了該段中區的目錄信息。
 
 
1.區的分配
 
當初始化區填充滿了且還需要分配空間時,Oracle會爲段自動分配增加的區( incremental extent ),增加的區是爲段分配的一個順序的區。分配的算法取決於表空間的管理方式(本地管理的或數據字典管理的)。
 
2.區的釋放
通常,如果不使用DROP命令用戶段中的區不會被釋放給表空間以便重新使用。11g中如果你刪除了一個表中全部的數據而數據庫還沒有收回那些數據塊以便重新使用,則可以使用DBMS_SPACE_ADMIN包刪除段。能釋放區的技術方法包括:
l使用在線段收縮技術從段中收回碎片
l把表移動到另外一個表空間上的另外一個表中(此時該表是新的段)
l重建索引或合併索引
l清空表
l通過釋放未使用的空間修改高水位線
 
3.區的存儲參數
  段通過使用存儲參數(storage parameters )來決定如何爲其自身分配自由空間。存儲參數的優先級從高到低依次爲:
l段存儲參數
l表空間存儲參數
l數據庫存儲參數
本地管理的表空間可以使用統一的區大小,也可以使用由系統自動分配的可變區大小:
l統一的區大小:可以設置一個區的大小,也可以使用默認值1M。此時表空間中的所有區的大小都是相同的;而本地管理的臨時表空間也只能使用這種類型來分配空間
l自動分配的區大小:此時由Oracle來決定一個最優的額外區的大小
   本地管理的表空間中有些存儲參數在表空間級的參數上不能設置,而在段級上可以設置,此時Oracle使用所有的參數來計算段中其初始化區的大小,優先級由Oralce內在算法保證。
 
1.用戶段
  當創建表和索引時,Oracle默認使用段延遲創建(deferred segment creation )來更新數據庫元數據。從11gR2開始,對於分區的創建使用該技術。當用戶插入第一行數據到表(分區)時,Oracle爲表(分區)及其索引、大對象列分配段。
段延遲創建能避免當不需要使用數據庫資源時而使用了。如安裝一個應用時需要成千上萬的數據庫對象,如果不採用該技術,則一律要這些對象分配空間,而很多的對象可能開始壓根不會被使用,但這些對象消耗大量的存儲資源。
可以使用DBMS_SAPCE_ADMIN管理空對象。
  自11gR2開始,使用上述包能做:
l對沒有創建段的空表(分區)手動物理化段
l對分配了一個空段的空表(分區)收回段
假定禁用了段延遲創建,執行CREATE TABLE test_table (my_column NUMBER); ,則如下圖:
 
而建表時帶有主鍵或唯一索引創建的語句時,同樣假定禁用了段延遲創建,執行:
CREATE TABLE lob_table (my_column NUMBER PRIMARY KEY, clob_column CLOB); ,則如上圖。
  可見隱式的同步創建了其它三個段。
 
2.臨時段
  當處理查詢時,Oracle對於SQL的執行需要使用臨時空間用來處理排序、散列和合並位圖。創建索引時,Oracle也是先把數據放在臨時段待索引創建完成後再放到永久段中。
    如果內存夠用,則Oracle不會創建臨時段,當不夠用時會自動分配臨時段,類似於OS的虛擬內存。
(1).爲查詢分配臨時段
Oracle對查詢執行時臨時段的創建、使用和刪除是自動的,臨時段的創建是在用戶的臨時表空間中的。推薦的做法是爲臨時段至少創建一個臨時表空間。
(2).爲臨時表和索引分配臨時段
Oracle也可以對臨時表和它們的索引分配臨時段,臨時表僅僅在會話期間纔會持有數據,每個會話僅僅能訪問分配給它的臨時區,而不能訪問其它區的。
當向臨時表中插入第一行數據時,Oracle爲其分配段。CREATE TABLE AS SELECT明確了何時發生第一次插入。第一次插入數據時,Oracle爲臨時表及其索引分配段,創建索引段的根節點,分配大對象的段。
    同樣,對臨時表空間的段分配也是在臨時表空間中的。
3.回滾段
  回滾段用來:
l回滾活動事務
l恢復中端的事務
l防止讀一致性
l執行某些閃回操作
  Oracle將回滾數據存儲在數據庫內部是要優於存儲在外部文件中的,回滾數據也是以塊的形式存儲的,此點跟存儲update數據是一樣的,也同樣會產生重做日誌。通過這種機制,Oracle無需訪問外部文件就能有效訪問回滾數據。回滾數據存儲在UNDO表空間中,Oracle通過 自動回滾模式進行管理。
(1).回滾段和事務
事務啓動時,Oracle將其綁定到一個回滾段。多個事務也可以併發的操作一個回滾段或者不同的回滾段。
(2).事務回滾段
    當ROLLBACK命令發出後,Oracle使用回滾數據替換尚未提交的更新。
 
表空間
 
SYSTEM和SYSAUX表空間是必須得有的。其它內容在前面章節介紹過,此處不再贅述。
 
 
習題
1.關係模型有那些特性?
2.Oracle對數據的操作有那些方式?RDBMS爲什麼要對數據的分爲邏輯操作和物理操作,其好處是什麼?我們日常的操作屬於什麼操作?
3.什麼是ASM,請畫出ASM夠成圖並解釋ASM實例和數據庫實例的相同點和不同點。
4.數據庫表空間管理方式有幾種?爲什麼說本地管理的表空間更好?
5.假設一個表空間有3個數據文件,將其中一個設置爲脫機可以嗎?如果將表空間設置爲脫機會發生什麼?
6.畫出數據文件結構圖,並解釋數據文件頭包含的內容。
7.畫出邏輯存儲結構層次圖,並解釋各個層次之間的關係。
8.畫出數據塊結構圖,並解釋各個部分的含義。
9.什麼情況下會產生行鏈,什麼時候會產生數據遷移?繪圖並加以解釋
10.段包括那幾種類型?區和段之間的關係是什麼?
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章