天天看點

ASM 翻譯系列第三十五彈:ASM 253号檔案——ASM spfile

從asm版本11.2開始,asm spfile可以儲存在asm磁盤組裡。事實上,在安裝asm時,oui就已經把asm spfile放在了磁盤組中。對于單執行個體環境和叢集環境都是這樣。在安裝過程中建立的第一個磁盤組是spfile的預設位置,但這不是必要的。asm spfile還是可以放在檔案系統上,就是$oracle_home/dbs目錄下。

為支援該特性,asmcmd引入了新的指令用來備份,複制和移動asm spfile。這些指令如下:

spbackup -- 備份asm spfile為備份檔案。備份檔案并不具有特殊的檔案類型 ,也不會被識别為spfile

spcopy -- 将asm spfile從源位置複制到目标位置(不能複制spbackup出來的備份檔案)

spmove -- 将asm spfile從源位置移動到目标位置并且自動更新gpnp profile檔案

create pfile from spfile和create spfile from pfile指令對于磁盤組中的spfile仍然可用。

在我的測試環境裡,asm spfile位于data磁盤組。現在來找到它:

可以看到,asm spfile存放在一個特别的位置,它的asm檔案号為253。儲存在磁盤組中的asm spfile是作為asm的中繼資料檔案被管理,一直具有asm中繼資料檔案号253.

當然了,在sqlplus中可以看到相同的結果:

下面對asm spfile做個備份:

下面檢視備份檔案的内容:

可以看到,這就是一份asm spfile的副本,内容包含了參數和相關的comment。

是以問題來了,當磁盤組還沒mount時,asm執行個體怎麼讀取spfile來啟動呢?不僅如此,asm不知道spfile位于哪個磁盤組,甚至于都不知道是否位于磁盤組上。再者,asm執行個體也不知道asm discovery string的值是什麼。

asm admin guide文檔裡是這麼描述的:

當asm執行個體尋找初始化參數檔案(即pfile或者spfile)時,将按照如下順序:

1. 由gpnp profile指定的參數檔案位置

2. 如果gpnp profile裡沒有指定,再按照下面順序尋找:

3. 

位于asm home目錄下的spfile,(比如  $oracle_home/dbs/spfile+asm.ora)

位于asm home目錄下的pfile

這裡沒有提到和asm discovery string有關的資訊,但是至少提到了spfile和gpnp profile。asm discovery string也是位于gpnp profile裡的。下面是在exadata環境中使用gpnptool指令獲得的參數值:

在單執行個體環境中,沒有gpnp profile,這些資訊位于asm資源(ora.asm)中,儲存在olr中。 下面是一個單執行個體的例子:

到目前為止,我們知道了asm如何獲得asm磁盤和spfile的位置。但是磁盤組還沒有mount時,asm怎麼讀取spfile呢?

奧秘就在asm磁盤頭裡。為了支援spfile儲存在asm磁盤組中,磁盤頭中增加了兩個條目:

kfdhdb.spfile - asm spfile所在au号

kfdhdb.spfflg - asm spfile的标志位。如果值為1,那麼asm spfile就位于這個磁盤,au号由kfdhdb.spfile指明。

在發現磁盤的過程中,asm執行個體讀取磁盤頭,尋找spfile的相關資訊。找到儲存spfile的磁盤後,就可以讀取初始參數檔案。

下面在我的測試磁盤組data中做個示範,首先檢查磁盤組狀态和備援類型 

可以看到磁盤組是mount狀态,備援類型是normal。也就是說asm spfile會有兩副本。那麼我們會看到兩個磁盤設定了kfdhdb.spfile和kfdhdb.spfflg的值。下面驗證一下:

可以看到,确實有兩個磁盤儲存了asm spfile。下面看一下磁盤/dev/sdc1 46号au的内容:

磁盤/dev/sdc1的46号au就是我們要找的asm spfile。

除了以上兩個條目,還增加了一個新的中繼資料塊類型 - kfbtyp_asmspfals。它用來描述asm spfile别名,位于asm spfile的最後一個塊。 下面看一下46号au的最後一個塊:

這個中繼資料塊裡沒有很多資訊。大多數條目是塊頭資訊(以kfbh開頭的條目)。真正的asm spfile别名的資料(以kfspbals開頭的條目)隻有幾條。spfile file版本号是檔案名(registry.253.822856169)的一部分,塊大小為512位元組,檔案大小是3個塊。以上輸出中路徑相關條目的資訊為空,是指不存在asm spfile别名。

下面建立一個spfile别名。首先從現有的spfile建立一個pfile,然後根據該pfile建立一個spfile别名:

再次定位asm spfile會顯示兩條傳回結果:

可以看到asm spfile本身和它的别名。下面确認下spfileasm.ora是别名檔案:

下面再看下spfile别名塊的資訊:

現在可以看到别名檔案名的資訊了。由于建立了spfile,版本号也變了。

從asm 11.2開始,asm spfile可以儲存在磁盤組裡。同時為了支援該特性,新增了對應的asmcmd指令,我們也有了新的asm中繼資料結構。

<b>本文來自雲栖社群合作夥伴“dbgeek”</b>