1. 程式人生 > >Oracle 體系結構四 邏輯和物理存儲結構之間的關系

Oracle 體系結構四 邏輯和物理存儲結構之間的關系

相關 性能 不同 檢測 一個 instance 控制 運行 不存在

Oracle數據庫從物理存儲中完全抽象出邏輯存儲。邏輯數據存儲采用“段”的形式。段的類型有很多種:典型的段是“表”。這些段以物理形式存儲在數據文件中。通過表空間將邏輯存儲從物理存儲中抽象出來。邏輯結構和物理結構及其定義之間的關聯在數據字典中定義。

物理數據庫結構

Oracle數據庫包括三類文件,以及其他幾種數據庫之外(或者說是可選的)的文件。必需的文件是控制文件(control file)、聯機重做日誌文件(online redo

log file)和數據文件(data file)。通常所說的外部文件(還有一些事高級選項需要的)是初始化文件、口令文件、歸檔重做日誌文件以及日誌和追蹤文件。

控制文件

控制文件包含指向數據庫其余部分的指針:聯機重做日誌文件和數據文件的位置,以及更新的歸檔日誌文件(如果數據庫處於歸檔日誌模式)的位置。它還存儲這維護數據庫完整性所需的信息:例如各種重要的序列號和時間戳。例如,如果將恢復管理器工具用於備份,則控制文件也將存儲這些備份的詳細信息。控制文件的大小通常不過數MB,卻起著至關重要的作用。

不必考慮使控制文件的多路副本保持同步,Oracle將做好這一切。維護工作將自動完成,只需要控制要制作多少副本,以及要將副本放於何處即可。如果創建數據庫時設置的副本數量或位置有誤,就可以在後期添加或刪除副本,或移動它們,但要註意,執行任何此類工作都需要停機,因此,最好還是一開始就設置好。如果任何控制文件副本受損,數據庫實例將立即終止。Oracle不允許使用控制文件數量低於要求的數據庫。

聯機重做日誌文件

重做日誌按時間順序存儲應用於數據庫的一連串的變更向量。其中僅包含重建(或重做)所有已完成工作的最少限度的信息。如果數據文件(或整個數據庫)受損,則可以將這些變更向量應用於數據文件備份來重做工作,將它們恢復到發生故障的那一刻前的狀態。重做日誌包含兩類文件:聯機重做日誌文件(必需的)和歸檔日誌文件(可選的)。

每個數據庫至少有兩個聯機重做日誌文件,但與控制文件一樣,優秀的DBA總是為每個聯機重做日誌文件創建多個副本。聯機重做日誌包含多組聯機重做日誌文件,每個文件都稱為一個成員。Oracle數據庫至少需要兩個組,其中每個組知道有一個成員在運行。處於性能考慮,可以創建兩個以上的組,出於安全起見,每組要有多個成員。

其中一個組是當前組:LGWR將更改寫入當前聯機重做日誌文件。當用戶會話更新數據庫緩沖區緩存中的數據時,也將盡可能少的變更向量寫出到重做日誌緩沖區。LGWR將此緩沖區不斷轉儲到當前聯機重做日誌文件組中的文件。日誌文件的大小固定不變,因此,當前組中文件最終會被寫滿。此時,LGWR將執行稱為“日誌切換”的操作。這使第二個組稱為當前組,並開始執行寫入。如果數據庫配置得當ARCn進程將歸檔(實際上是備份)第一個組中的日誌文件成員。當第二個組變滿時,LGWR將再切換回第一個組,使第一個組成為當前組,並重寫其內容。ARCn將接著歸檔第二個組。這樣,聯機重做日誌文件組(及其成員)將被循環使用,而每次日誌切換將生成歸檔重做日誌文件。

與控制文件一樣,如果每組具有多個成員(事實也應當如此),那麽仍然不必擔心保持這些成員同步的問題。LGWR能夠確保對所有成員進程並行寫操作,從而使這些成員完全相同。如果丟失某個組的一個成員,只要還存在其他成員,數據庫仍然能夠繼續運行。

