理解ASM(三)ASM磁碟組管理

來源:互聯網
上載者:User

㈠ ASM磁碟組管理原則


① 添加或刪除磁碟的影響


當發生添加/刪除磁碟組中磁碟的操作時,ASM能夠自動平衡

對於普通的刪除操作(無force選項),被刪除的磁碟在該上資料被有效處理前並不會立刻釋放

同樣,新增磁碟時,在重分配工作完成前,該盤也不會承擔I/O負載的工作



② ASM如何處理磁碟故障


ASM磁碟組大致有二:普通組和故障組,後者與ASM的冗餘方式有所關聯。

普通磁碟組就是標準的儲存單元,ASM可以向其可訪問的磁碟組中讀寫資料,failure磁碟組是為了提高資料的高可用性。

ASM中的磁碟冗餘策略非常簡單,概要成三類:外部冗餘、標準冗餘和高度冗餘。其中,外部冗餘和failure組無關。

如果設定了標準冗餘或者高度冗餘,那麼該磁碟組就必須要有故障組。

對於標準冗餘,ASM要求該磁碟組至少要擁有兩個failure磁碟組,即提供雙倍鏡像保護,對於同一份資料,將有主從兩份鏡像。

並且ASM通過演算法來自動確保主、從鏡像不會存在於同一份failure磁碟組,這樣就保障了就算整個failure磁碟組都損壞,資料也不會丟失。

ASM中鏡像單位不是磁碟,也不是塊,而是一種AU的單位,該單位大小預設是1M。

至於高度冗餘,它至少需要三個failure磁碟組,也就是一份AU有一主多從的鏡像,理論上將更加安全。

外部冗餘的話磁碟屬於磁碟組,內部冗餘的話,磁碟屬於磁碟組的同時,還屬於而且僅屬於某個failure磁碟組。

如果磁碟發生損壞,那麼損壞的磁碟預設自動offlice並被drop掉,不過該磁碟所在的磁碟組仍將保持MOUNT狀態。

如果該組有鏡像的話,那麼應用不會有影響,鏡像盤將自動實現接管--只要不是所有failure磁碟組都損壞掉,

否則的話,該磁碟組將自動DISMOUNT

舉個例子吧,某標準冗餘的failure組有6個盤(對應6個裸裝置),假如說此時壞了一塊盤,沒關係,操作繼續,壞了那塊會被自動dropped,

剩下的5塊盤仍然能夠負擔起正常的讀寫操作。


㈡ 磁碟組的相關操作


⑴ 添加磁碟組


文法:


<SPAN style="FONT-SIZE: 18px">CREATE DISKGROUP diskgroup_name


[ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]


[ FAILGROUP failgroup_name ]


DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ]</SPAN>



注釋:

● 首先要指定的就是磁碟組名稱(diskgroup_name);

● 指定冗餘度,有三個選擇:HIGH(高度冗餘>三路)、NORMAL(標準冗餘--雙路)和EXTERNAL(外部儲存冗餘);

● 選擇是否指定FAILGROUP(如果選擇非external則必須指定);

● 指定該磁碟組中的成員(對應的LUN),在指定成員時一般ASM能夠自動檢測出磁碟的容量,不過如果DBA基於某些方面的考慮,

希望限制ASM使用的空間的話,也可以在指定成員過程中,順便指定大小(只要指定的大小不超出磁碟實際容量),在新增成員時,

ASM也會自動檢查磁碟頭以確定該磁碟是否被加入到其它的磁碟組中,當發現該盤已加入其它磁碟組的話,你可以通過FORCE選項來強制修改該盤所屬磁碟組

例子:


<SPAN style="FONT-SIZE: 18px">idle> create diskgroup dg1 normal redundancy

2 failgroup f1 disk '/dev/raw/raw4'

3 failgroup f2 disk '/dev/raw/raw5';</SPAN>




⑵ 修改磁碟組


Ⅰ 添加磁碟



<SPAN style="FONT-SIZE: 18px">idle> alter diskgroup DATA add disk '/dev/raw/raw7' name data007;


Diskgroup altered.</SPAN>



事實上,alter diskgroup添加磁碟時,也可以使用萬用字元,比如添加所有raw_a0開頭的裝置,可執行語句如下:


<SPAN style="FONT-SIZE: 18px">Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a0*' ;</SPAN>



