CHAPTER 10 ASM Persistent Data Structures
與傳統文件系統和卷管理器一樣,ASM存儲元數據用來描述和跟蹤磁盤組的內容。所有的元數據描述存儲在上面的ASM磁盤組的組成和內容,這些元數據使得磁盤組實現了自描述。ASM磁盤組有兩類元數據:物理元數據和虛擬元數據。物理元數據位於磁盤上。虛擬元數據存儲在ASM文件中,因此與其他ASM文件一樣這些元數據均勻分布在磁盤組的磁盤上。RDBMS無法打開ASM讀取元數據目錄也不能對ASM物理元數據的位置執行讀寫(I/O)操作。
糾錯:ASM使用一個數據庫來存儲元數據(這句話是錯誤的)。
雖然ASM運行ORACLE實例,但是ASM沒有在實例中mount數據庫。ASM元數據存儲在磁盤組中,元數據的數據結構將在本章介紹。所有ASM元數據以4K元數據塊存儲包括磁盤頭和校驗數據。
物理元數據
物理元數據位於磁盤上並在位於固定位置。ASM引導過程需要這些固化的元數據。例如,物理元數據無法存儲在ASM文件中,如下的數據結構包含了物理元數據:
n 磁盤頭 DiskHeader
n 分配表 AllocationTable(AT)
n 空閒空間表 FreeSpace Table(FST)
n 合作關系狀態表 PartnershipStutus Table(PST)
Disk Header
每塊ASM磁盤都有一個磁盤頭。磁盤頭表示了ASM類型的磁盤,磁盤頭使用每個磁盤第一個AU(allocationunit)的第一個塊。
磁盤頭條目中包含如下結構:
ndisk name
ndisk number
ndiskgroup name
nfailure group name
ndisk size
nallocation unit(AU) size
ncreation time
nmount time
nASM compatibility
nfile directory pointer
nASMLIB reserved block
大多數字段都可以從他們的名字清楚的知道字段的含義。Mount time和creationtime用來幫助找出要用的的磁盤,當掛載時如果兩塊磁盤擁有相同的磁盤名並且在磁盤組中有相同的磁盤號。這種情況發生在當一塊磁盤向磁盤組中添加時另一塊磁盤剛好失效。
ASM compatibility指定了掛載磁盤組的最低ASM軟件號。ORACLE數據庫10g產品這個字段總是使用10.1。當COMPATIBLE.ASM的屬性升級為11.1,ASM在PST中保存版本號,同時更新磁盤組中的磁盤頭以確保ORACLE DATABASE 10g軟件不能訪問不兼容的磁盤組。
RDBMS compatibility指明了訪問磁盤組的RDBMS實例設置的參數的最小版本。磁盤頭中的這個字段總是10.1。ORACLEDATABASE 10g軟件不會更新這個字段,但是ORACLE DATABASE 11g軟件為了兼容性的緣故協商屬性目錄,如果參數COMPATIBLE.ASM是11.1或更高。
File directory pointer描述了FILE Drectory的第一個擴展的在磁盤中的位置。這個指針對於引導虛擬ASM元數據是必須的。File Directory在本章稍後進行討論。
ASMLIB可以再磁盤頭的ASMLIB保留塊中存放32 bytes的信息。ORACLE的ASMLIB用這個字段存儲磁盤的ASMLIB名稱。想獲取更多信息請看第6章。
磁盤頭是磁盤特定化的數據,對於mirror特性來說無法識別磁盤頭(也就是磁盤頭無法鏡像)。本章稍後描述,Disk Directory包含一些與磁盤頭一樣的信息。使用ALTER DISKGROUP ... CHECK命令檢查DiskDirectory和Disk Header的一致性。
AllocationTable(AT)
每個ASM磁盤都有一個分配表來跟蹤磁盤的空閒空間和已分配空間。分配表緊隨disk header之後。分配表表包括描述磁盤上的每個AU的分配表條目(ALLOCATION TABLE ENTRY ATE)。ATEs分組存放在Allocation Table Blocks(ATBs)。ATBs總是包含多個64個ATEs確保multil-AUextents不會擴多個ATBs。通常情況分配表存放在一個AU裡;然而對於大磁盤,分配表可以跨多個AU。在這種情況下,分配表使用的第二個AU在存放在分配表在第一個AU結束地址之後。為分配表分配的空間成為stride(跨度)。分配表分配的stride有固定的位置到地址2的32次方個AU,而沒有必要為小盤浪費AUs。
ATEs描述一個特定的AU如何使用。如果AU分配給文件那麼ATEs包含文件號和擴展號。extents跨越多個AU,多個ATEs將指向同一個extent。
未分配的AU在Allocation Table中標記為“free”,為了快速定位空閒AU,空閒extents以鏈表的形式存放。
從ORACLE 11grelase1開始,如果RDBMS或ASM實例無法讀取部分AU,但是可以讀取磁盤的其他部分,ATE就會標示這個AU不可用。ASM只會在normal和high-redundancy磁盤組上標記AU不可用。對於不可用AUs在第11章中的“讀取錯誤”章節中詳細討論,“ASM操作”。
Allocation Table和FileDirectory(本章稍後描述)是互相補充的數據結構。ALTER DISKGROUP ... CHECK命令校驗Allocation Table和FileDirectory的一致性。