聯機重做日誌文件組的大小與數量涉及調整問題。通常,我們應當選擇與預期活動數相適應的大小。至少為50MB,但某些活動數特別多的數據庫需要將此數值提高到數GB,否則,每過幾分鐘,文件就會變慢。就十分忙碌的數據庫而言,每秒鐘可生成數MB的重做數據,就基本處於靜態的數據庫而言,每小時也不過生成數MB的重做數據。每個聯機重做日誌組的成員數量取決於適當的容錯級別,也依照住址標準中的文檔記錄而定。不過,不必再數據庫創建階段擔心這個問題。在稍後的任意時間,都能夠移動、添加或刪除聯機重做日誌文件,並且可以任意創建不同大小的聯機重做日誌文件。上述操作都可以在不停機的情況下“聯機”執行,因此對於最終用戶來說是透明的。

數據文件

在數據庫創建階段,至少必須創建兩個數據文件。一個用於SYSTEM表空間(存儲數據字典),一個用於SYSAUX表空間(存儲數據字典的輔助數據),一個用於UNDO表空間(存儲保護事務所需的撤銷段)。

數據文件是數據的存儲倉庫。數據文件的大小與數量實際上是不受限制。其大小只受操作系統和硬件功能的限制。

數據文件是系統管理員可以看見的物理結構。從邏輯上講,它們是段(包含編程人員可以看到的用戶數據的段,以及構成數據字典的段)的儲存庫。“段(segment)”是數據的存儲結構,典型的段是表和索引。在數據庫的生命周期內,可以隨時重命名、移動、添加或刪除數據文件,也可以重設其大小。對某些數據文件執行某些操作時,將產生停機時間。

在操作系統級別看,數據文件由多個操作系統塊組成。在內部,將數據文件的格式設置為Oracle“塊(block)”。在每個數據文件中,這些塊連續編號。在創建數據文件時,塊大小固定不變,在大多數環境中,整個數據庫的塊大小都是一樣的。塊大小設計調整問題,大小範圍是2KB到32KB(收到平臺的限制)。Oracle塊大小與操作系統的塊大小不存在任何關聯。

技術分享圖片

塊中存在頭部分和數據區域,還可能有一些空閑空間。頭部分包含諸如行目錄的信息,行目錄列出塊中行數據區域中的位置(如果將相應的塊用於表段),還包含行鎖定信息(如果有事務或幾個事務正在處理塊中的行)。數據區域包含行本身,如行(如果是表段的一部分)或索引鍵(如果塊是索引段的一部分)。

服務器進程對數據文件執行讀操作,而DBWn對數據文件執行寫操作。

其他數據庫文件

這些文件位於數據庫之外。在實際中,它們都是必需的,但雅閣地將,它們並不是數據庫的一部分。

  • 實例參數文件(Instance Parameter File)當啟動Oracle實例時,SGA結構會根據此參數文件的設置內置到內存,後臺進程會據此啟動。這是啟動實例所需的唯一文件。其中的參數有數百個,但只有一個是必需的,它就是DB_NAME參數。其他多有參數都有默認值。因此說,此參數文件可以很小,但必須存在。
  • 口令文件(Password File)用戶用過提交用戶名和口令來建立對話。Oracle服務器根據存儲在數據字典的用戶定義對用戶名和口令進行驗證。數據字典是數據庫中的一組表,如果未打開數據庫,將無法對其進行訪問。有時,需要在使用數據字典前對用戶進行身份驗證:在需要啟動數據庫時或創建數據庫時。外部口令文件是完成此任務的一種方式。它包含存在於數據字典之外的少量用戶名和口令(通常少於6個),這些用於在使用數據字典前連接到實例。
  • 歸檔重做日誌文件(Archive Redo Log Files)當聯機重做日誌文件變滿時,ARCn進程會將聯機重做日誌文件從數據庫復制到歸檔日誌文件中。在完成後,歸檔日誌就不再是數據庫的一部分,因為它不是連續的數據庫操作所必需的。但是,如果需要還原數據文件備份,它將起到重要的作用。Oracle提供了用於管理歸檔重做日誌文件的功能。
  • 警報日誌和跟蹤文件(Alert Log and Trace Files)警報日誌是影響視力和數據庫的某些重要操作的相關消息的連續流。並非所有事項都予以記錄:只記錄認為確實重要的事件,例如啟動和關閉、更改數據庫的物理結構和更改控制實例的參數。後臺進程會在檢測到錯誤條件時生成跟蹤文件,有時也用於報告特定事件。

