ASM Disk Discovery 最佳實踐
ASM DISK 的Discovery PATH
ASM例項的ASM_DISKSTRING初始化引數使用一個逗號分割的字串限制ASM例項發現的DISK可以用於ASM DISK, 該字串支援萬用字元如使用星號(*)表示LIKE,只有匹配了該字串中的路徑,ASM disk才會被發現;同樣支援如果問號(?)為該字串的第一個字元時,像sqlplus中一樣表示的是ORACLE_HOME的路徑。注意同一DISK不會因為路徑多次匹配而顯示多次。
ASM_DISKSTRING的格式依賴於使用的是ASM library還是作業系統路徑,如使用了ASM library,在安裝和配置時asm_diskstring只需要配置ASM路徑如ORCL:*路徑即可,不要再配置ASMLIB中指定的對映前的DISK的路徑如/dev/oracleasm/asmdisk*, 如果配置了會導致在v$asm_disk顯示2種類型的路徑,可以使用ASMCMD> dsget 檢視,並使用ASMCMD> dsset –profile ‘ORCL:*’修正GPNPprofile中的配置。
ASM_DISKSTRING的預設值是NULL,NULL值表示ORACLE ASM會查詢當前系統中預設路徑中可以讀寫訪問的所有磁碟。預設的路徑是平臺中指定的,依賴於作業系統,已知如下:
----------------------------------------------------------| |Platform |Discovery Path | ----------------------------------------------------------- |AIX |/dev/rhdisk* | ----------------------------------------------------------- |HP-UX |/dev/rdisk/* | ----------------------------------------------------------- |Solaris |/dev/rdsk/* | ----------------------------------------------------------- |WINDOWS |\\.\ORCLDISK* | ----------------------------------------------------------- |Linux |/dev/raw/* | ----------------------------------------------------------- |On Linux if using ASMLib Kernel Driver| ORCL:* | ----------------------------------------------------------|
除非同一個ASM instance叢集中的每個ASM例項Node都能通過自己的ASM_DISKSTRING發現,否則磁碟將不可用。 在同一ASM叢集中所有節點的磁碟名不一定非要相同,但是必須都要被發現,因為ASM DG資訊在DISK的磁碟頭中, 可以動態的改變ASM_DISKSTRING引數增加新儲存。
如何發現ASM DISK?
當ASM 例項啟動時,會掃描並稽核在引數ASM_DISKSTRING指定的路徑中的所有磁碟,是的,所有。除了在例項啟動時還有如下情況同樣也會發生讀取ASM_DISKSTRING查詢磁碟:
* MOUNT一個ASM磁碟組時
* online一個ASM磁碟組中的磁碟時
* 建立一個ASM磁碟組時
* 增加一個ASM 磁碟到到ASM磁碟組時
* resize 一個asm 磁碟大小時
* 查詢 v$asm_diskgroup 或者 v$asm_disk檢視時
注: 以上行為不限於SQL或asmcmd或EM ,GC,CC等其它等同工具。
當ASM instance成功發現了ASM DISK後,會出現在V$ASM_DISK檢視中,同時在DISK盤頭上會記錄磁碟的狀態資訊,可以在檢視中或使用kfed檢視磁碟的狀態(kfdhdb.hdrsts)。
|——————————————————————————|
|狀態 |描述 |
——————————————————————————–
|MEMBER |屬於當前diskgroup的disk |
——————————————————————————–
|FORMER |這個disk以前屬於一個diskgroup,現在這個diskgroup被刪除了 |
——————————————————————————–
|CANDIDATE |當使用裸裝置,一個新的可以被diskgroup所用的disk |
——————————————————————————–
|PROVISIONED |特定平臺的功能提供的可用asmdisk,如WIN asmtool或LINUX asmlib |
——————————————————————————-|
ASM DISK發現的規則
* asm 最多可以發現1萬個asm disk(10G,11g,12c R1),如果ASM disk超過了1萬個,也是隻顯示前1萬個。
* asm 只會發現磁碟分割槽,不會發現包含分割槽表中的分割槽
* 對於ASM DISK狀態為condidate,provisioned,former的DISK不用force選項加入DISKGROUP, 而對於foreign狀態只能使用force選項填加。
* 對於member狀態的disk,如果不屬於當前的任何mount的diskgroup,可以使用force強制填加。
* 同一個磁碟不要顯示多個路徑,如使用多路徑軟體時只顯示偽路徑。
* 如果使用了copy disk,可能會導致多個asm disk同一個磁碟頭,填加時會失敗
對於ASM的限制請檢視#370921.1 ASM – Scalability and Limits
提升ASM DISK發現的時間
ASM的asm_diskstring引數是依賴作業系統值,用於限制ORACLE ASM查詢ASM磁碟的路徑集。當一個磁碟被加進DISKGROUP時, 每個ASM例項mounted的diskgroup中的磁碟路徑必須匹配自己例項中的asm_diskstring路徑。 多數情況時使用asm_diskstring預設的值足夠, 但是使用更嚴格的值可能會減少oracle asm掃描磁碟時不必要的時間。提升asm diskgroup mount時間或add disk時的時間。 預設的asm_diskstring值(NULL)可能不會發現所有的磁碟, 比如如果使用了ASMLIB或第三方的多路徑軟體時, 必須使用asm_diskstring;
在ORACLE ASM 10gR1時查詢v$asm_disk和v$asm_diskgroup是一個排它操作,因為每一次執行都要執行disk discovery.為了減少開銷,允許輕量級的訪問資料集,ORACLE ASM 10g R2及以後引入了新的檢視,v$asm_disk_stat 和v$asm_diskgroup_stat,查詢這兩個檢視資料來源記憶體並且不需要執行disk discovery. 所以在OEM中也通常使用該檢視。
刪除asm disk並且不想在v$asm_disk中看到,可以在drop diskgroup或drop disk後修改該disk的owner和許可權禁止ASM訪問,如果刪除asm_diskstring中的部分disk也可以動態的修改asm_diskstring引數。
Reference Esteban D. Bernal [improving oracle asm discovery time best practices]