構成Oracle DB 的文件可劃分為以下類別:
• 控制文件:包含與資料庫本身相關的數據,即物理資料庫結構信息。這些文件對資料庫至關重要。沒有這些文件,就無法打開數據文件以訪問資料庫中的數據。
• 數據文件:包含資料庫的用戶或應用程式數據,以及元數據和數據字典
• 聯機重做日誌文件:用於進行資料庫的實例恢復。如果資料庫伺服器發生崩潰,但未丟失任何數據文件,那麼實例便可使用這些文件中的信息恢復資料庫。
下列附加文件對成功運行資料庫非常重要:
• 參數文件:用於定義實例啟動時的配置
• 口令文件:允許sysdba、sysoper和sysasm遠程連接到實例並執行管理任務
• 備份文件:用於進行資料庫恢復。如果原始文件在發生介質故障或用戶錯誤時被損壞或刪除,通常要還原備份文件。
• 歸檔重做日誌文件:包含實例發生的數據更改(重做)的實時歷史記錄。使用這些文件和資料庫備份,可以恢復丟失的數據文件。也就是說,歸檔日誌能夠恢復還原的數據文件。
• 跟蹤文件:每個伺服器和後臺進程都可以寫入關聯的跟蹤文件。當進程檢測到內部錯誤時,進程會將有關該錯誤的信息轉儲到相應的跟蹤文件中。寫入跟蹤文件的一些信息是為資料庫管理員提供的,而其它信息是為Oracle SupportServices 提供的。
• 預警日誌文件:這些文件包含特殊的跟蹤條目。資料庫的預警日誌是按時間順序列出的消息日誌和錯誤日誌。Oracle 建議定期查看預警日誌。
資料庫具有邏輯結構和物理結構。
方案Schema
「方案」是資料庫用戶擁有的資料庫對象的集合。方案對象是直接引用資料庫數據的邏輯結構。方案對象包括諸如表、視圖、序列、存儲過程、同義詞、索引、集群和資料庫連結等結構。通常,方案對象包括應用程式在資料庫中創建的所有內容。
資料庫、表空間和數據文件
資料庫、表空間和數據文件之間的關係:
每個資料庫在邏輯上都分為一個或多個表空間。對每個表空間均顯式創建一個或多個數據文件,以在物理上將所有邏輯結構的數據都存儲在表空間中。如果是TEMPORARY表空間,那麼表空間將具有臨時文件,而不是數據文件。
表空間
資料庫分為多個邏輯存儲單元,這些單元稱為「表空間」,用於將相關邏輯結構組合在一起。例如,表空間一般會將應用程式的所有對象分成一組,以簡化一些管理操作。可以使用一個表空間存放應用程式數據,使用另一個存放應用程式索引。
數據塊
從最底層來看,Oracle DB 的數據存儲在「數據塊」中。一個數據塊與磁碟中特定字節數的物理資料庫空間相對應。每個表空間的數據塊大小是在表空間創建時指定的。資料庫使用和分配Oracle 數據塊中的空閒資料庫空間。
區
下一層邏輯資料庫空間是「區」。區是特定數量的相鄰數據塊(通過一次分配獲得),用於存儲特定類型的信息。
段
區之上的邏輯資料庫存儲層稱為「段」。段是為某個邏輯結構分配的一組區。
例如:
• 數據段:每個非集群的、不按索引組織的表都有一個數據段,但外部表、全局臨時表和分區表除外,這些表中的每個表都有一個或多個段。表中的所有數據都存儲在相應數據段的區中。對於分區表,每個分區都有一個數據段。每個集群也都有一個數據段。集群中每個表的數據都存儲在集群的數據段中。
• 索引段:每個索引都有一個索引段,存儲其所有數據。對於分區索引,每個分區都有一個索引段。
• 還原段:為每個資料庫實例創建一個UNDO表空間。該表空間包含大量用於臨時存儲還原信息的還原段。還原段中的信息用於生成讀一致性資料庫信息,並且在資料庫恢復過程中,用於為用戶回滾未提交的事務處理。
• 臨時段:臨時段是在需要臨時工作區來執行SQL 語句時,由Oracle DB 創建的。語句完成執行後,臨時段的區將返回到實例以備將來使用。為每個用戶指定一個默認臨時表空間,或指定一個在資料庫範圍內使用的默認臨時表空間。
Oracle DB 對空間進行動態分配。如果段中的現有區都已滿,將會再增加一些區。因為區是根據需要進行分配的,因此段中的區在磁碟中可能是相鄰的,也可能是不相鄰的。這些區可以來自屬於同一個表空間的不同數據文件。
資料庫被劃分為多個「表空間」,表空間是可用於將相關邏輯結構組合在一起的邏輯存儲單元。每個資料庫在邏輯上都分為一個或多個表空間。對每個表空間均顯式創建一個或多個數據文件,每個數據文件只屬於一個表空間,表空間在物理上將所有邏輯結構的數據都存儲在表空間中。
註:還可以創建大文件表空間,這種表空間只有一個文件。此文件通常非常大,其大小可達到行ID 體系結構允許的最大大小。此最大大小是表空間的塊大小乘以236,即,如果塊大小為32 KB,則最大大小為128 TB。傳統的小文件表空間(默認值)通常包含多個數據文件,但這些文件不能很大。
• SYSTEM 和SYSAUX 表空間是在創建資料庫時創建的
必需存在的表空間。這些表空間必須聯機。
• SYSTEM 表空間用於核心功能(例如數據字典表)。
• 輔助的SYSAUX 表空間用於附加的資料庫組件
(如Oracle EnterpriseManager Repository)。
• 不建議使用SYSTEM 和SYSAUX 表空間來存儲應用
程序的數據。
每個Oracle DB 必須包含一個SYSTEM表空間和一個SYSAUX表空間。它們是在創建資料庫時自動創建的。系統默認值是創建小文件表空間。還可以創建大文件表空間,Oracle DB 可通過該表空間管理超大文件。
表空間的狀態可以是聯機(可訪問)或脫機(不可訪問)。打開資料庫時,SYSTEM表空間始終處於聯機狀態。這個表空間可存儲支持資料庫核心功能的表,如數據字典表。
SYSAUX表空間是SYSTEM表空間的輔助表空間。SYSAUX表空間可存儲許多的資料庫組件(例如EM),要使所有資料庫組件正常運行,該表空間必須處於聯機狀態。
註:SYSAUX表空間可以脫機以執行表空間恢復,而SYSTEM表空間則不能。這兩種表空間都不能設置為只讀。
• 段存在於表空間中
• 段是區的集合
• 區是資料庫的集合
• 數據塊映射到磁碟塊
一部分資料庫對象(例如表和索引)以段的形式存儲在表空間中。每個段都包含一個或多個區。
區由相鄰的數據塊組成,這意味著每個區只能存在於一個數據文件中。
數據塊是資料庫中最小的I/O 單元。
資料庫從作業系統(OS) 請求數據塊集時,OS 會將數據塊集映射到存儲設備上的實際文件系統或磁碟塊。因此,可不必了解資料庫中任何數據的物理地址。這還意味著可以在多個磁碟上條帶化或鏡像一個數據文件。
可以在創建資料庫時設置數據塊的大小。對大多數資料庫而言,默認的8 KB 塊大小是足夠的。
當資料庫支持擁有大型表和索引的數據倉庫應用程式時,最好設置較大的塊大小。
當資料庫支持執行隨機讀寫的事務處理應用程式時,最好指定較小的塊大小。
塊大小的最大值取決於OS。Oracle 塊大小的最小值為2 KB,這個值很少使用。可以設置塊大小不標準的表空間。
• 是可移植的高性能集群文件系統
• 管理Oracle DB 文件
• 通過ASM 集群文件系統(ACFS) 管理應用程式文件
• 將數據分布到各個磁碟中以平衡負載
• 建立數據鏡像以防範故障
• 解決存儲管理挑戰
自動存儲管理(ASM) 為Oracle DB 文件提供文件系統與卷管理器縱向集成。ASM 可管理單個對稱多處理(SMP) 計算機,或管理集群的多個節點來支持Oracle RealApplication Clusters (RAC)。
Oracle ASM 集群文件系統(ACFS) 是一種多平臺、可伸縮的文件系統和存儲管理技術,該技術擴展了ASM 的功能,可支持 Oracle DB 外部的應用程式文件,如可執行文件、報表、BFILE 、視頻、音頻、文本、圖像以及其它一般用途的應用程式文件數據。
ASM 在所有可用資源中分布輸入/ 輸出(I/O) 負載,既免除了手動優化I/O 又優化了性能。
ASM 幫助DBA 管理動態資料庫環境,讓DBA 在不關閉資料庫的情況下,通過增加資料庫的大小來調整存儲分配。
ASM 可以維護數據的冗餘副本來提供容錯能力,也可以構建在供應商提供的存儲機制之上。數據管理是通過為各類數據選擇所需的可靠性和性能指標來實現的,而不是逐個文件地進行人工交互。
通過使手動完成的存儲工作自動化,ASM 功能節省了 DBA 的時間,從而提高了管理員的能力,使其可以管理更多和更大的資料庫,而且效率也更高。
ASM 不會妨礙任何現有的資料庫功能。現有資料庫能夠像平常一樣工作。新文件可以被創建為ASM 文件,而現有文件既可以按原有方式進行管理,也可以移植至 ASM。
上圖說明了Oracle DB 數據文件與ASM 存儲組件之間的關係。鴉腳標記代表一對多關係。
Oracle DB 數據文件與存儲在作業系統的文件系統中的文件或ASM 文件之間是一對一關係。
Oracle ASM 磁碟組是作為一個邏輯單元進行管理的一個或多個Oracle ASM 磁碟的集合。
磁碟組中的數據結構是自包含的,使用部分空間來滿足元數據需求。Oracle ASM 磁碟是為Oracle ASM 磁碟組預配的存儲設備,可以是物理磁碟,也可以是分區、存儲陣列中的邏輯單元號(LUN) 、邏輯卷(LV) 或連接到網絡的文件。每個ASM 磁碟被分成許多ASM 分配單元(AU),該單元是 ASM 可以分配的最小相鄰磁碟空間量。在創建ASM 磁碟組時,可以將ASM 分配單元的大小設置為 1、2、4、8、16、32 或64 MB ,具體取決於磁碟組的兼容級別。一個或多個ASM 分配單元即形成一個 ASM 區。Oracle ASM 區是用於存放Oracle ASM 文件內容的裸存儲。Oracle ASM 文件由一個或多個文件區組成。為了支持非常大的ASM 文件,可以使用可變大小區,區大小可等於 AU 大小的1 倍、4 倍和16 倍。
以下示例在最基本的層面上描述了Oracle DB 的操作。在該示例展示的Oracle DB 配置中,用戶和關聯伺服器進程在不同計算機上運行,這些計算機通過網絡連接。
1. 在安裝了Oracle DB 的節點(通常稱為「主機」或「資料庫伺服器」)上啟動了一個實例。
2. 用戶啟動一個應用程式,從而衍生了一個用戶進程。該應用程式嘗試與伺服器建立一個連接。(此連接可以是本地連接、客戶機/ 伺服器連接或來自中間層的三層連接)。
3. 伺服器運行一個具有相應Oracle Net 服務處理程序的監聽程序。監聽程序檢測到應用程式發出的連接請求,並創建一個代表用戶進程的專用伺服器進程。
4. 用戶運行一條DML 類型的SQL 語句並提交事務處理。例如,用戶更改表中的客戶地址並提交更改。
5. 伺服器進程接收該語句,並檢查共享池(一個SGA 組件)中是否有包含相同 SQL 語句的共享SQL 區域。如果找到共享SQL 區域,伺服器進程將檢查用戶對於所請求數據的訪問權限,然後使用現有的共享SQL 區域處理該語句。如果未找到共享SQL 區域,則為該語句分配一個新的共享SQL 區域,以便對該語句進行語法分析和處理。
6. 伺服器進程從實際數據文件(表)或資料庫緩衝區高速緩存中存儲的值中檢索任何必需的數據值。
7. 伺服器進程修改SGA 中的數據。因為已提交事務處理,所以日誌寫進程(LGWR) 會立即在重做日誌文件中記錄該事務處理。資料庫寫進程(DBW n) 在一個高效的時機將修改後的塊永久寫入磁碟。
8. 如果事務處理成功,伺服器進程將通過網絡向應用程式發送一條消息。如果事務處理不成功,則傳送一條錯誤消息。
9. 在整個過程中,其它後臺進程也在運行,監視是否有需要幹預的情況。此外,資料庫伺服器管理其他用戶的事務處理,並防止請求相同數據的事務處理之間發生爭用。
搜索劉老師微信號:Rman-2014,備註「Oracle學習與諮詢」,即可添加好友;或者掃描下面二維碼,關注我的「微學堂」公眾號,了解最新OCP認證動態、題庫及答案解析、培訓機構及講師介紹、課堂授課內容等。每天還有一篇技術文章發布哦!