邏輯數據庫結構

Oracle使用術語“段”來描述任何包含數據的結構。典型的段是包含數據行的表,但是Oracle數據庫包含十多種段類型。其中最引人關註的表段、索引段和撤銷段。Oracle通過表空間(tablespace)方式,將邏輯存儲從物理存儲中抽象出來。表空間在邏輯上是一個或多個段的集合,在物理上是一個或多個數據文件的集合。如果使用“關系分析”術語,則段和數據文件之間存在多對多關系:可以將一個表分布在多個數據文件中,而一個數據文件也可能包含多個表的一部分。Oracle通過在段和文件之間插入表空間實體,解決這種多對多關系的問題。

必須在創建數據庫時創建SYSAUX表空間。如果未予指定,將創建默認的SYSAUX表空間。

段由多個塊組成。數據文件的格式被設置為多個塊,隨著塊的增加,這些塊被分配給段。由於每次管理一個塊的空間過於耗時,又將塊分組為區間(extent)。區間是數據文件中編號連續的一系列塊,通過為段新添區間,段將擴大。這些區間不必相鄰,即使在同一數據文件中,也是如此。它們可以來自作為段所在表空間一部分的任何數據文件。

從邏輯上講,一個表空間可以包含多個段,每個段可以包含多個區間。區間是一組Oracle塊。從物理上界量,數據文件由多個操作系統塊(由操作系統正在使用的文件系統所分配)組成。連接模型的兩端的關系顯示一個表空間可以包含多個數據文件,從最低級別看,一個Oracle塊將包含多個操作系統塊。

數據字典

數據字典包含從邏輯上和物理上描述數據庫及其內容的元數據。用戶定義、安全信息、完整性約束和性能監視信息都是數據字典的一部分。元數據作為一組段存儲在SYSTEM和SYSAUX表空間中。

從很多方面講,構成數據字典的段與其他的段很相似。關鍵區別在於:數據字典表在創建數據庫時生成,你無權直接訪問它們。Oracle提供了一組視圖來查詢字典。視圖有四種形式:帶有前綴CDB_、DBA_、ALL_和USER_。任何帶有前綴USER_的視圖將描述查詢視圖的用戶擁有的對象。任何帶有前綴ALL_的視圖將顯示描述您有權訪問的對象的行。因此ALL_TABLES將顯示描述你的表的行,以及描述已經授權你查看的任何人的表的行。任何帶有前綴DBA_的視圖將顯示數據庫中每個對象的行,因此,DBA_TABLES擁有數據庫中每個表對應的行。CDB視圖與DBA視圖相同,除非在多租戶數據庫中工作。在創建數據庫的過程中,將創建這些視圖,還會創建大量由Oracle提供的PL/SQL包來幫助數據庫管理員管理數據庫,幫助編程人員開發應用程序。PL/SQL代碼也存儲在數據字典中。

表空間和數據文件之間的關聯在數據庫控制文件中維護。其中列出多有數據文件,致命其所屬的表空間。如果沒有控制文件,實例就無法找到數據文件,然後識別組成SYSTEM表空間的文件。只有打開SYSTEM表空間時,實例才可能訪問數據字典,才可能打開數據庫。

Oracle 體系結構四 邏輯和物理存儲結構之間的關系