再比如添加raw_a5,raw_a6,raw_a7,可以執行語句如下:


<SPAN style="FONT-SIZE: 18px">Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a[567]' ;</SPAN>



不過ASM需要自動平均磁碟組中的資料,這必然需要消耗一定的時間(視資料量多少),預設情況下ALTER DISKGROUP語句並不會等待所有工作全部完成才返回控制權。

如果希望ALTER DISKGROUP陳述式完成所有工作才返回的話,可以在執行時附加REBALANCE WAIT子句,這樣該語句就會等待自動平衡的操作,直至所有操作完成才返回結果

當然在等待期間,如果你改主意了不願意繼續等待,CTRL+C中斷即可獲得控制權,而平衡的操作不受影響,會在後台繼續進行。


Ⅱ 刪除磁碟


刪除跟添加還有點兒不同,就是當刪除磁碟時,ASM發現怎麼平衡都平衡不過來時(比如剩下的磁碟空間不足以存放所有資料時),刪除操作也會失敗。

這種情況要麼先刪資料,要麼取消刪除的操作。


<SPAN style="FONT-SIZE: 18px">idle> alter diskgroup DATA drop disk data007;


Diskgroup altered.


idle> alter diskgroup data undrop disks;


Diskgroup altered.</SPAN>




只要刪除操作還沒有真正完成,任何就會被取消,否則的話,只能再通過ADD語句將該磁碟重新加入到磁碟組了



Ⅲ 修改磁碟大小


ASM 中的磁碟大小是可被擴縮的,

擴大的話,要確保該磁碟對應的裸卷確實有足夠的空間去擴大

縮小的話,要確保縮小後剩餘的空間仍以放的下當前磁碟上已存在的資料


<SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data resize disk data007 size 95m;


Diskgroup altered.</SPAN>




⑶ 手動平衡磁碟組


一般情況下ASM都會自動對其下的磁碟組進行平衡,不過ORACLE也提供了手動平衡磁碟組的方式

前面提到過磁碟組的平衡度有0到11多個層級,預設是按照ASM_POWER_LIMIT初始化參數中設定的值,

手動平衡的話,設定的平衡度可以與初始化參數中並不相同,例如,設定磁碟組平衡度為5


<SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data rebalance power 5;


Diskgroup altered.</SPAN>



DBA在執行該語句時,一定要注意該操作對IO效能的影響。

另外再次強調,上述語句將很快返回diskgroup altered的提示,但這並不表示操作真正完成,它只是反饋語句提交而已

查看磁碟背景操作,可以通過v$asm_operator視圖,或者在語句執行時增加wait子句,這樣ASM將會等到操作真正完成時,才返回提示資訊




⑷ mount/unmount 磁碟組


只有被mount的磁碟組才能被資料庫使用並執行add/drop等磁碟操作,ASM中的磁碟組預設會在ASM執行個體啟動時自動載入,當然也可以手動通過命令列語句mount/unmount磁碟組

查詢ASM執行個體中建立的磁碟組可以通過V$ASM_DISKGROUP視圖查看:


<SPAN style="FONT-SIZE: 18px">idle> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;


GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB

------------ ------ --------------------------------- ---------- ----------

1 DATA MOUNTED 701 540</SPAN>



當前兩個磁碟組均為MOUNT狀態,要將其置為UNMOUNT,執行語句如下:


<SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data dismount;


Diskgroup altered.


idle> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;


GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB

------------ ------ --------------------------------- ---------- ----------

0 DATA DISMOUNTED 0 0</SPAN>



UNMOUNT磁碟組的話務必謹慎操作,要確保UNMOUNT的磁碟組中儲存的檔案對應的資料庫當前未啟動,而且該操作也會直接導致資料庫SHUTDOWN。


<SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data dismount;


Diskgroup altered.

idle> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;


GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB

------------ ------ --------------------------------- ---------- ----------

1 DATA MOUNTED 701 540

</SPAN>





⑸ 刪除磁碟組


文法:drop diskgroup gpname

如果刪除的diskgroup非空的話,直接執行上述語句會報錯

這時候可以通過附加including contents子句,來自動刪除該磁碟組中包含的檔案

刪除磁碟組的操作會自動修改spfile中ASM_DISKGROUPS初始化參數的值(如果使用了SPFILE的話)

oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.