[轉載] 全面學習和應用ORACLE ASM特性(1),(2),(3)
全面學習和應用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java ASM學習(2)JavaASM
- Oracle 12c新特性--ASMFD(ASM Filter Driver)特性OracleASMFilter
- 【ASM】Oracle asm磁碟被格式化,如何掛載該磁碟組ASMOracle
- Web【轉載學習】Web
- 學術派 |用深度學習實現2D到3D的轉換深度學習3D
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- 【從0到1學習邊緣容器系列2】之 邊緣應用管理
- Cilium Ingress 特性(轉載)
- Oracle時間資訊特性(轉)Oracle
- jenkins學習轉載文字Jenkins
- Mqtt 學習文件【轉載】MQQT
- 正規表示式學習(2)---字元特性字元
- 【機器學習】--LDA初始和應用機器學習LDA
- oracle10gR1 asm儲存簡單示例OracleASM
- Java學習:反射的應用,依賴載入Java反射
- kali2020.3安裝pip2和pip3(轉載)
- Camera KMD ISP學習筆記(3)-component應用筆記
- Oracle使用RMAN將普通資料檔案轉成ASMOracleASM
- OceanBase學習之路11|體驗 DDL 新特性(Oracle 模式)Oracle模式
- 深度學習和圖形學渲染的結合和應用深度學習
- Cilium Gateway API 特性(轉載)GatewayAPI
- Oracle ASM神書《撥雲見日 解密Oracle ASM核心》出版了OracleASM解密
- this和super的區別和應用 學習筆記筆記
- 三大特性,多個場景,Serverless 應用引擎 SAE 全面升級Server
- WinUI 3學習筆記(2)—— 用ListView來展示集合UI筆記View
- Oracle 20c 新特性:XGBoost 機器學習演算法和 AutoML 的支援Oracle機器學習演算法TOML
- 【轉】http2 新特性HTTP
- Oracle 11gR2 ASM例項記憶體管理OracleASM記憶體
- Oracle ASM擴容(NFS)OracleASMNFS
- 【ASM】Oracle asm刪除磁碟組注意事項ASMOracle
- 《應用迴歸及分類》學習筆記1筆記
- 【從0到1學習邊緣容器系列-3】應用容災之邊緣自治
- 1 Oracle Database 19c 新特性OracleDatabase
- 演算法學習筆記(2): 逆元及其應用演算法筆記
- 徹底棄用SHA-1,微軟5月9日將全面轉向SHA-2微軟
- 2021年1月2日-VulnHub-W1R3S 滲透學習
- LTE-5G學習筆記10---A1A2A3A4A5A6B1B2事件筆記事件
- 【ASM】ASM資料檔案和OS檔案(FILESYSTEM)轉移方法總結ASM
- Spring Boot 學習資料 (轉載)Spring Boot