[轉載] 全面學習和應用ORACLE ASM特性(1),(2),(3)

tolywang發表於2011-01-14


全面學習和應用ORACLE ASM特性--(1)關於asm例項


ORACLE10g版本推出時,為了簡化RAC中儲存端的配置,ORACLE新推出了ASM(Automatic
Storage Management --自動儲存管理)特性,該特性擁有易管理,高自動性,並且,擁
有號稱超越裸裝置IO效能。升級到11gR2版本後,又被正名為傳說中的ASMFS,這也說明
了ORACLE對這一特性的重視程度。

  因此從今天起,三思決定花個三二分鐘時間,跟大學一塊學學關於ASM的那點兒事兒,
另注,本文操作的資料庫版本為10gR2。


1、About ASM 例項
  ASM 例項與 ORACLE 例項差不多,都是 由SGA和一堆後臺程式組成,從功能上來看,
區別在於oracle例項管理的是資料庫,而asm例項只是管理ASM盤陣。

  透過Oracle EM或DBCA都可以對ASM進行一些配置,不過三思覺著管理ASM(例項)的
最佳工具仍是sql*plus,在進入sql*plus前也需要設定ORACLE_SID的環境變數,該環境變
量通常是+ASM[node#],比如+ASM1 。

  ASM 例項沒有資料字典之類的東東儲存使用者系統,因此最常見的連線認證方式就是操
作系統認證as sysdba進入(OSDBA組的使用者)。如果是透過遠端連線的話( 比如遠端透過
tnsnames或OEM管理),也可以使用金鑰檔案進行驗證,該金鑰檔案與資料庫的金鑰檔案在
命名規則及使用規則上完全一模一樣。如果使用dbca建庫的話,預設就會建立asm的金鑰文
件(pwd file),當然也可以自行手動透過orapwd命令進行建立,與資料庫的金鑰檔案有所
不同的是, ASM的金鑰檔案對應的使用者只有一個---sys (而資料庫中密碼檔案中的使用者可以
是擁有sysdba許可權的所有使用者) 。 

 

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

以下是摘錄者自己的操作

下面是Oracle11g R2 RAC上進行的測試:

[root@rac01 ~]# su - grid
[grid@rac01 ~]$ ORACLE_SID=+ASM1 (一般不用,因為grid使用者下只有一個ASM例項)
[grid@rac01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 13 16:15:47 2011
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options

SQL> show parameter instance_name 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------
instance_name                        string      +ASM1

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

提示:什麼是 ASMLib !
即ASM support Library,是由ORACLE提供的簡化管理作業系統的API 。

 


1.1、啟動 / 關閉 ASM 例項
  ASM 例項與DB例項高度相似,啟動和停止例項的命令也一模一樣,就啟動來說,
也同樣擁有 NOMOUNT/MOUNT/OPEN/FORCE 幾種狀態。

NOMOUNT :僅啟動例項;
MOUNT 、OPEN:啟動例項並載入磁碟,注意載入的是磁碟組(如果當前未建立或
配置任何磁碟組,則提示敬告資訊),OPEN選項對於ASM例項無意義,等同於MOUNT。
FORCE :相當於先執行shutdown abort,然後再startup。

  演示如下(注意別忘了先設定作業系統環境變數ORACLE_SID),先啟動到NOMOUNT:

[oracle@jssdbn1 ~]$ export ORACLE_SID=+ASM1
[oracle@jssdbn1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Wed May 19 08:34:22 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to an idle instance.

SQL> startup nomount
ASM instance started

Total System Global Area 130023424 bytes
Fixed Size 2082208 bytes
Variable Size 102775392 bytes
ASM Cache 25165824 bytes

SQL> select name,state from v$asm_diskgroup;

NAME STATE
------------------------------ -----------
ASMDISK1 DISMOUNTED
ASMDISK2 DISMOUNTED

SQL> select instance_name,status from v$instance;

INSTANCE_NAME STATUS
---------------- ------------
+ASM1 STARTED


  載入磁碟組,注意,不是alter database喲:

SQL> alter diskgroup all mount;
Diskgroup altered.

SQL> select name,state from v$asm_diskgroup;

NAME STATE
------------------------------ -----------
ASMDISK1 MOUNTED
ASMDISK2 MOUNTED

  這樣,該ASM就可以提供儲存服務了。

  提示一點,在10g版本中,ASM是依賴於CSS守護程式的,因此在啟動ASM 例項
前要確保CSS守護程式已經啟動。CSS(Cluster Synchronization Services) 守護
程式用來維持ASM 及客戶端資料庫例項間的一致性同步,如果是透過DBCA建庫的
話,那麼CSS守護程式預設即會啟動(跟隨系統reboot)。

  檢查CSS守護程式是否啟動非常簡單 ,直接使用crsctl check cssd即可,
如果啟動的話會收到"CSS appears healthy"的返回訊息,例如:

[oracle@jssdbn1 ~]$ crsctl check cssd
CSS appears healthy


  關閉ASM例項,簡單了,NORMAL/IMMEDIATE/TRANSACTIONAL/ABORT幾個選項的
定義與關閉普通資料庫例項完全一模一樣!例如:

SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown

 

1.2、關於ASM例項的初始化引數

  ASM 例項的初始化引數形式上與資料庫的初始化引數相同,也分spfile和pfile,
操作方式也完全相同,只不過具體的引數及引數值略有差異,大多數資料庫的初始化
引數在這裡也能見到,並且某些引數意義都完全相同,同樣也有一些引數雖然見到了,
不過並不需要設定,這個可以理解,畢竟ASM只有例項,相對比資料庫的初始化引數要
簡單的多了,還有一些引數則是資料庫初始化引數中沒有的。比如ASM開頭的那幾個初
始化引數,俺爭取把差異的部分都列出來寫明瞭。

  ASM 例項在記憶體佔用這塊還是比較輕量級的,基本上有個100m空間就很充足了 ,
因此記憶體這塊相關引數就不說了,下面說說幾個ASM例項特別需要的引數。

  首先,初始化引數中的INSTANCE_TYPE,該引數必須被設定為ASM,如:
INSTANCE_TYPE=ASM

  標識要啟動的例項是ASM,而不是資料庫例項(資料庫例項對應型別為RDBMS)。

  與ASM相關的初始化引數有三個:

ASM_POWER_LIMIT :指定磁碟rebalance的程度,有0-11個級別,預設值為1,指定
的級別越高,則rebalance的操作就會越快被完成(當然這也意味著這個時間段內將
佔用更多的資源),指定級別較低的話,雖然rebalance操作會耗時更久,但對當前
系統的IO及負載影響會更少,這中間的度需要DBA根據實際情況衡量。另外,這個參
數指定的只是一個預設值,在操作過程中,即可以隨便動態修改,也可以在語句級
命令列時指定power,覆蓋該預設值。


ASM_DISKSTRING :用最簡單的話說,就是設定ASM啟動時檢查的磁碟,該選項可以
同時指定多個值,並且支援萬用字元。比如說,只檢查/dev/dsk/下的裝置,可以設定
該引數如下:/dev/dsk/*,預設情況下該引數為空,為空的話,表示ASM將查詢系統
中所有ASM擁有讀寫許可權的裝置。

ASM_DISKGROUPS :指定例項啟動或alter diskgroup all mount語句時要載入的磁
盤組,如果為空的話,那麼實際就僅啟動到NOMOUNT狀態了。如果是使用SPFILE的話,
該引數一般不需要手動修改,ASM能夠自動更新該初始化引數中的值。

  修改 ASM 例項初始化引數檔案的命令規則與資料庫初始化引數完全相同 ,比如說:
SQL> alter system set asm_power_limit=5 sid='*';
System altered.

 

 

 

 

全面學習和應用ORACLE ASM特性--(2)管理asm磁碟


2、管理ASM磁碟

  本節簡單給大家描述下關於ASM磁碟組的管理操作,關於ASM磁碟組的管理其實非
常簡單(也非常少),主要是由於10gR2中這個東西透明度不夠 ,ORACLE提供的功能有
限,因此我們能夠做的操作就更加有限了,因此三思決定隨便寫個幾百W字大家湊和著
看看就得了,不深入了。

  ASM 磁碟組的管理方式呢也比較多,比如像DBCA、EM、SQL*PLUS等均可操作(不同
工具 易用性不同,不過 功能也有差異),除此之外ORACLE還專門提供了ASMCMD命令列
方式,像操作檔案系統一樣來操作磁碟組。本節操作主要使用sql*plus命令列工具,
關於asmcmd命令列中的命令,感興趣的朋友可以期待本文外傳~~~

  在管理ASM之前不得不提與ASM相關的動態效能檢視,這些檢視將對我們後面的操
作起到重要作用,查詢資料庫中ASM相關檢視可以透過下列SQL語句:

SQL> select * from dict where table_name like 'V$ASM_%';

TABLE_NAME                     COMMENTS

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

V$ASM_ALIAS                    Synonym for V_$ASM_ALIAS
V$ASM_CLIENT                   Synonym for V_$ASM_CLIENT
V$ASM_DISK                     Synonym for V_$ASM_DISK
V$ASM_DISKGROUP                Synonym for V_$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT           Synonym for V_$ASM_DISKGROUP_STAT
V$ASM_DISK_STAT                Synonym for V_$ASM_DISK_STAT
V$ASM_FILE                     Synonym for V_$ASM_FILE
V$ASM_OPERATION                Synonym for V_$ASM_OPERATION
V$ASM_TEMPLATE                 Synonym for V_$ASM_TEMPLATE

9 rows selected 

 


----------------------------------------------------------- 
提示: 11g R2中有19個相關的檢視。

SQL> select TABLE_NAME from dict where table_name like 'V$ASM_%';

TABLE_NAME
------------------------------
V$ASM_ACFSSNAPSHOTS
V$ASM_ACFSVOLUMES
V$ASM_ALIAS
V$ASM_ATTRIBUTE
V$ASM_CLIENT
V$ASM_DISK
V$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT
V$ASM_DISK_IOSTAT
V$ASM_DISK_STAT
V$ASM_FILE

TABLE_NAME
------------------------------
V$ASM_FILESYSTEM
V$ASM_OPERATION
V$ASM_TEMPLATE
V$ASM_USER
V$ASM_USERGROUP
V$ASM_USERGROUP_MEMBER
V$ASM_VOLUME
V$ASM_VOLUME_STAT

19 rows selected.
-----------------------------------------------------------   

 

  這其中,V$ASM_ALIAS檢視中記錄檔案別名資訊,V$ASM_CLIENT返回當前連
接的客戶端例項資訊,V$ASM_DISK*相關檢視中記錄的是ASM管理的磁碟及磁碟組
資訊,V$ASM_OPERATION記錄當前磁碟的操作資訊,例如:

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

GROUP_NUMBER NAME                           STATE         TOTAL_MB    FREE_MB

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

           1 ASMDISK1                       MOUNTED          20472      18667
           2 ASMDISK2                       MOUNTED          16378      14621

SQL> select header_status,name,failgroup,path,total_mb,free_mb from v$asm_disk
where GROUP_NUMBER in(1,2);

HEADER_STATU NAME                           FAILGROUP                      PATH                             TOTAL_MB    FREE_MB

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

MEMBER       ASMDISK2_0000                  ASMDISK2_0000                  /dev/raw/raw5                        8189       7309

MEMBER       ASMDISK2_0001                  ASMDISK2_0001                  /dev/raw/raw6                        8189       7312

MEMBER       ASMDISK1_0000                  ASMDISK1_0000                  /dev/raw/raw1                       10236       9333

MEMBER       ASMDISK1_0001                  ASMDISK1_0001                  /dev/raw/raw2                       10236       9334

 

  在真正開始操作ASM之前呢,我覺著還是有必要先描述一下關於ASM磁碟
總的原則供參考。


新增或刪除磁碟的影響
  當發生新增/刪除磁碟組中磁碟的操作時,ASM能夠自動平衡。對於普通的
刪除操作(無force選項),被刪除的磁碟在該上資料被有效處理前並不會立刻釋
放,同樣,新增磁碟時,在重分配工作完成前,該盤也不會承擔I/O負載的工作。


ASM 如何處理磁碟故障
  ASM 中的磁碟組在三思看來可以分成兩類:普通磁碟組和failure磁碟組,
後者又與ASM的冗餘方式有所關聯。普通磁碟組就是標準的儲存單元,ASM可以
向其可訪問的磁碟組中讀寫資料,failure磁碟組是為了提高資料的高可用性。
ASM中的磁碟冗餘策略非常簡單,概要成三類:外部冗餘、標準冗餘和高度冗餘,
其中前者與failure磁碟組無關,如果設定了後者,那麼該磁碟組就必須擁有
failure磁碟組。聽起來像在說failure磁碟組是普通磁碟組的子集,其實差不多
可以這麼理解,外部冗餘的話磁碟屬於磁碟組,內部冗餘的話,磁碟屬於磁碟
組的同時,還屬於某個(並且只能是一個)failure磁碟組。

  比如說對於標準冗餘(Normal Redundancy),ASM要求該磁碟組至少要擁有
兩個failure磁碟組,即提供雙倍映象保護,對於同一份資料(ASM中映象單位
不是磁碟,也不是塊,而是一種AU的單位,該單位大小預設是1M)將有主從兩
份映象,並且ASM透過演算法來自動確保主、從映象不會存在於同一份failure磁
盤組,這樣就保障了就算整個failure磁碟組都損壞,資料也不會丟失。至於高
度冗餘(High Redundancy)就更安全了,它至少需要三個failure磁碟組,也就
是一份AU有一主多從的映象,理論上將更加安全。

  如果磁碟發生損壞,那麼損壞的磁碟預設自動offline並被drop掉,不過該
磁碟所在的磁碟組仍將保持MOUNT狀態,如果該盤有映象的話,那麼應用不會有
影響,映象盤將自動實現接管--只要不是所有failure磁碟組都損壞掉,否則的話,
該磁碟組將自動DISMOUNT。   舉個例子吧,某標準冗餘的failure組有6個盤(對
應6個裸裝置),假如說此時壞了一塊盤,沒關係,操作繼續,壞了那塊會被自動
dropped,剩下的5塊盤仍然能夠負擔起正常的讀寫操作。


ASM 擴充套件性:
最多支援63個磁碟組;
最多支援10000個磁碟;
最大支援4pb/磁碟;
最大支援40 exabyte/ASM儲存;
最大支援1百W個檔案/磁碟組;
外部冗餘時單個檔案最大35tb,標準冗餘時單個檔案最大5.8tb,高冗餘度時單個
檔案最大3.9tb。

 

 

 

 

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


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,語句如下(asmdisk2_0002是磁碟名稱):

SQL> Alter diskgroup asmdisk1 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/35489/viewspace-683856/,如需轉載,請註明出處,否則將追究法律責任。

相關文章