ASM中有部分的命令提供了force選項(xiàng),它允許管理員不以默認(rèn)的行為來做某些操作。在一些操作上使用force選項(xiàng)是十分安全且必要的,但一些操作上去使用就可能會(huì)致使磁盤組不可用,本文會(huì)針對(duì)具體的情況做詳細(xì)說明。
在對(duì)一個(gè)磁盤組做mount操作時(shí),如果磁盤組的磁盤成員中有磁盤不可用時(shí),就會(huì)需要使用到force選項(xiàng)。這是前面所提到“十分安全且必要”的使用場(chǎng)景之一。假定不是太多磁盤不可用,帶force選項(xiàng)的mount磁盤組一般都會(huì)成功。根本上,要滿足故障磁盤的每一個(gè)具有partnership關(guān)系的盤都必須是可用的。
接下來我們創(chuàng)建一個(gè)名稱為PLAY的normal冗余的磁盤組,它包含了三個(gè)磁盤,如果不指定failgroup,每一個(gè)磁盤其實(shí)都是一個(gè)獨(dú)立的failgroup:
SQL> create diskgroup PLAY disk '/dev/ASMPLAY01','/dev/ASMPLAY02','/dev/ASMPLAY03';
Diskgroup created.
之后,我們對(duì)磁盤組進(jìn)行了dismount,然后刪除了路徑為/dev/ASMPLAY01的磁盤。再次mount磁盤組時(shí),ASM就會(huì)有磁盤不可用的報(bào)錯(cuò)。
SQL> alter diskgroup PLAY mount;
alter diskgroup PLAY mount
* ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15040: diskgroup is incomplete
ORA-15042: ASM disk "0" is missing from group number "2"
因?yàn)槲覀冎挥幸粋€(gè)磁盤不可用(normal冗余的磁盤組),可以使用force選項(xiàng)來mount磁盤組。
SQL> alter diskgroup PLAY mount force;
Diskgroup altered.
這個(gè)命令執(zhí)行后,ASM會(huì)在后臺(tái)做一些清除操作,例如它會(huì)將不可用的磁盤標(biāo)識(shí)為offline,終這個(gè)磁盤會(huì)從磁盤組中drop。這些操作會(huì)被記錄在ASM的alert日志中。
SQL> alter diskgroup PLAY mount force NOTE: cache registered group PLAY number=2 incarn=0xb71d3834 NOTE: cache began mount (first) of group PLAY number=2 incarn=0xb71d3834 NOTE: 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 () with
mask 0x7e in group 2 NOTE: checking PST: grp = 2
GMON checking disk modes for group 2 at 29 for pid 19, osid 5733 NOTE: checking PST for grp 2 done. WARNING: Disk 0 () in group 2 mode 0x7f is now being offlined ... SUCCESS: diskgroup PLAY was mounted
SUCCESS: 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 1
Starting background process ARB0
SUCCESS: alter diskgroup PLAY drop disk PLAY_0000 force /* ASM SERVER */
ARB0 started with pid=21, OS id=5762
NOTE: assigning ARB0 to group 2/0xb71d3834 (PLAY) with 1 parallel I/O
SUCCESS: 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 ARB0
SUCCESS: rebalance completed for group 2/0xb71d3834 (PLAY)
...
SUCCESS: grp 2 disk _DROPPED_0000_PLAY going offline
非常有趣的是,我們只是做了磁盤組的force mount,從日志中看到了ASM其實(shí)還使用force選項(xiàng)進(jìn)行磁盤的DROP操作。后面會(huì)有關(guān)于這點(diǎn)的詳細(xì)說明。
在集群中,只有個(gè)mount該磁盤組的ASM實(shí)例,才能成功進(jìn)行帶有force選項(xiàng)的mount操作。
從ASM版本11.2.0.3開始,在Exadata和Oracle Database Appliance環(huán)境中,帶磁盤組force選項(xiàng)的mount行為會(huì)有一點(diǎn)變化:不使用force選項(xiàng)也能mount磁盤組,這只要normal冗余的磁盤組不多于一個(gè)failgroup或者h(yuǎn)igh冗余的磁盤組不多于兩個(gè)failgroup不可用。
需要注意的是本節(jié)的討論僅針對(duì)normal和high冗余的磁盤組。如果是external冗余的磁盤組有不可用磁盤,不能使用force來將其mount。
CREATE DISKGROUP命令沒有FORCE選項(xiàng)。但如果創(chuàng)建磁盤組時(shí),磁盤的狀態(tài)不是CANDIDATE, PROVISIONED 或 FORMER這三者之一,需要在磁盤設(shè)備名后面加上FORCE選項(xiàng)。舉例如下:
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 created
ORA-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 MEMBER 2 /dev/ASMPLAY02 FORMER 1 /dev/ASMPLAY03 FORMER
SQL>
如果是百分百確認(rèn)使用/dev/ASMPLAY01磁盤是安全的,可以在CREATE DISKGROUP語句中磁盤設(shè)備名后面加上FORCE選項(xiàng)。
SQL> create diskgroup PLAY disk '/dev/ASMPLAY01' FORCE, '/dev/ASMPLAY02', '/dev/ASMPLAY03';
Diskgroup created.
再次強(qiáng)調(diào)。對(duì)磁盤的重用必須是百分百確認(rèn)的,任何未經(jīng)確認(rèn)的操作都是不允許且風(fēng)險(xiǎn)極大的,這將會(huì)破壞磁盤上的內(nèi)容,同時(shí)不再屬于原來的磁盤組。
對(duì)ALTER DISKGROUP命令的ADD DISK操作其實(shí)遵循相同的原則,如果添加到磁盤組中的磁盤的狀態(tài)不是CANDIDATE, PROVISIONED 或 FORMER這三項(xiàng)之一,需要在磁盤設(shè)備名后面加FORCE選項(xiàng)。
這樣的操作過程是有時(shí)候是有趣且耗時(shí)的,在一臺(tái)包含168個(gè)磁盤全配置的Exadata上創(chuàng)建一個(gè)磁盤組,本來應(yīng)該只是一個(gè)很小的操作,創(chuàng)建磁盤組的語句如下:
create diskgroup RECO
disk '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';
由于一些與本節(jié)無關(guān)的原因,Exadata的一部分磁盤的磁盤頭被標(biāo)識(shí)為MEMBER,另外一部分是FORMER。所以先要拼出一份所有磁盤的完整清單,再在CREATE DISKGROUP語句中指定每塊磁盤,并確保在每一個(gè)MEMBER磁盤頭的設(shè)備名邊上加上FORCE選項(xiàng),在任意一個(gè)FORMER磁盤頭的設(shè)備名邊上沒有(不能有,否則會(huì)報(bào)錯(cuò))FORCE選項(xiàng)。類似的創(chuàng)建語句如下:
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';
在前面的ASM的Alert log中可以看到,當(dāng)磁盤故障或者因某種原因不能被ASM所訪問時(shí),ASM就會(huì)對(duì)其進(jìn)行帶有Force選項(xiàng)的drop操作。當(dāng)不帶有FORCE選項(xiàng)的ALTER DISKGROUP … DROP DISK 命令執(zhí)行時(shí),ASM會(huì)把被DROP磁盤上的數(shù)據(jù)遷移磁盤組中可用的磁盤上去,然后將這塊磁盤標(biāo)識(shí)為FORMER,更新PST表,后DROP磁盤。
如果ASM不能訪問這個(gè)磁盤(將被drop的),就必須使用帶有Force選項(xiàng)drop操作。這種情況下,ASM將會(huì)從它的Partner磁盤上拷貝數(shù)據(jù)。一旦冗余級(jí)別重新恢復(fù),就會(huì)更新PST表來說明磁盤不再是磁盤組的成員。由于ASM不能訪問這個(gè)磁盤,它就不能把磁盤標(biāo)識(shí)為FORMER。
譯者注:drop force選項(xiàng)磁盤頭不會(huì)有任何變化,也就是說如果這塊盤后面可以訪問到了,它的磁盤頭的狀態(tài)依然是member,但是之前磁盤組的PST信息里已經(jīng)沒有這個(gè)磁盤的信息。這塊盤后續(xù)如果要繼續(xù)添加到其它磁盤組,需要在添加磁盤時(shí)指定force選項(xiàng)。
對(duì)于ASM來說,如果要drop一個(gè)磁盤組,需要它處于mount狀態(tài)。如果磁盤組由于某些原因不能mount起來,但是必須drop,可以通過帶Force選項(xiàng)的DROP DISKGROUP命令,命令如下:
SQL> drop diskgroup PLAY force including contents;
Diskgroup dropped.
如果ASM偵測(cè)到磁盤組在其他位置節(jié)點(diǎn)上處于mount狀態(tài)(比如在集群環(huán)境中),這個(gè)操作會(huì)失敗。
譯者注:正常情況下,執(zhí)行磁盤組的drop操作,磁盤組的狀態(tài)只有在執(zhí)行drop操作的實(shí)例上需要為mount,其他實(shí)例都必須dismount。
如果磁盤組在使用當(dāng)中,ASM不允許dismount磁盤組。但是可以使用force選項(xiàng)來對(duì)磁盤組進(jìn)行dismount(即使有文件在磁盤組中仍然處于打開狀態(tài)),舉例如下:
SQL> alter diskgroup PLAY dismount;
alter diskgroup PLAY dismount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15027: active use of diskgroup "PLAY" precludes its dismount
從報(bào)錯(cuò)中可以得到,有數(shù)據(jù)庫正在使用PLAY磁盤組。
SQL> select group_number, db_name, status from v$asm_client; GROUP_NUMBER DB_NAME STATUS ------------ -------- ------------ 1 BR CONNECTED 2 BR CONNECTED
我們使用帶Force選項(xiàng)的dismount命令強(qiáng)行對(duì)PLAY磁盤組做dismount操作:
SQL> alter diskgroup PLAY dismount force;
Diskgroup altered.
注意對(duì)磁盤組的強(qiáng)行dismount操作會(huì)導(dǎo)致數(shù)據(jù)庫的所有數(shù)據(jù)文件offline,這意味著它們?cè)谙麓螁?dòng)時(shí)需要進(jìn)行recovery。
ALTER DISKGROUP命令的UNDROP DISKS子句會(huì)取消本磁盤組中所有處于pending狀態(tài)的drop磁盤的操作。但是UNDROP DISKS不能被用來恢復(fù)DROP DISKGROUP語句執(zhí)行后被DROP的磁盤和帶有FORCE選項(xiàng)drop掉的磁盤。
force選項(xiàng)在asmcmd命令行中等同于 -f 標(biāo)識(shí)和XML配置文件中的FORCE關(guān)鍵字。
asmcmd命令行的一個(gè)增強(qiáng)功能也與本節(jié)的內(nèi)容相關(guān)。asmcmd lsdsk命令加上-M標(biāo)識(shí)能顯示出對(duì)所有活動(dòng)的ASM實(shí)例僅部分可見的磁盤。asmcmd相關(guān)的幫助命令如下:
$ asmcmd help lsdsk
lsdsk
List Oracle ASM disks.
lsdsk [-kptgMI][-G diskgroup ] [--suppressheader] [ --member|--candidate] [--discovery][--statistics][pattern]
lsdsk命令的-M參數(shù)解釋如下:
-M -展示了對(duì)一些實(shí)例可見對(duì)另一些實(shí)例不可見的ASM磁盤,如果這些磁盤對(duì)于某個(gè)實(shí)例不可見,那么在這些實(shí)例中就會(huì)導(dǎo)致mount磁盤組失敗。
理解force選項(xiàng)的強(qiáng)大功能非常重要,在使用它時(shí)必須萬分小心,如果你對(duì)它在各個(gè)操作中的含義還不甚了解,那么使用它將可能會(huì)非常危險(xiǎn)。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。