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


       ㈠ 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塊盤仍然能夠負擔起正常的讀寫操作。

 

       ㈡ 磁盤組的相關操作

         ⑴ 添加磁盤組

          語法:

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">CREATE DISKGROUP diskgroup_name 
  2.  
  3.   [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ] 
  4.  
  5.   [ FAILGROUP failgroup_name ] 
  6.  
  7.   DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ]</SPAN> 
CREATE DISKGROUP diskgroup_name

  [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]

  [ FAILGROUP failgroup_name ]

  DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ]

          注釋:           ● 首先要指定的就是磁盤組名稱(diskgroup_name);           ● 指定冗余度,有三個選擇:HIGH(高度冗余>三路)、NORMAL(標准冗余--雙路)和EXTERNAL(外部存儲冗余);           ● 選擇是否指定FAILGROUP(如果選擇非external則必須指定);           ● 指定該磁盤組中的成員(對應的LUN),在指定成員時一般ASM能夠自動檢測出磁盤的容量,不過如果DBA基於某些方面的考慮,              希望限制ASM使用的空間的話,也可以在指定成員過程中,順便指定大小(只要指定的大小不超出磁盤實際容量),在添加成員時,              ASM也會自動檢查磁盤頭以確定該磁盤是否被加入到其它的磁盤組中,當發現該盤已加入其它磁盤組的話,你可以通過FORCE選項來強制修改該盤所屬磁盤組

          例子:

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> create diskgroup dg1 normal redundancy 
  2.   2  failgroup f1 disk '/dev/raw/raw4'                         
  3.   3  failgroup f2 disk '/dev/raw/raw5';</SPAN> 
idle> create diskgroup dg1 normal redundancy
  2  failgroup f1 disk '/dev/raw/raw4'                        
  3  failgroup f2 disk '/dev/raw/raw5';

 

         ⑵ 修改磁盤組

            Ⅰ 添加磁盤

 

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> alter diskgroup DATA add disk '/dev/raw/raw7'name data007; 
  2.  
  3. Diskgroup altered.</SPAN> 
idle> alter diskgroup DATA add disk '/dev/raw/raw7' name data007;

Diskgroup altered.

            事實上,alter diskgroup添加磁盤時,也可以使用通配符,比如添加所有raw_a0開頭的設備,可執行語句如下:

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a0*' ;</SPAN> 
Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a0*' ;

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

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

            不過ASM需要自動平均磁盤組中的數據,這必然需要消耗一定的時間(視數據量多少),默認情況下ALTER DISKGROUP語句並不會等待所有工作全部完成才返回控制權。             如果希望ALTER DISKGROUP語句完成所有工作才返回的話,可以在執行時附加REBALANCE WAIT子句,這樣該語句就會等待自動平衡的操作,直至所有操作完成才返回結果             當然在等待期間,如果你改主意了不願意繼續等待,CTRL+C中斷即可獲得控制權,而平衡的操作不受影響,會在后台繼續進行。

 

            Ⅱ 刪除磁盤

            刪除跟添加還有點兒不同,就是當刪除磁盤時,ASM發現怎么平衡都平衡不過來時(比如剩下的磁盤空間不足以存放所有數據時),刪除操作也會失敗。             這種情況要么先刪數據,要么取消刪除的操作。

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> alter diskgroup DATA drop disk data007; 
  2.  
  3. Diskgroup altered. 
  4.  
  5. idle> alter diskgroup data undrop disks; 
  6.  
  7. Diskgroup altered.</SPAN> 
idle> alter diskgroup DATA drop disk data007;

Diskgroup altered.

idle> alter diskgroup data undrop disks;

Diskgroup altered.

 

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

                     Ⅲ 修改磁盤大小

            ASM 中的磁盤大小是可被擴縮的,             擴大的話,要確保該磁盤對應的裸卷確實有足夠的空間去擴大             縮小的話,要確保縮小后剩余的空間仍以放的下當前磁盤上已存在的數據

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data resize disk data007 size 95m; 
  2.  
  3. Diskgroup altered.</SPAN> 
idle> alter diskgroup data resize disk data007 size 95m;

Diskgroup altered.

 

          ⑶ 手動平衡磁盤組

            一般情況下ASM都會自動對其下的磁盤組進行平衡,不過ORACLE也提供了手動平衡磁盤組的方式             前面提到過磁盤組的平衡度有0到11多個級別,默認是按照ASM_POWER_LIMIT初始化參數中設置的值,             手動平衡的話,設置的平衡度可以與初始化參數中並不相同,例如,設置磁盤組平衡度為5

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data rebalance power 5; 
  2.  
  3. Diskgroup altered.</SPAN> 
idle> alter diskgroup data rebalance power 5;

Diskgroup altered.

            DBA在執行該語句時,一定要注意該操作對IO性能的影響。             另外再次強調,上述語句將很快返回diskgroup altered的提示,但這並不表示操作真正完成,它只是反饋語句提交而已             查看磁盤后台的操作,可以通過v$asm_operator視圖,或者在語句執行時增加wait子句,這樣ASM將會等到操作真正完成時,才返回提示信息                        

                      ⑷ mount/unmount 磁盤組

          只有被mount的磁盤組才能被數據庫使用並執行add/drop等磁盤操作,ASM中的磁盤組默認會在ASM實例啟動時自動加載,當然也可以手動通過命令行語句mount/unmount磁盤組           查詢ASM實例中創建的磁盤組可以通過V$ASM_DISKGROUP視圖查看:

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup; 
  2.  
  3. GROUP_NUMBER NAME   STATE                               TOTAL_MB    FREE_MB 
  4. ------------ ------ --------------------------------- ---------- ----------  
  5.            1 DATA   MOUNTED                                  701        540</SPAN> 
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

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

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data dismount; 
  2.  
  3. Diskgroup altered. 
  4.  
  5. idle> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup; 
  6.  
  7. GROUP_NUMBER NAME   STATE                               TOTAL_MB    FREE_MB 
  8. ------------ ------ --------------------------------- ---------- ----------  
  9.            0 DATA   DISMOUNTED                                 0          0</SPAN> 
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

          UNMOUNT磁盤組的話務必慎重操作,要確保UNMOUNT的磁盤組中保存的文件對應的數據庫當前未啟動,而且該操作也會直接導致數據庫SHUTDOWN。

[sql] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">idle> alter diskgroup data dismount; 
  2.  
  3. Diskgroup altered. 
  4. idle> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup; 
  5.  
  6. GROUP_NUMBER NAME   STATE                               TOTAL_MB    FREE_MB 
  7. ------------ ------ --------------------------------- ---------- ----------  
  8.            1 DATA   MOUNTED                                  701        540 
  9. </SPAN> 
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

 

 

        ⑸ 刪除磁盤組

          語法:drop diskgroup gpname           如果刪除的diskgroup非空的話,直接執行上述語句會報錯           這時候可以通過附加including contents子句,來自動刪除該磁盤組中包含的文件           刪除磁盤組的操作會自動修改spfile中ASM_DISKGROUPS初始化參數的值(如果使用了SPFILE的話)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM