ASM 翻譯系列第十三彈:ASM 高階知識 - Forcing the issue

shilei1發表於2018-05-13

原作者:Bane Radulovic

譯者:    莊培培

稽核:    魏興華

DBGeeK社群聯合出品


Forcing the issueASM中有部分的命令提供了force選項,它允許管理員不以預設的行為來做某些操作。在一些操作上使用force選項是十分安全且必要的,但一些操作上去使用就可能會致使磁碟組不可用,本文會針對具體的情況做詳細說明。
Mount force在對一個磁碟組做mount操作時,如果磁碟組的磁碟成員中有磁碟不可用時,就會需要使用到force選項。這是前面所提到“十分安全且必要”的使用場景之一。假定不是太多磁碟不可用,帶force選項的mount磁碟組一般都會成功。根本上,要滿足故障磁碟的每一個具有partnership關係的盤都必須是可用的。接下來我們建立一個名稱為PLAY的normal冗餘的磁碟組,它包含了三個磁碟,如果不指定failgroup,每一個磁碟其實都是一個獨立的failgroup:SQL> create diskgroup PLAY disk '/dev/ASMPLAY01','/dev/ASMPLAY02','/dev/ASMPLAY03';Diskgroup created.之後,我們對磁碟組進行了dismount,然後刪除了路徑為/dev/ASMPLAY01磁碟。再次mount磁碟組時,ASM就會有磁碟不可用的報錯。SQL> alter diskgroup PLAY mount;alter diskgroup PLAY mount*ERROR at line 1:ORA-15032: not all alterations performedORA-15040: diskgroup is incompleteORA-15042: ASM disk "0" is missing from group number "2"因為我們只有一個磁碟不可用(normal冗餘的磁碟組),可以使用force選項來mount磁碟組。SQL> alter diskgroup PLAY mount force;Diskgroup altered.這個命令執行後,ASM會在後臺做一些清除操作,例如它會將不可用的磁碟標識為offline,最終這個磁碟會從磁碟組中drop。這些操作會被記錄在ASM的alert日誌中。SQL> alter diskgroup PLAY mount forceNOTE: cache registered group PLAY number=2 incarn=0xb71d3834NOTE: cache began mount (first) of group PLAY number=2 incarn=0xb71d3834NOTE: Assigning number (2,2) to disk (/dev/ASMPLAY03)NOTE: Assigning number (2,1) to disk (/dev/ASMPLAY02)...NOTE: process _user5733_+asm (5733) initiating offline of disk 0.3916286251 () withmask 0x7e in group 2NOTE: checking PST: grp = 2GMON checking disk modes for group 2 at 29 for pid 19, osid 5733NOTE: checking PST for grp 2 done.WARNING: Disk 0 () in group 2 mode 0x7f is now being offlined...SUCCESS: diskgroup PLAY was mountedSUCCESS: alter diskgroup PLAY mount force...WARNING: PST-initiated drop of 1 disk(s) in group 2(.3072145460))SQL> alter diskgroup PLAY drop disk PLAY_0000 force /* ASM SERVER */...NOTE: starting rebalance of group 2/0xb71d3834 (PLAY) at power 1Starting background process ARB0SUCCESS: alter diskgroup PLAY drop disk PLAY_0000 force /* ASM SERVER */ARB0 started with pid=21, OS id=5762NOTE: assigning ARB0 to group 2/0xb71d3834 (PLAY) with 1 parallel I/OSUCCESS: PST-initiated drop disk in group 2(3072145460))NOTE: F1X0 copy 1 relocating from 0:2 to 2:2 for diskgroup 2 (PLAY)NOTE: F1X0 copy 3 relocating from 2:2 to 65534:4294967294 for diskgroup 2 (PLAY)NOTE: Attempting voting file refresh on diskgroup PLAY...NOTE: stopping process ARB0SUCCESS: rebalance completed for group 2/0xb71d3834 (PLAY)...SUCCESS: grp 2 disk _DROPPED_0000_PLAY going offline非常有趣的是,我們只是做了磁碟組的force mount,從日誌中看到了ASM其實還使用force選項進行磁碟的DROP操作。後面會有關於這點的詳細說明。在叢集中,只有第一個mount該磁碟組的ASM例項,才能成功進行帶有force選項的mount操作。從ASM版本11.2.0.3開始,在Exadata和Oracle Database Appliance環境中,帶磁碟組force選項的mount行為會有一點變化:不使用force選項也能mount磁碟組,這隻要normal冗餘的磁碟組不多於一個failgroup或者high冗餘的磁碟組不多於兩個failgroup不可用。需要注意的是本節的討論僅針對normal和high冗餘的磁碟組。如果是external冗餘的磁碟組有不可用磁碟,不能使用force來將其mount。
Disk forceCREATE DISKGROUP命令沒有FORCE選項。但如果建立磁碟組時,磁碟的狀態不是CANDIDATE, PROVISIONED 或 FORMER這三者之一,需要在磁碟裝置名後面加上FORCE選項。舉例如下:SQL> create diskgroup PLAY disk'/dev/ASMPLAY01','/dev/ASMPLAY02','/dev/ASMPLAY03';create diskgroup PLAY disk '/dev/ASMPLAY01','/dev/ASMPLAY02','/dev/ASMPLAY03'*ERROR at line 1:ORA-15018: diskgroup cannot be createdORA-15033: disk '/dev/ASMPLAY01' belongs to diskgroup "PLAY"
SQL> select disk_number, path, header_status from v$asm_disk where path like'%PLAY%';DISK_NUMBER PATH HEADER_STATUS----------- ---------------- ----------------0 /dev/ASMPLAY01 MEMBER2 /dev/ASMPLAY02 FORMER1 /dev/ASMPLAY03 FORMERSQL>如果是百分百確認使用/dev/ASMPLAY01磁碟是安全的,可以在CREATE DISKGROUP語句中磁碟裝置名後面加上FORCE選項。SQL> create diskgroup PLAY disk'/dev/ASMPLAY01' FORCE,'/dev/ASMPLAY02','/dev/ASMPLAY03';Diskgroup created.再次強調。對磁碟的重用必須是百分百確認的,任何未經確認的操作都是不允許且風險極大的,這將會破壞磁碟上的內容,同時不再屬於原來的磁碟組。對ALTER DISKGROUP命令的ADD DISK操作其實遵循相同的原則,如果新增到磁碟組中的磁碟的狀態不是CANDIDATE, PROVISIONED 或 FORMER這三項之一,需要在磁碟裝置名後面加FORCE選項。這樣的操作過程是有時候是有趣且耗時的,在一臺包含168個磁碟全配置的Exadata上建立一個磁碟組,本來應該只是一個很小的操作,建立磁碟組的語句如下:create diskgroup RECOdisk 'o/*/RECO*'attribute'compatible.asm'='11.2.0.0.0','compatible.rdbms'='11.2.0.0.0','au_size'='4M','cell.smart_scan_capable'='TRUE';由於一些與本節無關的原因,Exadata的一部分磁碟的磁碟頭被標識為MEMBER,另外一部分是FORMER。所以先要拼出一份所有磁碟的完整清單,再在CREATE DISKGROUP語句中指定每塊磁碟,並確保在每一個MEMBER磁碟頭的裝置名邊上加上FORCE選項,在任意一個FORMER磁碟頭的裝置名邊上沒有(不能有,否則會報錯)FORCE選項。類似的建立語句如下:create diskgroup RECO disk'o/192.168.10.1/RECO_CD_00_exacel01','o/192.168.10.1/RECO_CD_01_exacel01','o/192.168.10.1/RECO_CD_02_exacel01','o/192.168.10.1/RECO_CD_03_exacel01','o/192.168.10.1/RECO_CD_04_exacel01' FORCE,'o/192.168.10.1/RECO_CD_05_exacel01','o/192.168.10.1/RECO_CD_06_exacel01','o/192.168.10.1/RECO_CD_07_exacel01','o/192.168.10.1/RECO_CD_08_exacel01','o/192.168.10.1/RECO_CD_09_exacel01','o/192.168.10.1/RECO_CD_10_exacel01','o/192.168.10.1/RECO_CD_11_exacel01' FORCE,'o/192.168.10.2/RECO_CD_00_exacel02','o/192.168.10.2/RECO_CD_01_exacel02','o/192.168.10.2/RECO_CD_02_exacel02','o/192.168.10.2/RECO_CD_03_exacel02' FORCE,'o/192.168.10.2/RECO_CD_04_exacel02' FORCE,'o/192.168.10.2/RECO_CD_05_exacel02','o/192.168.10.2/RECO_CD_06_exacel02','o/192.168.10.2/RECO_CD_07_exacel02' FORCE,'o/192.168.10.2/RECO_CD_08_exacel02','o/192.168.10.2/RECO_CD_09_exacel02','o/192.168.10.2/RECO_CD_10_exacel02','o/192.168.10.2/RECO_CD_11_exacel02','o/192.168.10.3/RECO_CD_00_exacel03','o/192.168.10.3/RECO_CD_01_exacel03','o/192.168.10.3/RECO_CD_02_exacel03' FORCE,'o/192.168.10.3/RECO_CD_03_exacel03',...'o/192.168.10.14/RECO_CD_11_exacel14'attribute'compatible.asm'='11.2.0.0.0','compatible.rdbms'='11.2.0.0.0','au_size'='4M','cell.smart_scan_capable'='TRUE';
Forcing disk drop在前面的ASM的Alert log中可以看到,當磁碟故障或者因某種原因不能被ASM所訪問時,ASM就會對其進行帶有Force選項的drop操作。當不帶有FORCE選項的ALTER DISKGROUP ... DROP DISK 命令執行時,ASM會把被DROP磁碟上的資料遷移磁碟組中可用的磁碟上去,然後將這塊磁碟標識為FORMER,更新PST表,最後DROP磁碟。如果ASM不能訪問這個磁碟(將被drop的),就必需使用帶有Force選項drop操作。這種情況下,ASM將會從它的Partner磁碟上複製資料。一旦冗餘級別重新恢復,就會更新PST表來說明磁碟不再是磁碟組的成員。由於ASM不能訪問這個磁碟,它就不能把磁碟標識為FORMER。譯者注:drop force選項磁碟頭不會有任何變化,也就是說如果這塊盤後面可以訪問到了,它的磁碟頭的狀態依然是member,但是之前磁碟組的PST資訊裡已經沒有這個磁碟的資訊。這塊盤後續如果要繼續新增到其它磁碟組,需要在新增磁碟時指定force選項。
Forcing disk group drop當一個系統管理員或者ASM管理員修復了導致磁碟不可用的故障後(可能是更換了某條故障的線纜),接下來該怎麼做能讓磁碟恢復online狀態?這個過程能否能自動呢? 答案同樣也是看情況。如果是Exadata或者是Oracle Database Appliance,磁碟會被自動online。其他情況是ASM管理員需要透過alter diskgroup命令將磁碟恢復為online狀態。 例如: alter diskgroup DATA online disk 'ORCL: DISK077'; 或者 alter diskgroup DATA online all;SQL> drop diskgroup PLAY force including contents;Diskgroup dropped.如果ASM偵測到磁碟組在其他位置節點上處於mount狀態(比如在叢集環境中),這個操作會失敗。譯者注:正常情況下,執行磁碟組的drop操作,磁碟組的狀態只有在執行drop操作的例項上需要為mount,其他例項都必須dismount。
Forcing disk group dismount如果磁碟組在使用當中,ASM不允許dismount磁碟組。但是可以使用force選項來對磁碟組進行dismount(即使有檔案在磁碟組中仍然處於開啟狀態),舉例如下:SQL> alter diskgroup PLAY dismount;alter diskgroup PLAY dismount*ERROR at line 1:ORA-15032: not all alterations performedORA-15027: active use of diskgroup "PLAY" precludes its dismount從報錯中可以得到,有資料庫正在使用PLAY磁碟組。SQL> select group_number, db_name, status from v$asm_client;GROUP_NUMBER DB_NAME STATUS------------ -------- ------------1 BR CONNECTED2 BR CONNECTED我們使用帶Force選項的dismount命令強行對PLAY磁碟組做dismount操作:SQL> alter diskgroup PLAY dismount force;Diskgroup altered.注意對磁碟組的強行dismount操作會導致資料庫的所有資料檔案offline,這意味著它們在下次啟動時需要進行recovery。
Undrop disksALTER DISKGROUP命令的UNDROP DISKS子句會取消本磁碟組中所有處於pending狀態的drop磁碟的操作。但是UNDROP DISKS不能被用來恢復DROP DISKGROUP語句執行後被DROP的磁碟和帶有FORCE選項drop掉的磁碟。
Command line forceforce選項在asmcmd命令列中等同於 -f 標識和XML配置檔案中的FORCE關鍵字。asmcmd命令列的一個增強功能也與本節的內容相關。asmcmd lsdsk命令加上-M標識能顯示出對所有活動的ASM例項僅部分可見的磁碟。asmcmd相關的幫助命令如下:$ asmcmd help lsdsklsdskList Oracle ASM disks.lsdsk [-kptgMI][-G diskgroup ] [--suppressheader] [ --member|--candidate] [--discovery][--statistics][pattern]lsdsk命令的-M引數解釋如下:-M -展示了對一些例項可見對另一些例項不可見的ASM磁碟,如果這些磁碟對於某個例項不可見,那麼在這些例項中就會導致mount磁碟組失敗。
Conclusion理解force選項的強大功能非常重要,在使用它時必需萬分小心,如果你對它在各個操作中的含義還不甚瞭解,那麼使用它將可能會非常危險。關於譯者莊培培,沃趣科技資料庫售前工程師,主要負責資料庫平臺架構方案設計、產品驗證測試。

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

相關文章