Oracle ASM spfile in a disk group
從ASM 11.2開始,ASM spfile可以被儲存在ASM磁碟組中。的確,在新ASM安裝時,OUI會將ASM spfile儲存在磁碟組中。這對於Oracle Restart(單例項環境)與RAC環境是一樣的。在安裝時第一個建立的磁碟組就是儲存spfile的預設位置,但這不是必須的。spfile仍然可以儲存在檔案系統中,比如$ORACLE_HOME/dbs目錄。
ASMCMD命令的新功能
為了支援這個功能,ASMCMD增加了新的命令來備份,複製與遷移ASM spfile。這些命令是:
.spbackup:將一個ASM spfile備份到一個備份檔案中。這個備份檔案不是一種特定檔案型別並且不會被標識為一個spfile。
.spcopy:將一個ASM spfile檔案從原目錄複製到目標目錄中
.spmove:將一個ASM spfile檔案從原目錄遷移到目標目錄中並且自動更新GPnP profile。
SQL命令create pfile from spfile與create spfile from pfile對於儲存在磁碟組中的ASM spfile仍然有效。
儲存在磁碟組中的ASM spfile
在我的環境中,ASM spfile儲存在磁碟組crsdg中
[grid@jyrac1 trace]$ asmcmd find --type ASMPARAMETERFILE +CRSDG "*" +CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928747387
從上面的結果可以看到,ASM spfile儲存在特定的目錄中,並且它的ASM檔案號為253,ASM spfile以一個註冊檔案儲存在磁碟組中,並且它的ASM後設資料檔案號總是253
可以使用sqlplus來檢視
SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ spfile string +CRSDG/jyrac-cluster/asmparame terfile/REGISTRY.253.928747387
備份ASM spfile檔案
[grid@jyrac1 trace]$ asmcmd spbackup +CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928747387 /home/grid/asmspfile.backup
檢視備份ASM spfile檔案的內容
[grid@jyrac1 ~]$ strings asmspfile.backup +ASM1.__oracle_base='/u01/app/grid'#ORACLE_BASE set from in memory value +ASM2.asm_diskgroups='ARCHDG','DATADG'#Manual Dismount +ASM1.asm_diskgroups='ARCHDG','DATADG','ACFS'#Manual Mount *.asm_power_limit=1 *.diagnostic_dest='/u01/app/grid' *.instance_type='asm' *.large_pool_size=12M *.remote_login_passwordfile='EXCLUSIVE'
可以看到這是ASM spfile的一個副本,它包含了引數與相關注釋
ASM spfile查詢順序
因為ASM例項在啟動時需要讀取spfile檔案,如果spfile所在磁碟組不能mount,那麼ASM不僅不知道spfile儲存在那個磁碟組,而且也不知道ASM spfile查詢字串的值。當Oracle ASM例項搜尋一個初始化引數檔案時,它的搜尋順序為:
1.在Grid Plug and Play(GPnp) profile中指定的初始化引數檔案目錄
2.如果在GPnP profile中沒有指定,那麼搜尋順序將變為:
2.1.Oracle ASM例項home目錄中的spfile(比如:$ORACLE_HOME/dbs/spfile+ASM.ora)
2.2.Oracle ASM例項home目錄中的pfile
這裡並沒有告訴關於ASM查詢順序字串的任何資訊,但至少告訴我們了spfile與GPnp profile。下面是來自Exadata環境中的值:
[root@jyrac2 ~]# find / -name profile.xml /u01/app/product/11.2.0/crs/gpnp/jyrac2/profiles/peer/profile.xml /u01/app/product/11.2.0/crs/gpnp/profiles/peer/profile.xml [grid@jyrac2 peer]$ gpnptool getpval -p=profile.xml -? Oracle GPnP Tool getpval Get value(s) from GPnP Profile Usage: "gpnptool getpval ", where switches are: -prf Profile Tag: , optional -[id:]prf_cn Profile Tag: ">, optional -[id:]prf_pa Profile Tag: ">, optional -[id:]prf_sq Profile Tag: ">, optional -[id:]prf_cid Profile Tag: ">, optional -[pid:]nets Profile Tag: children of , optional -[pid:]haip Profile Tag: children of , optional -[id:]haip_ma Profile Tag: ">, optional -[id:]haip_bm Profile Tag: ">, optional -[id:]haip_s Profile Tag: ">, optional -[pid:]hnet Profile Tag: children of , optional -[id:]hnet_nm Profile Tag: ">, optional -[pid:]net Profile Tag: children of , optional -[id:]net_ip Profile Tag: ">, optional -[id:]net_use Profile Tag: ">, optional -[id:]net_nt Profile Tag: ">, optional -[id:]net_aip Profile Tag: ">, optional -[id:]net_ada Profile Tag: ">, optional -[pid:]asm Profile Tag: children of , optional -[id:]asm_dis Profile Tag: ">, optional -[id:]asm_spf Profile Tag: ">, optional -[id:]asm_uid Profile Tag: ">, optional -[pid:]css Profile Tag: children of , optional -[id:]css_dis Profile Tag: ">, optional -[id:]css_ld Profile Tag: ">, optional -[id:]css_cin Profile Tag: ">, optional -[id:]css_cuv Profile Tag: ">, optional -[pid:]ocr Profile Tag: children of , optional -[id:]ocr_oid Profile Tag: ">, optional -rmws Remove whitespace from xml, optional -fmt[=0,2] Format profile. Value is ident level,step, optional -p[=profile.xml] GPnP profile name -o[=gpnptool.out] Output result to a file, optional -o- Output result to stdout -ovr Overwrite output file, if exists, optional -t[=3] Trace level (min..max=0..7), optional -f= Command file name, optional -? Print verb help and exit [grid@jyrac2 peer]$ gpnptool getpval -p=profile.xml -asm_dis -o- [grid@jyrac2 peer]$ gpnptool getpval -p=profile.xml -asm_spf -o- +CRSDG/jyrac-cluster/asmparameterfile/spfileasm.ora
在單例項環境中沒有GPnP profile,因此為了支援在磁碟組中儲存ASM spfile
[grid@jyrac1 ~]$ crsctl stat res ora.asm -p | egrep "ASM_DISKSTRING|SPFILE" ASM_DISKSTRING= SPFILE=+DATA/ASM/ASMPARAMETERFILE/registry.253.822856169
現在知道ASM在什麼目錄查詢ASM磁碟與spfile。但磁碟組不能被mount,ASM例項沒有啟動時,ASM如何讀取spfile呢,答案就在ASM磁碟頭中。為了支援在磁碟組中儲存ASM spfile,在ASM磁碟頭中增加了兩個欄位:
.kfdhdb.spfile:ASM spfile的AU號
.kfdhdb.spfflg:ASM spfile標記,如果為1,ASM spfile將儲存在kfdhdb.spfile所指示的AU中。
作為磁碟發現操作的一部分,ASM例項將讀取磁碟頭並查詢spfile資訊。一旦它查詢到磁碟儲存了spfile,它將可以讀取真實的初始化引數。
下面先來檢查我環境中的磁碟組CRSDG的狀態與冗餘型別
[grid@jyrac1 ~]$ asmcmd lsdg -g CRSDG | cut -c1-26 Inst_ID State Type 1 MOUNTED EXTERN 2 MOUNTED EXTERN
磁碟組CRSDG被mount並且磁碟組為外部冗餘。這意味著ASM spfile不會有映象副本,因此我們只能看到一個磁碟有kfdhdb.spfile與fkdhdb.spfflg欄位。例如:
[grid@jyrac1 ~]$ asmcmd lsdsk -G CRSDG --suppressheader /dev/raw/raw1 /dev/raw/raw8 [grid@jyrac1 ~]$ kfed read /dev/raw/raw1 | grep spf kfdhdb.spfile: 0 ; 0x0f4: 0x00000000 kfdhdb.spfflg: 0 ; 0x0f8: 0x00000000 [grid@jyrac1 ~]$ kfed read /dev/raw/raw8 | grep spf kfdhdb.spfile: 30 ; 0x0f4: 0x0000001e kfdhdb.spfflg: 1 ; 0x0f8: 0x00000001 SQL> select group_number,disk_number, name,path from v$asm_disk where group_number=2; GROUP_NUMBER DISK_NUMBER NAME PATH ------------ ----------- ------------------------------------------------------------ -------------------------------------------------- 2 1 CRSDG_0001 /dev/raw/raw8 2 0 CRSDG_0000 /dev/raw/raw1
可以看到只有一個磁碟上儲存了ASM spfile檔案
使用kfed工具來檢視磁碟/dev/raw/raw8上的30號AU所儲存的內容
[grid@jyrac1 ~]$ dd if=/dev/raw/raw8 bs=1048576 skip=30 count=1 | strings +ASM1.__oracle_base='/u01/app/grid'#ORACLE_BASE set from in memory value +ASM2.asm_diskgroups='ARCHDG','DATADG'#Manual Dismount +ASM1.asm_diskgroups='ARCHDG','DATADG','ACFS'#Manual Mount *.asm_power_limit=1 *.diagnostic_dest='/u01/app/grid' *.instance_type='asm' *.large_pool_size=12M *.remote_login_passwordfile='EXCLUSIVE' 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.035288 seconds, 29.7 MB/s KeMQ jyrac-cluster/asmparameterfile/spfileasm.ora
磁碟/dev/raw/raw8上的30號AU的確是儲存的ASM spfile內容
ASM spfile別名塊
新的ASM磁碟頭有一個額外的欄位,它的後設資料塊型別為KFBTYP_ASMSPFALS,它用來描述ASM spfile別名。ASM spfile別名儲存在ASM spfile所在AU的最後一個塊中。下面來檢視磁碟/dev/raw/raw8上的30號AU的最一個塊255:
[grid@jyrac1 ~]$ kfed read /dev/raw/raw8 aun=30 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: 1364026699 ; 0x00c: 0x514d654b kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfspbals.incarn: 928747387 ; 0x000: 0x375b8f7b kfspbals.blksz: 512 ; 0x004: 0x00000200 kfspbals.size: 3 ; 0x008: 0x0003 kfspbals.path.len: 44 ; 0x00a: 0x002c kfspbals.path.buf: ; 0x00c: length=0
這個後設資料塊不大,大多數的條目都是塊頭資訊(欄位kfbh.*)。實際上ASM spfile別名資料(欄位kfspbals.*)只有幾個條目。spfile檔案的incarnation為928747387是檔名(REGISTRY.253.928747387)的一部分,ASM spfile的塊大小512 bytes並且檔案大小為3個塊。path資訊為空,意味著沒有真實的ASM spfile別名。
下面將建立ASM spfile別名,先使用現有的spfile來建立pfile,再使用pfile來建立spfile別名:
[grid@jyrac1 ~]$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='+CRSDG/jyrac-cluster/asmparameterfile/spfileasm.ora' from pfile='/tmp/pfile+ASM.ora'; File created. SQL> exit
再次使用asmcmd檢視ASM spfile將會發現存在兩個條目
[grid@jyrac1 trace]$ asmcmd find --type ASMPARAMETERFILE +CRSDG "*" +CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928747387 +CRSDG/jyrac-cluster/asmparameterfile/spfileasm.ora
現在可以看到ASM spfile本身(REGISTRY.253.928747387)與它的別名或連結檔案(spfileasm.ora)。檢視spfileasm.ora可以看到它確實是註冊檔案(REGISTRY.253.928747387)的別名
[grid@jyrac1 ~]$ asmcmd ls -l +CRSDG/jyrac-cluster/asmparameterfile/ Type Redund Striped Time Sys Name ASMPARAMETERFILE UNPROT COARSE JAN 12 16:00:00 Y REGISTRY.253.928745345 N spfileasm.ora => +CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928745345
下面再次檢視磁碟/dev/raw/raw8上的30號AU的最一個塊255:
[grid@jyrac1 ~]$ kfed read /dev/raw/raw8 aun=30 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: 1364026699 ; 0x00c: 0x514d654b kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfspbals.incarn: 928745345 ; 0x000: 0x375b8f7b kfspbals.blksz: 512 ; 0x004: 0x00000200 kfspbals.size: 3 ; 0x008: 0x0003 kfspbals.path.len: 44 ; 0x00a: 0x002c kfspbals.path.buf:jyrac-cluster/asmparameterfile/spfileasm.ora ; 0x00c: length=44
現在可以看到別名檔名出現在ASM spfile別名塊中。並且出現了新的incarnation號來表示新的ASM spfile檔案的建立時間。
小結:
從ASM 11.2開始,ASM spfile可以被儲存在ASM磁碟組中。為了支援這個功能,ASMCMD增加了相關命令來進行管理,並且在ASM磁碟頭中增加了新的ASM後設資料結構。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2132472/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- How to move ASM spfile to a different disk group [ID 1082943.1]ASM
- Oracle ASM ACFS disk group rebalanceOracleASM
- Oracle ASM Disk Group AttributesOracleASM
- 移動ASM的spfile到一個新的disk groupASM
- ASM Disk Group TemplateASM
- ASM disk group mount fails with ORA-15036ASMAI
- Oracle ASM Disk DirectoryOracleASM
- Oracle ASM Disk PartnerOracleASM
- ORA-15260: permission denied on ASM disk groupASM
- Oracle ASM儲存Spfile解析OracleASM
- Oracle ASM Disk HeaderOracleASMHeader
- ASM disk group mount fails with ORA-15036: disk is truncated [ID 1077175.1]ASMAI
- Oracle ASM Disk Used Space DirectoryOracleASM
- drop asm disk、撤銷drop asm diskASM
- [Oracle Script] ASM Disk Groups UsedOracleASM
- Oracle ASM User Directory and Group DirectoryOracleASM
- 規劃ASM DISK GROUP、檢視asm 磁碟當前狀態、mount or dismount 磁碟組ASM
- 手工建立ASM Disk Groups、為 ASM Disk Groups 新增 diskASM
- Oracle ASM disk誤被格式化OracleASM
- Asm disk managerASM
- ASM DISK Group載入ORA-15183錯誤一例ASM
- ASM下遷移spfileASM
- ASM Spfile Is Not Used when ASM Instance StartsASM
- oracle10g_asm_v$asm_disk之header_statusOracleASMHeader
- ASM: Device is already labeled for ASM diskASMdev
- Oracle 使用BBED 檢視 ASM Disk Header 內容OracleASMHeader
- 【ASM】ASM啟動無法找到spfile問題原因ASM
- ASM DISK HEADER CORRUPTION & REPAIRASMHeaderAI
- ASM Normal需要3個disk ?ASMORM
- asm disk 的結構(1)ASM
- oracleasm createdisk ASM: Device is already labeled for ASM diskOracleASMdev
- Oracle ASM (10) - ASM中優先讀failure group配置ASM_PREFERRED_READ_FAILURE_GROUPSOracleASMAI
- Oracle ASM (11) - ASM中優先讀failure group配置ASM_PREFERRED_READ_FAILURE_GROUPSOracleASMAI
- ASM 翻譯系列第十彈:ASM Internal ASM DISK headerASMHeader
- Oracle Spfile and pfileOracle
- oracle crs voting disk損壞一例(asm+rac)OracleASM
- Using ASMLIB Management ASM DiskASM
- ASM磁碟組刪除DISK操作ASM