全面學習和應用ORACLE ASM特性--(3)新增和修改asm磁碟組

kingsql發表於2015-08-05

2.1 新增磁碟組

  DBCA 中建立磁碟組想必大家都很熟悉了,對,不過是點兩下滑鼠,SQL*PLUS下操作也很簡單,主要是使用CREATE DISKGROUP語句,該語句的語法如下:

    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選項來強制修改該盤所屬磁碟組。

2.2 修改磁碟組

  事物總是在變化中前進,這是事物的一般規律,磁碟組也不例外,在其建立完之後,保不齊什麼時候可能就需要加或刪個磁碟,或者修改某個盤的大小(如果還有機會改的話)。這時候你就需要ALTER DISKGROUP語句了,ALTER DISKGROUP語句的語法太簡單(靈活)了,因此這裡三思就不列了,後面透過幾個實際應用的示例來說明其語法規則。

  ASM 最好的一點就是,不管你是加還是刪磁碟組中的磁碟,它都能自動進行平衡,確保該磁碟組中每塊盤儲存的資料量平均,以實現最最佳化的IO效能,並且這一過程不會對資料造成影響

2.2.1  新增磁碟

  比如,新增一個磁碟到磁碟組asmdisk1,語句如下:

    SQL> Alter diskgroup asmdisk2 add disk '/dev/raw/raw7' name asmdisk2_0002;

    Diskgroup altered.

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

    Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a0*' ;

  再比如新增raw_a5,raw_a6,raw_a7,可以執行語句如下:

    Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a[567]' ;

  總之非常靈活,大家可以根據實際情況自行嘗試以簡化操作。這也屬於最佳化著幹活的範疇嘛。

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

  要監控後臺進行的操作,可以透過V$ASM_OPERATION檢視查詢。

  如果希望ALTER DISKGROUP語句完成所有工作才返回的話,可以在執行時附加REBALANCE WAIT子句,這樣該語句就會等待自動平衡的操作,直接所有操作完成才返回結果,當然在等待期間,如果你改主意了不願意繼續等待,CTRL+C中斷即可獲得控制權,而平衡的操作不受影響,會在後臺繼續進行。

2.2.2  刪除磁碟

  雖然刪除磁碟也涉及到資料庫的重新平衡,因此刪除跟新增還有點兒不同,就是當刪除磁碟時,當ASM發現怎麼平衡都平衡不過來時(比如剩下的磁碟空間不足以存放所有資料時),刪除操作也會失敗。這種情況要麼先刪資料,要麼取消刪除的操作。

  簡單舉個例子,比如說刪除asmdisk2磁碟組中的asmdisk2_0001磁碟,操作如下:

    SQL> alter diskgroup asmdisk2 drop disk asmdisk2_0001;

    Diskgroup altered.

  不知道算不算是優點,由於前面提到的ASM自動平衡的特性,上述語句返回後並不代表磁碟已經被刪除,此時後臺可能由於正忙碌地執行著IO重平衡的工作,因此如果在這個當口,DBA忽然意識到操作失誤,其實磁碟並不需要被刪除,那也可以馬上透過alter diskgroup dgname undrop disks語句來取消刪除的操作,例如:

    SQL> alter diskgroup asmdisk2 undrop disks;

    Diskgroup altered.

  只要刪除操作還沒有真正完成,任何就會被取消,否則的話,上述語句也挽回不了什麼了,如果希望挽回,那DBA只能再透過ADD語句將該磁碟重新加入到磁碟組了。

2.2.3  修改磁碟大小

  ASM 中的磁碟也可以被RESIZE--擴大或縮小,不過需要注意的是,擴大的話,要確保該磁碟對應的裸卷確實有足夠的空間去擴大(比如該卷原有20g,建立時僅用了10g,則最大可擴大到20g-塊頭佔用的nM空間);縮小的話,要確保縮小後剩餘的空間仍以放的下當前磁碟上已存在的資料,不然操作就會報錯。

  具體的操作是很簡單的,例如將磁碟組asmdisk2的磁碟asmdisk2_0000的磁碟空間調整為1000m(原為8189m),操作如下:

    SQL> alter diskgroup asmdisk2 resize disk asmdisk2_0000 size 1000m;

    Diskgroup altered.

2.2.4  手動平衡磁碟組

  一般情況下ASM都會自動對其下的磁碟組進行平衡,不過ORACLE也提供了手動平衡磁碟組的方式,透過alter diskgroup ... power 語句。前面提到過磁碟組的平衡度有0到11多個級別,預設是按照ASM_POWER_LIMIT初始化引數中設定的值,手動平衡的話,設定的平衡度可以與初始化引數中並不相同,例如,設定磁碟組平衡度為5,語句如下:

    SQL> alter diskgroup asmdisk2 rebalance power 5;

    Diskgroup altered.  

  手動平衡磁碟組可能涉及大量的工作,該操作可能費時較久,因此DBA在執行該語句時,一定要注意該操作對IO效能的影響。

  另外再次強調,上述語句將很快返回diskgroup altered的提示,但這並不表示操作真正完成,它只是反饋語句提交而已,檢視磁碟後臺的操作,可以透過v$asm_operator檢視,或者在語句執行時增加wait子句,這樣ASM將會等到操作真正完成時,才返回提示資訊。

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

相關文章