ASM磁盤頭可能是ASM元數(shù)據(jù)中廣為人知的部分。之前你可能認(rèn)為當(dāng)它被破壞或丟失時,只能寄希望于Oracle技術(shù)支持人員協(xié)助來恢復(fù)。在本節(jié)中將解釋ASM磁盤頭的重要性和它包含的信息。
ASM磁盤是以AU為單位進(jìn)行格式化的,部分AU會存放ASM元數(shù)據(jù),其他AU存放數(shù)據(jù)庫中的相關(guān)數(shù)據(jù)(如數(shù)據(jù)文件、備份文件、歸檔文件等等)。包含ASM元數(shù)據(jù)的AU會以元數(shù)據(jù)塊的方式進(jìn)行格式化(一個元數(shù)據(jù)塊的大小為4K)。AU0位于ASM磁盤的起始位置,它始終用于存儲ASM元數(shù)據(jù)。AU0的個塊,即block 0,就是ASM的磁盤頭。
ASM 磁盤頭的大部分內(nèi)容僅與本磁盤相關(guān),但也有部分信息與整個磁盤組相關(guān),有些甚至于與整個cluster相關(guān)。
我們對一個LINUX平臺上通過asmlib管理的磁盤的block 0,使用kfed工具進(jìn)行輸出觀察。
$ kfed read /dev/oracleasm/disks/ASMD1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0 kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0 kfbh.check: 473773689 ; 0x00c: 0x1c3d3679 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISKASMD1 ; 0x000: length=13 kfdhdb.driver.reserved[0]: 1145918273 ; 0x008: 0x444d5341 kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031 kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000 kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000 kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000 kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000 kfdhdb.compat: 186646528 ; 0x020: 0x0b200000 kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: ASMD1 ; 0x028: length=5 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: ASMD1 ; 0x068: length=5 ...
上述kfed命令的輸出結(jié)果顯示這個asm塊有兩種類型的數(shù)據(jù) 以kfbh為前綴的塊頭信息和以kfdhdb為前綴的ASM磁盤頭信息。實(shí)際上,每個ASM元數(shù)據(jù)塊都會有塊頭信息和與塊類型相匹配的一些相關(guān)數(shù)據(jù)。
| 數(shù)據(jù)類型 | 值 |
|---|---|
| kfbh.endian | 系統(tǒng)字序。0 - 大字序,1 - 小字序。 |
| kfbh.type | ASM塊類型。KFBTYP_DISKHEAD 表示這是一個ASM磁盤頭類型塊。 |
| kfbh.block.blk | ASM塊號。注意ASM磁盤頭塊的塊編號是0 |
重要的ASM磁盤頭數(shù)據(jù)
| 數(shù)據(jù)類型 | 值 |
|---|---|
| kfdhdb.driver.provstr | ASMLIB磁盤是ORCLDISK+磁盤名,非ASMLIB磁盤是ORCLDISK |
| kfdhdb.dsknum | ASM磁盤編號 |
| kfdhdb.grptyp | 磁盤級冗余級別 KFDGTP_EXTERNAL 代表 external級別,KFDGTP_NORMAL 代表 normal級別,KFDGTP_HIGH 代表 high級別。 |
| kfdhdb.hdrsts | ASM磁盤頭狀態(tài). V$ASM_DISK.HEADER_STATUS視圖內(nèi)包含所有可能的狀態(tài). |
| kfdhdb.dskname | ASM磁盤名 |
| kfdhdb.grpname | ASM磁盤組名 |
| kfdhdb.fgname | ASM失敗組名 |
| kfdhdb.crestmp.hi | lo |
| kfdhdb.mntstmp.hi | lo |
| kfdhdb.secsize | 磁盤的扇區(qū)大小(bytes) |
| kfdhdb.blksize | ASM元數(shù)據(jù)塊的大小(bytes) |
| kfdhdb.ausize | Alloocation unit的大小(bytes).默認(rèn)的AU大小為1 MB |
| kfdhdb.dsksize | 磁盤大小(以au為單位).本例中的磁盤大小為10239 MB |
| kfdhdb.fstlocn | 指針指向ASM的空閑空間表.1代表本AU中的ASM 塊1 |
| kfdhdb.altlocn | 指針指向ASM的分配表.2 代表本AU中的ASM 塊2 |
| kfdhdb.f1b1locn | 指針指向ASM的文件目錄.2代表本ASM磁盤的 AU 2 |
| kfdhdb.dbcompat | 小的數(shù)據(jù)庫兼容版本. 0x0a100000 = 10.1 |
| kfdhdb.grpstmp.hi | lo |
| kfdhdb.vfstart | vfend |
| kfdhdb.spfile | ASM spfile參數(shù)文件的AU號,本特性限于11.2或更高版本。 |
| kfdhdb.spfflg | ASM spfile參數(shù)文件標(biāo)識,如果這個值是1,ASM spfile參數(shù)文件則位于本磁盤的kfdhdb.spfile參數(shù)的AU,本特性限于11.2或更高版本。 |
ASM從11.1.0.7版本開始,磁盤頭塊的信息會自動備份到AU1的倒數(shù)第二個ASM元數(shù)據(jù)塊中。知道AU的塊大小和ASM元數(shù)據(jù)塊的大小后,就能找到倒數(shù)第二個塊的塊編號。通過kfed工具可以從塊頭中讀取到這些信息,并計算出AU1的倒數(shù)第二個塊的塊編號。
$ ausize=`kfed read /dev/oracleasm/disks/ASMD1 | grep ausize | tr -s ' ' | cut -d' ' -f2`
$ blksize=`kfed read /dev/oracleasm/disks/ASMD1 | grep blksize | tr -s ' ' | cut -d' ' -f2`
$ let n=$ausize/$blksize-2
$ echo $n
254
譯者注:其實(shí)在10.2.0.5版本,ASM也會自動備份磁盤頭的數(shù)據(jù)到AU 1的倒數(shù)第二個ASM元數(shù)據(jù)塊中。
$ kfed read /dev/oracleasm/disks/ASMD1 aun=1 blkn=254 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0 kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0 kfbh.check: 473773689 ; 0x00c: 0x1c3d3679 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISKASMD1 ; 0x000: length=13 ... kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname: ASMD1 ; 0x028: length=5 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: ASMD1 ; 0x068: length=5 ...
能夠看到與AU0的元數(shù)據(jù)塊0相同的內(nèi)容。當(dāng)磁盤頭被破壞或者丟失時,這個備份將是非常有用的。只需要運(yùn)行kfed repair [磁盤名]命令即可修復(fù),如果AU大小不是默認(rèn)的1MB,還需要指定AU大小的具體值。 如果懷疑ASM的磁盤頭出現(xiàn)故障,好尋求Oracle技術(shù)支持人員的幫助,而不是獨(dú)自進(jìn)行操作。
Exadata中的ASM磁盤并不是以設(shè)備名的方式給操作系統(tǒng)使用。它們使用專用的名稱格式 o/[存儲節(jié)點(diǎn)IP]/[磁盤名].kfed工具支持這種名稱格式,所以kfed可以在exadata環(huán)境中使用。查看Exadata磁盤的ASM磁盤頭:
$ kfed read o/192.168.10.9/DBFS_DG_CD_03_exadatacel01
kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD ... kfdhdb.dskname:DBFS_DG_CD_03_EXADATACEL01 ; 0x028: length=26 kfdhdb.grpname: DBFS_DG ; 0x048: length=7 kfdhdb.fgname: EXADATACEL01 ; 0x068: length=12 ... kfdhdb.ausize: 4194304 ; 0x0bc: 0x00400000 ...
ASM磁盤頭中部分Exadata專用屬性如下:
ASM磁盤名由磁盤組名 (DBFS_DG),存儲節(jié)點(diǎn)磁盤標(biāo)識(CD),存儲節(jié)點(diǎn)磁盤編(3)號和存儲節(jié)點(diǎn)名(exadatacel01)構(gòu)成。
失敗組的名字與存儲節(jié)點(diǎn)的名字相同,Exadata環(huán)境中默認(rèn)的AU大小是4MB。
ASM磁盤頭包含ASM磁盤組正常運(yùn)作和保持可用的重要元數(shù)據(jù)。 為防止ASM磁盤頭的突然損壞和丟失,Oracle推薦通過磁盤分區(qū)的方式,就是將它“移動”到遠(yuǎn)離磁盤物理起始位置的方式實(shí)現(xiàn)對ASM磁盤頭的保護(hù)。
Exadata的ASM磁盤頭信息通過不暴露給數(shù)據(jù)庫節(jié)點(diǎn)的方式進(jìn)行保護(hù)。
ASM從11.1.0.7版本開始,ASM磁盤頭通過維護(hù)一份在AU1備份的方式實(shí)現(xiàn)進(jìn)一步的保護(hù)機(jī)制。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個個人學(xué)習(xí)交流的平臺,網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對此聲明的最終解釋權(quán)。