揭祕ASM磁碟頭資訊

lhrbest發表於2016-04-13

第一章  Oracle核心系列3-揭祕ASM磁碟頭資訊

DBAplus社群 | 2015-12-17 07:00

1ASM後設資料

1.1基礎概念

1.1.1 ASM File

從10g開始,資料檔案的儲存除了使用裸裝置和檔案系統外,還可以存放在ASM中。簡單的理解,存放在ASM中的資料檔案,日誌檔案,控制檔案,歸檔日誌等等,就是ASM FILE。僅有以下的檔案型別可以存放在ASM Diskgroup中:

Control File

Datafile

Temporary data file

Online Redo Log

Archive Log

RMAN backup

Datafile Copy

SPFILE

Disaster Recovery Configuration

Flashback Log

Change Tracking Bitmap

DataPump Dumpset

一個ASM FILE的名字一般以一個”+”和DiskGroup名字開頭。 當ORACLE RDBMS KERNEL核心的檔案I/O層碰到一個以”+”開頭的檔案時,就會走到相關ASM的程式碼層中 而不是呼叫依賴於作業系統的檔案系統I/O。 僅僅在File I/O層面才會認識到這是一個ASM 中的檔案,而其上層的核心程式碼看來ASM FILE和OS FILE都是一樣的。

舉例:

+DATAA/orcl/datafile/system.256.689832921

格式說明: +DATA/orcl/datafile/tbs_name.asm_filenumber.incarnation_number

orcl:資料庫名稱

datafile: 檔案型別,表示是資料檔案

tbs_name: 表空間名

asm file#: 表示ASM file編號,$asm_file.file_number

incarnation number: 從時間戳提取,唯一值。

在一個ASM Diskgroup中僅僅允許存放已知的ORACLE檔案型別。假設一個檔案通過cp拷貝到ASM Diskgroup中,則該檔案的第一個塊將被檢驗以便確認其型別,以及收集其他資訊來構建這個檔案的完整ASM檔名。 如果其檔案頭無法被識別,則該檔案在DiskGroup中的建立將會報錯。

1.1.2 ASM AU

ASM在分配空間時,以AU為單位進行,AU即Allocation units,是組成ASM disk的基本單元。在Oracle 10gR2中,ASM AU的預設單位大小是1M,相應的條帶化大小是128K,可以通過調整_asm_ausize隱含引數來調整AU大小,調整_asm_stripesize控制相應的條帶化大小。

11g後可以在建立磁碟組時可以配置AU 大小,AU的允許大小有1、2、4、8、16、32 或64 MB。

wpsE978.tmp

1.1.3 File Blocks

所有被ASM所支援的檔案型別仍以其file block作為讀和寫的基本單位。在ASM中的檔案仍保持其原有的 Block Size 例如資料檔案預設為8k,ASM並不能影響這些東西。值得一提的是在ASM FILE NUmber 1 的FILEDIR中記錄了每一種FILE TYPE對應的BLOCK SIZE。

1.1.4 ASM後設資料

ASM的後設資料都儲存在ASM磁碟中,用以存放ASM Diskgroup控制資訊的資料,Metadata包括了該磁碟組中有哪些磁碟,多少可用的空間,其中存放的File的名字,一個檔案有哪些Extent等等資訊。

後設資料分成2類,一類是物理後設資料(Physical Metadata),一類是虛擬後設資料(Virtual Metadata)。物理後設資料儲存在磁碟的固定位置,通常在ASM磁碟頭。虛擬後設資料後者儲存在ASM檔案上,和常規的ASM File一樣在所有磁碟之間均勻分佈。事實上虛擬後設資料也是當做一個個ASM File來維護的。

所有的後設資料block均是4k大小,並且有checksum資訊來確認block是否被損壞。

1.1.5 ASM磁碟頭

一個ASM DISK的最前面4096位元組為disk header,對於ASM而言是block 0 (blkn=0)。ASM disk header描述了該ASM disk和diskgroup的屬性,通過對現有disk header的載入,ASM例項可以知道這個diskgroup的整體資訊。所以對那些會影響ASM disk header的操作要慎之又慎,同時最好定期備份disk header。

1.2物理後設資料

物理後設資料儲存在磁碟的固定位置,通常在ASM磁碟頭,其由以下組成:

wpsE979.tmp

wpsE98A.tmp

1.3邏輯後設資料

