Oracle數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)有哪些?
物理存儲(chǔ)結(jié)構(gòu)簡(jiǎn)介
Oracle的物理存儲(chǔ)結(jié)構(gòu)與邏輯存儲(chǔ)結(jié)構(gòu)是分離的,因此你可以在不影響邏輯結(jié)構(gòu)訪問的情況下對(duì)物理存儲(chǔ)結(jié)構(gòu)進(jìn)行管理。Oracle數(shù)據(jù)庫(kù)可以看作是持久化存儲(chǔ)上保存有數(shù)據(jù)的文件集合。當(dāng)你執(zhí)行 CREATE DATABASE 時(shí),會(huì)生成以下數(shù)據(jù)庫(kù)文件:
數(shù)據(jù)文件和臨時(shí)文件:數(shù)據(jù)文件(data file)是Oracle數(shù)據(jù)庫(kù)在持久化存儲(chǔ)中生成的物理文件,其中包含有表、索引等數(shù)據(jù)結(jié)構(gòu)。臨時(shí)文件(temp file)是屬于臨時(shí)表空間的數(shù)據(jù)文件。Oracle會(huì)以其他軟件無法讀取的專有格式向這些文件寫入數(shù)據(jù)。
控制文件(control file):是追蹤數(shù)據(jù)庫(kù)物理組成的二進(jìn)制文件。沒有控制文件數(shù)據(jù)庫(kù)就無法啟動(dòng)。
在線重做日志(online redo log):是記錄對(duì)數(shù)據(jù)庫(kù)操作的日志文件。
數(shù)據(jù)庫(kù)實(shí)例(database instance)是管理數(shù)據(jù)庫(kù)文件的內(nèi)存結(jié)構(gòu)的集合。
數(shù)據(jù)庫(kù)文件的存儲(chǔ)機(jī)制
Oracle數(shù)據(jù)庫(kù)常見的管理物理文件存儲(chǔ)的機(jī)制包括:
Oracle自動(dòng)存儲(chǔ)管理(Automatic Storage Management, ASM):Oracle ASM 是專門為 Oracle 數(shù)據(jù)庫(kù)設(shè)計(jì)的一種文件系統(tǒng)。
操作系統(tǒng)的文件系統(tǒng)(Operating system file system):大多數(shù) Oracle 數(shù)據(jù)將文件存儲(chǔ)在文件系統(tǒng)中。所有的操作系統(tǒng)都有在文件系統(tǒng)中給文件分配和釋放磁盤空間的文件管理器。文件系統(tǒng)通常建立在邏輯卷管理器(Logical volume manager, LVM)創(chuàng)建的邏輯卷上。
集群文件系統(tǒng)(Cluster file system):集群文件系統(tǒng)是一個(gè)分布式的文件系統(tǒng),通常用于對(duì)客戶提供高性能服務(wù)的服務(wù)器集群。集群中的一個(gè)節(jié)點(diǎn)失敗不會(huì)使整個(gè)文件系統(tǒng)不可用。
在實(shí)際應(yīng)用中,Oracle數(shù)據(jù)庫(kù)可以組合使用以上存儲(chǔ)機(jī)制。比如,可以將控制文件和在線 redo 日志存儲(chǔ)在傳統(tǒng)的文件系統(tǒng)中,用戶的某些數(shù)據(jù)文件存儲(chǔ)在裸分區(qū)(raw partitions)中,其他的數(shù)據(jù)文件存儲(chǔ)在 ASM 中,而歸檔的 redo 日志文件存儲(chǔ)到集群文件系統(tǒng)中。
Oracle ASM
自動(dòng)存儲(chǔ)管理是一個(gè)高性能、易于管理的 Oracle 數(shù)據(jù)庫(kù)文件存儲(chǔ)解決方案。Oracle ASM 也是一個(gè)專門為 Oracle 數(shù)據(jù)庫(kù)提供文件系統(tǒng)的卷管理器(volume manager)。相對(duì)于傳統(tǒng)的文件系統(tǒng)和存儲(chǔ)管理器,ASM 具有如下優(yōu)點(diǎn):
簡(jiǎn)化了存儲(chǔ)相關(guān)的任務(wù),例如創(chuàng)建和布局(lay out)數(shù)據(jù)庫(kù)、管理磁盤空間;
在物理磁盤上分布數(shù)據(jù),解決了熱點(diǎn)(hot spots)問題,同時(shí)提供了一致的性能;
在存儲(chǔ)結(jié)構(gòu)發(fā)生變化后自動(dòng)再平衡(rebalance)數(shù)據(jù)。
要使用Oracle ASM,你需要為Oracle數(shù)據(jù)庫(kù)分配已分區(qū)的磁盤,并具有條帶化(Striping)和鏡像(Mirroring)的首選項(xiàng)。Oracle ASM 管理磁盤空間,在所有可用資源之間分配 I/O 負(fù)載,以優(yōu)化性能,同時(shí)消除了手動(dòng) I/O 調(diào)整的需要。
ASM 存儲(chǔ)結(jié)構(gòu)
Oracle 可以將數(shù)據(jù)文件存儲(chǔ)為 ASM 磁盤組(ASM disk group)中的一個(gè) ASM 文件(也可以存儲(chǔ)其他類型的數(shù)據(jù)庫(kù)文件)。
以下重要概念:
ASM磁盤:是分配給 ASM 磁盤組的存儲(chǔ)設(shè)備。ASM 磁盤可以是一個(gè)物理磁盤,也可以是一個(gè)分區(qū)、存儲(chǔ)陣列(storage array)中的一個(gè)邏輯單元號(hào)(Logical unit number, LUN)、一個(gè)邏輯卷、或者一個(gè)網(wǎng)絡(luò)附屬文件(network-attached file)。
ASM磁盤組:是 ASM 作為一個(gè)邏輯單元來管理的一個(gè) ASM 磁盤的集合。在磁盤組內(nèi),Oracle ASM 會(huì)為數(shù)據(jù)庫(kù)文件暴露一個(gè)文件系統(tǒng)接口。磁盤組內(nèi)存儲(chǔ)的文件內(nèi)容是均勻分布或者條帶化的,以解決熱點(diǎn)問題并提供一致的性能。
ASM文件:是存儲(chǔ)在磁盤組中的文件。可以將 Oracle 中的數(shù)據(jù)文件、控制文件、在線重做日志等其它類型的文件存儲(chǔ)為 ASM 文件。ASM 文件名以加號(hào)和ASM 磁盤組文件名開頭,例如 +DISKGROUP/DB_INSTANCE/DATAFILE/tablepsace.256.167523。
ASM區(qū)(ASM extents):是 ASM 文件的一部分。一個(gè) ASM 文件由一個(gè)或多個(gè) ASM 區(qū)組成。每個(gè) ASM 區(qū)由一個(gè)磁盤上的一個(gè)或多個(gè)分配單元組成。(注意:這里的ASM 區(qū)與邏輯存儲(chǔ)結(jié)構(gòu)中的區(qū)不一樣。)
ASM分配單元(allocation units):是 ASM 磁盤組內(nèi)的基本分配單元。分配單元是 Oracle ASM 分配的最小的鄰近的磁盤空間。一個(gè)或多個(gè)分配單元組成一個(gè) ASM區(qū)。
ASM 實(shí)例
ASM 實(shí)例是僅用于管理 ASM 磁盤的特殊 Oracle 實(shí)例。Oracle 數(shù)據(jù)庫(kù)實(shí)例和 ASM 實(shí)例都需要共享訪問 ASM磁盤組中的磁盤。ASM 實(shí)例管理磁盤組的元數(shù)據(jù),并向數(shù)據(jù)庫(kù)實(shí)例提供文件布局信息。數(shù)據(jù)庫(kù)實(shí)例不需要經(jīng)過 ASM 實(shí)例就能直接向 ASM 磁盤進(jìn)行 I/O 操作。
Oracle 使用相同的技術(shù)建立 ASM 實(shí)例與數(shù)據(jù)庫(kù)實(shí)例。例如,與數(shù)據(jù)庫(kù)實(shí)例類似,ASM 實(shí)例也有一個(gè)系統(tǒng)全局區(qū)(System global area, SGA)和后臺(tái)進(jìn)程。但是,ASM 實(shí)例不能掛載數(shù)據(jù)庫(kù),功能也比數(shù)據(jù)庫(kù)實(shí)例少很多。
Oracle管理的文件 vs 用戶管理的文件
Oracle 管理的文件(Oracle managed files)是一個(gè)允許你使用數(shù)據(jù)庫(kù)對(duì)象(而不是文件名)來說明操作的文件命名策略。例如,你可以創(chuàng)建一個(gè)表空間而無需注明它的數(shù)據(jù)文件。Oracle 管理的文件使得數(shù)據(jù)庫(kù)管理員無需直接管理數(shù)據(jù)庫(kù)中的操作系統(tǒng)文件。Oracle ASM 需要使用 Oracle 管理的文件。
另一方面,通過用戶管理的文件(user-managed files),你可以直接管理數(shù)據(jù)庫(kù)中的操作系統(tǒng)文件。你需要自主決定文件結(jié)構(gòu)和命名。比如,創(chuàng)建一個(gè)表空間時(shí)指定其他名字和其中數(shù)據(jù)文件的路徑。
數(shù)據(jù)文件(data files)
在操作系統(tǒng)層面,Oracle 數(shù)據(jù)庫(kù)將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)文件中。Oracle 數(shù)據(jù)庫(kù)必須至少有一個(gè)數(shù)據(jù)文件。
數(shù)據(jù)文件的用途
每個(gè)未分區(qū)的 schema 對(duì)象(比如表、索引)、對(duì)象的每個(gè)分區(qū)都存儲(chǔ)在自己的段(segment)中。每個(gè)段都只屬于一個(gè)表空間(tablespace)。表空間和數(shù)據(jù)文件存在以下重要區(qū)別:
每個(gè)表空間由一個(gè)或多個(gè)數(shù)據(jù)文件組成;
一個(gè)數(shù)據(jù)庫(kù)的所有數(shù)據(jù)都存儲(chǔ)在數(shù)據(jù)庫(kù)表空間的數(shù)據(jù)文件中;
一個(gè)段可以跨越一個(gè)或多個(gè)數(shù)據(jù)文件,但是不能跨越多個(gè)表空間;
一個(gè)Oracle數(shù)據(jù)庫(kù)必須有 SYSTEM 和 SYSAUX 這兩個(gè)表空間。在數(shù)據(jù)庫(kù)創(chuàng)建時(shí),Oracle 會(huì)自動(dòng)為 SYSTEM 表空間分配第一批數(shù)據(jù)文件。SYSTEM 表空間中存有數(shù)據(jù)字典(data dictionary),即包含數(shù)據(jù)庫(kù)元數(shù)據(jù)的表的一個(gè)集合。通常,Oracle 數(shù)據(jù)庫(kù)還會(huì)有一個(gè) undo 表空間和一個(gè)臨時(shí)表空間(一般命名為 TEMP)。