ASM 翻譯系列第三十五彈:ASM 253號檔案——ASM spfile
原作者:Bane Radulovic
譯者: 邱大龍
稽核: 魏興華
DBGeeK社群聯合出品
原文連結:http://asmsupportguy.blogspot.sg/2014/03/asm-spfile-in-disk-group.html
ASM spfile in a disk group
從ASM版本11.2開始,ASM spfile可以儲存在ASM磁碟組裡。事實上,在安裝ASM時,OUI就已經把ASM spfile放在了磁碟組中。對於單例項環境和叢集環境都是這樣。在安裝過程中建立的第一個磁碟組是spfile的預設位置,但這不是必要的。ASM spfile還是可以放在檔案系統上,就是$ORACLE_HOME/dbs目錄下。
New ASMCMD commands
為支援該特性,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 in disk group DATA
在我的測試環境裡,ASM spfile位於DATA磁碟組。現在來找到它:
$ asmcmd find --type ASMPARAMETERFILE +DATA "*"
+DATA/ASM/ASMPARAMETERFILE/REGISTRY.253.822856169
可以看到,ASM spfile存放在一個特別的位置,它的ASM檔案號為253。儲存在磁碟組中的ASM spfile是作為ASM的後設資料檔案被管理,一直具有ASM後設資料檔案號253.
當然了,在sqlplus中可以看到相同的結果:
$ sqlplus / as sysasm
SQL> show parameter spfile
NAME TYPE VALUE
------ ------ -------------------------------------------------
spfile string +DATA/ASM/ASMPARAMETERFILE/registry.253.822856169
SQL>
下面對ASM spfile做個備份:
$ asmcmd spbackup
+DATA/ASM/ASMPARAMETERFILE/REGISTRY.253.822856169
/tmp/ASMspfile.backup
下面檢視備份檔案的內容:
$ strings /tmp/ASMspfile.backup
+ASM.__oracle_base='/u01/app/grid'#ORACLE_BASE set from in memory
value
+ASM.asm_diskgroups='RECO','ACFS'#Manual Mount
*.asm_power_limit=1
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'
可以看到,這就是一份ASM spfile的副本,內容包含了引數和相關的comment。
ASM spfile discovery
所以問題來了,當磁碟組還沒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命令獲得的引數值:
$ gpnptool getpval -p=profile.xml -asm_dis -o-
o/*/*
$ gpnptool getpval -p=profile.xml -asm_spf -o-
+DBFS_DG/spfileASM.ora
在單例項環境中,沒有GPnP profile,這些資訊位於ASM資源(ora.asm)中,儲存在OLR中。 下面是一個單例項的例子:
$ crsctl stat res ora.asm -p | egrep "ASM_DISKSTRING|SPFILE"
ASM_DISKSTRING=
SPFILE=+DATA/ASM/ASMPARAMETERFILE/registry.253.822856169
到目前為止,我們知道了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中做個演示,首先檢查磁碟組狀態和冗餘型別
$ asmcmd lsdg -g DATA | cut -c1-26 Inst_ID State Type
1 MOUNTED NORMAL
可以看到磁碟組是mount狀態,冗餘型別是normal。也就是說ASM spfile會有兩副本。那麼我們會看到兩個磁碟設定了kfdhdb.spfile和kfdhdb.spfflg的值。下面驗證一下:
$ for disk in `asmcmd lsdsk -G DATA --suppressheader`
> do
> echo $disk
> kfed read $disk | grep spf
> done
/dev/sdc1
kfdhdb.spfile: 46 ; 0x0f4: 0x0000002e
kfdhdb.spfflg: 1 ; 0x0f8: 0x00000001
/dev/sdd1
kfdhdb.spfile: 2212 ; 0x0f4: 0x000008a4
kfdhdb.spfflg: 1 ; 0x0f8: 0x00000001
/dev/sde1
kfdhdb.spfile: 0 ; 0x0f4: 0x00000000
kfdhdb.spfflg: 0 ; 0x0f8: 0x00000000
可以看到,確實有兩個磁碟儲存了ASM spfile。下面看一下磁碟/dev/sdc1 46號AU的內容:
$ dd if=/dev/sdc1 bs=1048576 skip=46 count=1 | strings
+ASM.__oracle_base='/u01/app/grid'#ORACLE_BASE set from in memory value
+ASM.asm_diskgroups='RECO','ACFS'#Manual Mount
*.asm_power_limit=1
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0352732 s, 29.7 MB/s
磁碟/dev/sdc1的46號AU就是我們要找的ASM spfile。
ASM spfile alias block
除了以上兩個條目,還增加了一個新的後設資料塊型別 - KFBTYP_ASMSPFALS。它用來描述ASM spfile別名,位於ASM spfile的最後一個塊。 下面看一下46號AU的最後一個塊:
$ kfed read /dev/sdc1 aun=46 blkn=255
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 27 ; 0x002: KFBTYP_ASMSPFALS
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 255 ; 0x004: blk=255
kfbh.block.obj: 253 ; 0x008: file=253
kfbh.check: 806373865 ; 0x00c: 0x301049e9
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfspbals.incarn: 822856169 ; 0x000: 0x310bc9e9
kfspbals.blksz: 512 ; 0x004: 0x00000200
kfspbals.size: 3 ; 0x008: 0x0003
kfspbals.path.len: 0 ; 0x00a: 0x0000
kfspbals.path.buf: ; 0x00c: length=0
這個後設資料塊裡沒有很多資訊。大多數條目是塊頭資訊(以kfbh開頭的條目)。真正的ASM spfile別名的資料(以kfspbals開頭的條目)只有幾條。spfile file版本號是檔名(REGISTRY.253.822856169)的一部分,塊大小為512位元組,檔案大小是3個塊。以上輸出中路徑相關條目的資訊為空,是指不存在ASM spfile別名。
下面建立一個spfile別名。首先從現有的spfile建立一個pfile,然後根據該pfile建立一個spfile別名:
$ sqlplus / as sysasm
SQL> create pfile='/tmp/pfile+ASM.ora' from spfile;
File created.
SQL> shutdown abort;
ASM instance shutdown
SQL> startup pfile='/tmp/pfile+ASM.ora';
ASM instance started
Total System Global Area 1135747072 bytes
Fixed Size 2297344 bytes
Variable Size 1108283904 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
SQL> create spfile='+DATA/spfileASM.ora' from
pfile='/tmp/pfile+ASM.ora';
File created.
SQL> exit
再次定位ASM spfile會顯示兩條返回結果:
$ asmcmd find --type ASMPARAMETERFILE +DATA "*"
+DATA/ASM/ASMPARAMETERFILE/REGISTRY.253.843597139
+DATA/spfileASM.ora
可以看到ASM spfile本身和它的別名。下面確認下spfileASM.ora是別名檔案:
$ asmcmd ls -l +DATA/spfileASM.ora
Type Redund Striped Time Sys Name
ASMPARAMETERFILE MIRROR COARSE MAR 30 20:00:00 N
spfileASM.ora =>
+DATA/ASM/ASMPARAMETERFILE/REGISTRY.253.843597139
下面再看下spfile別名塊的資訊:
$ kfed read /dev/sdc1 aun=46 blkn=255
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 27 ; 0x002: KFBTYP_ASMSPFALS
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 255 ; 0x004: blk=255
kfbh.block.obj: 253 ; 0x008: file=253
kfbh.check: 2065104480 ; 0x00c: 0x7b16fe60
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfspbals.incarn: 843597139 ; 0x000: 0x32484553
kfspbals.blksz: 512 ; 0x004: 0x00000200
kfspbals.size: 3 ; 0x008: 0x0003
kfspbals.path.len: 13 ; 0x00a: 0x000d
kfspbals.path.buf: spfileASM.ora ; 0x00c: length=13
現在可以看到別名檔名的資訊了。由於新建了spfile,版本號也變了。
Conclusion
從ASM 11.2開始,ASM spfile可以儲存在磁碟組裡。同時為了支援該特性,新增了對應的ASMCMD命令,我們也有了新的ASM後設資料結構。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2134410/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASM 翻譯系列第三十二彈:ASM INTERNAL Find block in ASMASMBloC
- ASM 翻譯系列第三十八彈:ASM資料清理ASM
- ASM 翻譯系列第三十一彈:瞭解ASM檔案的空間分配ASM
- ASM 翻譯系列第八彈:ASM Internal ASM file extent mapASM
- ASM 翻譯系列第十彈:ASM Internal ASM DISK headerASMHeader
- ASM 翻譯系列第三十四彈:ASM磁碟組重要屬性介紹ASM
- ASM 翻譯系列第二彈:ASM 12C 版本新特性ASM
- ASM 翻譯系列第九彈:高階知識ASM ToolboxASM
- ASM 翻譯系列第十三彈:ASM 高階知識 - Forcing the issueASM
- ASM 翻譯系列第三十九彈:物理後設資料AT表ASM
- ASM 翻譯系列第三十六彈:ACFS磁碟組的重平衡操作ASM
- ASM 翻譯系列第一彈:基礎知識 ASM AU,Extents,Mirroring 和 FailgroupsASMAI
- ASM 翻譯系列第三十三彈:REQUIRED_MIRROR_FREE_MB的含義ASMUI
- ASM Spfile Is Not Used when ASM Instance StartsASM
- RAC 11G ASM下修改spfile檔案ASM
- ASM下遷移spfileASM
- Oracle ASM spfile in a disk groupOracleASM
- 將spfile從ASM裡遷移到檔案系統ASM
- ASM 翻譯系列第四十彈:理解ASM中 REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的含義ASMUI
- 【ASM】ASM啟動無法找到spfile問題原因ASM
- ASM 翻譯系列第十一彈:高階知識 Offline or drop?ASM
- 利用RMAN將非ASM檔案移動到ASM裡 - [ASM]ASM
- Oracle ASM儲存Spfile解析OracleASM
- 【ASM學習】從ASM拷貝檔案的方法ASM
- 學習ASM技術(七)--ASM檔案轉化ASM
- ASM叢集檔案系統ACFS(ASM Cluster File System)ASM
- asm files,asm directories,asm templatesASM
- 【ASM】ASM資料檔案和OS檔案(FILESYSTEM)轉移方法總結ASM
- oracle10g asm---第三回---asmOracleASM
- Oracle:ASM & 密碼檔案OracleASM密碼
- 用RMAN遷移檔案到ASM或從ASM遷出ASM
- ASM與檔案系統之間copy資料檔案--檔案系統到ASMASM
- 11.2環境ASM例項spfile放在ASM磁碟組的訪問方式ASM
- 【ASM】ASMLIB 系列ASM
- 遷移ocr/votedisk/asm spfile所在磁碟組ASM
- ASM認證與口令檔案ASM
- ASM檔案別名的分析ASM
- ASM檔案系統遷移ASM