物理後設資料用於描述磁碟組的組成、空間分配等內容。而虛擬後設資料則用於記錄ASM檔案在磁碟上的分佈,虛擬後設資料也存在於ASM檔案當中,和其他ASM檔案的分佈和管理完全相同。虛擬後設資料一般包含:

wpsE98B.tmp

wpsE99C.tmp

1.4後設資料查詢

1.4.1 通過File Directory查詢

ASM的物理後設資料都儲存在AU 0和AU 1中,其他的虛擬後設資料的位置要到File Directory去查詢,該目錄記錄了所有ASM File的後設資料,每個ASM File在它裡面都有一條記錄,它記錄了每個ASM File的extent對應的disk number和au number。

File Directory的起始點儲存在磁碟0的2號AU上面。2號AU總共有256個塊。每一個塊大概4KB。第0個塊是用於檔案頭留用。從第1個塊開始記錄檔案asm file number為1的磁碟分佈資訊,而第2個塊開始記錄asm file number為2的磁碟分佈資訊。以此類推,剛好從asm file number從1-255都儲存在2號AU上面。所以File#1至少包含了2個AU,因為我們的資料庫檔案的file number是從256開始的。

想知道虛擬後設資料的分佈情況,就要先找到File#1的disk number和au number的分佈資訊,就需要讀取0號磁碟的2號AU的第一個塊。

Oracle提供了一個KFOD工具,10gR2以上都有自帶,用於列舉搜尋磁碟。我們先看看測試環境中有哪些共享磁碟:

wpsE99D.tmp

在我的測試環境中,磁碟組DATA有兩個磁碟raw3和raw4:

wpsE9AD.tmp

ASM block的檢視,Oracle提供了一個kfed工具。11g後可直接在oracle使用者下使用,而10g則需要編譯一下:

查詢File#1的AU分佈情況:

wpsE9AE.tmp

我們可以看到File#1有2個AU:

DISK 0,AU[2]

DISK 1,AU[2]

wpsE9AF.tmp

案例:查詢控制檔案的AU資訊

現在我想檢視控制檔案的AU資訊,先計算控制檔案的AU資訊在File Directory的哪個塊:

wpsE9C0.tmp

接下來我們讀取1號磁碟的2號AU的第4個塊。這個AU是從塊0來記錄256號檔案的。無需進行預留。為什麼是第4個塊?

260-255=5 預設從0號塊開始,所以第4個塊代表了260號檔案

然後我們查出包括控制檔案的AU資訊。

wpsE9C1.tmp

wpsE9D1.tmp

最後我們找一個AU來確認一下是否是控制檔案。我們用作業系統的dd命令讀取0號檔案的第834號AU資訊。

wpsE9D2.tmp

1.4.2 通過X$KFFXP查詢

通過檢視X$KFFXP可以更直觀地檢視ASM file的物理分配AU情況。該檢視主要是反映了File Extent Map的對映關係。ASM把檔案分成多個Extent,而Extent是由AU構成的。

wpsE9E3.tmp

通過X$KFFXP和v$asm_alias、v$asm_disk、v$asm_diskgroup等相連,可以方便地查詢到各個ASM File的AU分佈情況:

wpsE9F4.tmp

wpsE9F5.tmp

2ASM磁碟頭

2.1ASM磁碟頭含義

ASM disk header描述了該ASM disk和diskgroup的屬性,通過對現有disk header的載入,ASM例項可以知道這個diskgroup的整體資訊。

下面是一個典型的disk header的組成:

wpsEA05.tmp

wpsEA16.tmp

wpsEA27.tmp

下面的資訊是在同一個diskgroup中的所有disk的header上均會複製一份的:

Disk group name and creation timestamp

Physical sector size of all disks in the disk group

Allocation unit size

Metadata block size

Software version compatibility

Default redundancy

Mount timestamp

下面的資訊是每一個asm disk獨有的:

ASM disk name (not OS path name)

Disk number within disk group

Failure group name

Disk size in allocation units

2.2磁碟頭後設資料校驗

ASM磁碟頭的檢視,我們可以直接使用Oracle提供的kfed工具。

wpsEA28.tmp

但是這樣不一樣能發現後設資料有異常的情況,我們可以使用kfed find命令檢驗AU[0]所有塊的後設資料型別是否正常。如果出現非以下結果的塊,說明ASM後設資料塊有所損壞。

wpsEA38.tmp

注:以上只是檢驗後設資料塊的型別是否正常,如果後設資料塊中內容有誤,目前還是沒有辦法可以直接檢查出來。

2.3磁碟頭的備份恢復

ASM磁碟頭的重要性無庸置疑,通過觀察ASM磁碟頭各項含義後,我們發現ASM磁碟頭並不類似其他ASM File一樣經常變化修改,這使得對ASM磁碟頭的備份具體有行性。

2.3.1 11.1.0.7之前

對於10.2 到11.1.0.6的ASM,磁碟頭的備份方法就是dd或者kfed。

dd備份:

wpsEA39.tmp

dd恢復演示:

1、模擬磁碟頭損壞

wpsEA3A.tmp

此時再掛載磁碟組報錯:

wpsEA3B.tmp

2、檢查磁碟頭內容

kfed檢查ASM 磁碟頭,Kfed輸出顯示磁碟頭的資訊全部都是0,說明ASM磁碟頭被覆蓋或損壞了。

wpsEA4C.tmp

3、使用前面的dd備份恢復

wpsEA4D.tmp

4、重新掛載磁碟組

wpsEA4E.tmp

kfed備份:

wpsEA5E.tmp

kfed恢復:

wpsEA5F.tmp

注意:如果既無dd備份也無kfed備份,則只能手動修復磁碟頭,後面有詳細介紹。

2.3.2 11.1.0.7之後

從10.2.0.5、11.1.0.7、11.2之後ASM磁碟頭會自動備份到AU#1的倒數第二個block。對於AU size是1MB的DISKGROUP,每個AU包括block數量=1024KB/4KB=256個,因此備份資訊位於AU#1的第254號block(block從0號開始)。當然可以計算得到:

wpsEA60.tmp

檢視ASM磁碟頭備份資訊,備份資訊與ASM disk header資訊完全一致(blk、check除外):

wpsEA61.tmp

因此可以直接使用kfed命令修復磁碟頭。

1、模擬磁碟頭損壞

wpsEA72.tmp

此時再掛載磁碟組報錯:

wpsEA73.tmp

2、kfed修復磁碟頭

3、檢視新的磁碟頭

wpsEA74.tmp

2.4手工重構磁碟頭

針對10g和11gR1,由於ASM沒有自動備份磁碟頭。在某些磁碟維護操作時很容易誤刪除磁碟頭資料,此時就只能通過手工重構磁碟頭。

重構磁碟頭主要需要修改下列值:

kfbh.endian

kfbh.block.obj

kfdhdb.driver.provstr

kfdhdb.dsknum

kfdhdb.grptyp

kfdhdb.dskname

kfdhdb.grpname

kfdhdb.fgname

kfdhdb.crestmp.hi

kfdhdb.crestmp.lo

kfdhdb.mntstmp.hi

kfdhdb.mntstmp.lo

kfdhdb.dsksize

kfdhdb.fstlocn

kfdhdb.altlocn

kfdhdb.f1b1locn

kfdhdb.grpstmp.hi

kfdhdb.grpstmp.lo

當然還有些情況,需要具體問題具體分析,比如使用了11.2的版本的,就需要有VOTEDISK和SPFILE的那幾個引數值,上面列出來的是針對10g和11gR1。

如1.3中所介紹的,Disk Directory包含大量磁碟頭資訊,是我們手工重構磁碟頭的資料來源。而如果只是磁碟組中一塊磁碟頭損壞,則可以更加方便地參考其他正常磁碟頭的資訊。

在我的測試環境中,磁碟組DATA有兩個磁碟raw3和raw4:

wpsEA75.tmp

先暴力摧毀raw3的磁碟頭:

wpsEA86.tmp

我們先利用raw4生成一個磁碟頭,再重構成raw3的磁碟頭:

修改必要的值,與raw3的實際情況配合,以下是要修改的項。

wpsEA96.tmp

wpsEAA7.tmp

修改/tmp/raw3.head後,寫入到raw3的磁碟頭中,重新掛載磁碟組成功。

wpsEAA8.tmp

About Me

....................................................................................................................................................

本文來自於微信公眾號轉載文章,若有侵權,請聯絡小麥苗及時刪除

ITPUB BLOG:http://blog.itpub.net/26736162

QQ:642808185 若加QQ請註明您所正在讀的文章標題

【版權所有,文章允許轉載,但須以連結方式註明源地址,否則追究法律責任】

....................................................................................................................................................

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2080729/,如需轉載,請註明出處,否則將追究法律責任。

相關文章