asm的相關操作,給自己看的,三思的
ORACLE10g推出了ASM(Automatic Storage Management --自動儲存管理)特性,該特性擁有易管理,高自動性,並且,擁有號稱超越裸裝置IO效能。這個特性實際上就是oracle回收了資料庫依賴的第三方檔案系統的功能,與oracle一貫的習慣是一致的。在oracle10gr2中又推出了ASMCMD增強對ASM的管理。升級到11gR2版本後,又被正名為傳說中的ASMFS,並推出了ASMCA,這也說明了ORACLE對這一特性的重視程度。
1、ASM例項
ASM例項與ORACLE例項差不多,都是由sga和一堆後臺程式組成,從功能上來看,區別在於oracle例項管理的是資料庫,而asm例項只是管理asm盤陣。
透過Oracle EM或DBCA或者11g中的ASMCA都可以對asm進行一些配置,同樣sqlplus也是管理ASM的常用工具。在進入sqlplus前需要設定ORACLE_SID的環境變數,其他與運算元據庫的sqlplus完全一樣。
ASM例項沒有資料字典之類的東西儲存使用者系統,因此最常見的連線認證方式就是作業系統認證as sysdba進入(OSDBA組的使用者)。如果是透過遠端連線的話(比如遠端透過tnsnames或OEM管理),也可以使用金鑰檔案進行驗證,該金鑰檔案直資料庫的金鑰檔案在命名規則及使用規則上完全一模一樣。如果使用dbca建庫的話,預設就會建立asm的金鑰檔案,當然也可以自行手動透過orapwd命令進行建立,與資料庫的金鑰檔案有所不同的是,asm的金鑰檔案對應的使用者只有一個----sys。
提示:什麼是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@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,覆蓋該預設值。
提示:關於rebalance操作,如果你沒接觸過,還不明白是什麼意思,沒關係,繼續往下看!
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.
2、管理ASM磁碟
ASM磁碟組的管理其實非常簡單,主要是由於10gR2中這個東西透明度不夠,ORACLE提供的功能有限,因此我們能夠做的操作就更加有限了。
ASM磁碟組的管理方式呢也比較多,比如像DBCA、EM、SQL*PLUS等均可操作(不同工具易用性不同,不過功能也有差異),除此之外ORACLE還專門提供了ASMCMD命令列方式,像操作檔案系統一樣來操作磁碟組。本節操作主要使用sqlplus命令列工具.
在管理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
這其中,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磁碟總的原則供參考。
2.1、新增或刪除磁碟的影響
當發生新增/刪除磁碟組中磁碟的操作時,ASM能夠自動平衡。對於普通的刪除操作(無force選項),被刪除的磁碟在該上資料被有效處理前並不會立刻釋放,同樣,新增磁碟時,在重分配工作完成前,該盤也不會承擔I/O負載的工作。
2.2、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有一主多從的映象,理論上將更加安全。
如果磁碟發生損壞,那麼損壞的磁碟預設自動offlice並被drop掉,不過該磁碟所在的磁碟組仍將保持MOUNT狀態,如果該盤有映象的話,那麼應用不會有影響,映象盤將自動實現接管--只要不是所有failure磁碟組都損壞掉,否則的話,該磁碟組將自動DISMOUNT。舉個例子吧,某標準冗餘的failure組有6個盤(對應6個裸裝置),假如說此時壞了一塊盤,沒關係,操作繼續,壞了那塊會被自動dropped,剩下的5塊盤仍然能夠負擔起正常的讀寫操作。
2.3、ASM擴充套件性
最多支援63個磁碟組;
最多支援10000個磁碟;
最大支援4pb/磁碟;
最大支援40 exabyte/ASM儲存;
最大支援1百W個檔案/磁碟組;
外部冗餘時單個檔案最大35tb,標準冗餘時單個檔案最大5.8tb,高冗餘度時單個檔案最大3.9tb。
2.4、 新增磁碟組
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.5、 修改磁碟組
事物總是在變化中前進,這是事物的一般規律,磁碟組也不例外,在其建立完之後,保不齊什麼時候可能就需要加或刪個磁碟,或者修改某個盤的大小(如果還有機會改的話)。這時候你就需要ALTER DISKGROUP語句了,ALTER DISKGROUP語句的語法太簡單(靈活)了,因此這裡三思就不列了,後面透過幾個實際應用的示例來說明其語法規則。
ASM最好的一點就是,不管你是加還是刪磁碟組中的磁碟,它都能自動進行平衡,確保該磁碟組中每塊盤儲存的資料量平均,以實現最最佳化的IO效能,並且這一過程不會對資料造成影響
2.5.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.5.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.5.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.5.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將會等到操作真正完成時,才返回提示資訊。
2.6 mount/unmount磁碟組
只有被mount的磁碟組才能被資料庫使用並執行add/drop等磁碟操作,ASM中的磁碟組預設會在ASM例項啟動時自動載入,當然也可以手動透過命令列語句mount/unmount磁碟組。
查詢ASM例項中建立的磁碟組可以透過V$ASM_DISKGROUP檢視檢視,例如:
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
當前兩個磁碟組均為MOUNT狀態,要將其置為UNMOUNT,執行語句如下,例如將ASMDISK2磁碟組UNMOUNT:
SQL> alter diskgroup asmdisk2 dismount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDISK1 MOUNTED
0 ASMDISK2 DISMOUNTED
注意喲,UNMOUNT磁碟組的話務必慎重操作,要確保UNMOUNT的磁碟組中儲存的檔案對應的資料庫當前未啟動,而且該操作也會直接導致資料庫SHUTDOWN。
再將其置回MOUNT狀態,操作如下:
SQL> alter diskgroup asmdisk2 mount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDISK1 MOUNTED
2 ASMDISK2 MOUNTED
2.7 管理目錄及檔案
ASM磁碟組中檔案和目錄的管理自動化水平相當高,應該說基本上完全不需要DBA參與,它自己就能玩的很好,當然,如果你非要動動手,那也是可以的。
2.7.1 管理磁碟組目錄
建立新目錄:
SQL> alter diskgroup asmdisk2 add directory '+ASMDISK2/JSS1';
Diskgroup altered.
修改目錄名:
SQL> alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1'
2 to '+ASMDISK2/JSS2';
Diskgroup altered.
刪除目錄名:
SQL> alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2';
Diskgroup altered.
實際上,ASM中目錄和檔案的管理,也可以透過ASMCMD命令列方式進行,該命令列進入之後,是一個類似檔案系統的管理介面,ORACLE提供了一些最基礎的,如cd、ls、mkdir、rm等等幾個有限的操作命令,如果對這部分內容感興趣,可以參考官方文件中的介紹,或者搭個環境實踐操作,可用命令很少且簡單,熟悉Linux/Unix的話極易上手。
2.7.2 管理別名(Alias Names)
別名就是外號,比如說當系統自動產生的名稱太過複雜不怎麼好記,DBA可以透過別名,為它建立一個簡單化的名稱,而又不會對其現有名稱造成任何影響。ASM中建立別名是透過alter diskgroup的alias子句實現,支援增加/修改/刪除等多項操作。V$ASM_ALIAS檢視中可以查詢到當前例項中建立的別名。
例如,增加別名:
SQL> alter diskgroup asmdisk2 add alias '+ASMDISK2/repdb/datafile/temp01.dbf' for '+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831';
Diskgroup altered.
修改別名:
SQL> alter diskgroup asmdisk2 rename alias '+ASMDISK2/repdb/datafile/temp01.dbf' to '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
Diskgroup altered.
刪除別名:
SQL> alter diskgroup asmdisk2 drop alias '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
Diskgroup altered.
不管是新增/刪除或是修改別名,對原有檔案路徑均不會有影響。
2.7.3 刪除磁碟組中檔案/別名
破壞總是最簡單的,當然我不是說刪除就一定是破壞,不過從嚴謹的角度講,刪除這樣的操作要少做(沒說不做),做前得再三確認,三思而行並留有備份,即使做錯了,還有恢復的可能。
當然啦,ASM中遇到刪除檔案這樣需求的機率很低,但也不是完全沒有,比如說執行了資料庫不完全恢復操作後,某部分資料檔案就不再需要,而恢復操作不會處理這部分檔案,為合理利用空間,就會需要DBA手動刪除這類檔案,真遇到這樣的需求,表急,語法也是黑簡單的吶,例如,刪除磁碟組2上的別名temp01:
SQL> alter diskgroup asmdisk2 drop file '+ASMDISK2/repdb/datafile/temp01.dbf';
Diskgroup altered.
沒錯,即能刪檔案也能刪別名,只不過如果刪除的是檔案的話,其關聯的別名(Alias)也會被自動刪除。
2.7.4 刪除磁碟組
太簡單了,語法:drop diskgroup gpname即可!不演示了!需要注意一點,如果刪除的diskgroup非空的話,直接執行上述語句會報錯,這時候可以透過附加including contents子句,來自動刪除該磁碟組中包含的檔案。刪除磁碟組的操作會自動修改spfile中ASM_DISKGROUPS初始化引數的值(如果使用了SPFILE的話)
3、管理ASM磁碟中的檔案
ASM中的磁碟與物理磁碟並非完全一一對應,由於ASM在儲存資料時是打散處理,ASM中的(同一個)檔案在儲存時也並非儲存在某個磁碟中,而是完全由ASM自動控制,甚至連建立檔案時的檔名,都由ASM透過OMF(Oracle managed files)管理。
接下來,三思跟大家一起聊聊ASM中檔案的那些事兒~~~
3.1、ASM中支援的檔案型別
大多數的ORACLE檔案型別均能被ASM支援,注意,我說的是大多數,而沒說全部,像trace檔案、alert檔案、dmp檔案等還不能直接被儲存到ASM中,注意,我說的是不能直接,沒說不能間接。
下表列出了ASM直接支援的檔案型別:
Control files
Datafiles
Redo log files
Archive log files
Trace files
Temporary files
Datafile backup pieces
Datafile incremental backup pieces
Archive log backup piece
Datafile copy
Persistent initialization parameter file (SPFILE)
Disaster recovery configurations
Flashback logs
Change tracking file
DataPump dumpset
Automatically generated control file backup
Cross-platform. transportable datafiles
如果想向ASM中儲存任意型別的檔案,FTP會是個好方式,yangtingkun的這篇BLOG詳細描述了這一方法:http://space.itpub.net/4227/viewspace-448289,透過這一方式,可以將任意檔案放入ASM中,而不用考慮是否能夠被直接支援,這其實提供了很大的靈活度,ASM不再是個嚴絲合縫的黑匣子,它也是有縫兒的~~
3.2、ASM中的檔名
ASM建立的檔案均由系統自動命名,這種命名方式官方定義為完全定義檔名(Fully Qualified Filename),這種方式命名的檔案包含完整的檔案路徑,比如像這樣的形式:
+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831
上述名稱是在檔案建立時完全由ASM自動生成,事上述名稱的生成格式為:
+diskgroup/dbname/file_type/file_type_tag.file.incarnation
+diskgroup:磁碟組名稱;
dbname:資料庫的DB_UNIQUE_NAME引數值;
file_type:建立的檔案型別,比如CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/TEMPFILE/BACKUPSET/FLASHBACK等等,型別眾多此處不一一例舉;
file_type_tag:檔案型別的標籤,比如表空間對應的通常為該表空間名稱;
file.incarnation:檔案序號+incarnation,用來確保檔案的唯一;
實際上,即使DBA在建立時想手動指定這樣格式的檔名也是不行的(即使指定了,建立的也只是別名),例如:
SQL>alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m;
alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m
*
ERROR at line 1:
ORA-01276: Cannot add file +ASMDISK2/repdb/datafile/jsstbs.280.722005095. File has an Oracle Managed Files file name.
指定非OMF格式的方式名:
SQL>alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs02.dbf' size 100m;
Tablespace altered.
看起來o了,其實不然,到asmcmd下檢視一下實際建立的檔案:
ASMCMD>pwd
+ASMDISK2/repdb/datafile
ASMCMD>ls -l jsstbs*
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE JUN 18 12:00:00 Y JSSTBS.263.714575967
DATAFILE UNPROT COARSE JUN 18 13:00:00 Y JSSTBS.271.722005397
N jsstbs01.dbf => +ASMDISK2/repdb/datafile/JSSTBS.263.714575967
N jsstbs02.dbf => +ASMDISK2/repdb/datafile/JSSTBS.271.722005397
由上可以看出,系統雖然建立了名為jsstb02.dbf的檔案,但只是別名,實際指向了由系統自動命名的JSSTBS.271.722005397。
即然檔案建立時無法指定實際檔名及路徑,那麼建立語句當然還可以更簡化,例如:
SQL>alter tablespace jsstbs add datafile '+ASMDISK2' size 10m;
Tablespace altered.
SQL>select file_name from dba_data_files where tablespace_name='JSSTBS';
FILE_NAME
--------------------------------------------------
+ASMDISK2/repdb/datafile/jsstbs01.dbf
+ASMDISK2/repdb/datafile/jsstbs02.dbf
+ASMDISK2/repdb/datafile/jsstbs.272.722005653
這樣就完全由ORACLE的OMF控制和管理了。
如果設定了初始化引數db_create_file_dest,甚至連磁碟組名都不需要寫了,例如:
SQL>show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +ASMDISK2
SQL>alter tablespace jsstbs add datafile size 10m;
Tablespace altered.
透過上述示例,相信大家對於使用ASM做為儲存的資料庫,新增資料檔案已無疑惑,不過如何新增其它型別檔案,比如重做日誌檔案、歸檔檔案(當然歸檔檔案本來也就不需要特殊處理,只要LOG_ARCHIVE_DEST_n設定好即可)等還不明瞭,其實沒有那麼複雜,操作方式都是同理的。由上述示例可知,ASM中檔名完全可由其自行管理,因此在建立檔案時,只需指定磁碟組路徑即可,檔名嘛,就由ASM自己玩吧~~
對於現有系統想遷入ASM儲存,最簡單的方式,莫過於使用RMAN了,之前的三思筆記系統文章中對此已有描述,此處不再重複深度,感興趣的朋友可以翻看之前的三思筆記系統文章,或者瀏覽官方文件。
1、ASM例項
ASM例項與ORACLE例項差不多,都是由sga和一堆後臺程式組成,從功能上來看,區別在於oracle例項管理的是資料庫,而asm例項只是管理asm盤陣。
透過Oracle EM或DBCA或者11g中的ASMCA都可以對asm進行一些配置,同樣sqlplus也是管理ASM的常用工具。在進入sqlplus前需要設定ORACLE_SID的環境變數,其他與運算元據庫的sqlplus完全一樣。
ASM例項沒有資料字典之類的東西儲存使用者系統,因此最常見的連線認證方式就是作業系統認證as sysdba進入(OSDBA組的使用者)。如果是透過遠端連線的話(比如遠端透過tnsnames或OEM管理),也可以使用金鑰檔案進行驗證,該金鑰檔案直資料庫的金鑰檔案在命名規則及使用規則上完全一模一樣。如果使用dbca建庫的話,預設就會建立asm的金鑰檔案,當然也可以自行手動透過orapwd命令進行建立,與資料庫的金鑰檔案有所不同的是,asm的金鑰檔案對應的使用者只有一個----sys。
提示:什麼是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@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,覆蓋該預設值。
提示:關於rebalance操作,如果你沒接觸過,還不明白是什麼意思,沒關係,繼續往下看!
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.
2、管理ASM磁碟
ASM磁碟組的管理其實非常簡單,主要是由於10gR2中這個東西透明度不夠,ORACLE提供的功能有限,因此我們能夠做的操作就更加有限了。
ASM磁碟組的管理方式呢也比較多,比如像DBCA、EM、SQL*PLUS等均可操作(不同工具易用性不同,不過功能也有差異),除此之外ORACLE還專門提供了ASMCMD命令列方式,像操作檔案系統一樣來操作磁碟組。本節操作主要使用sqlplus命令列工具.
在管理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
這其中,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磁碟總的原則供參考。
2.1、新增或刪除磁碟的影響
當發生新增/刪除磁碟組中磁碟的操作時,ASM能夠自動平衡。對於普通的刪除操作(無force選項),被刪除的磁碟在該上資料被有效處理前並不會立刻釋放,同樣,新增磁碟時,在重分配工作完成前,該盤也不會承擔I/O負載的工作。
2.2、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有一主多從的映象,理論上將更加安全。
如果磁碟發生損壞,那麼損壞的磁碟預設自動offlice並被drop掉,不過該磁碟所在的磁碟組仍將保持MOUNT狀態,如果該盤有映象的話,那麼應用不會有影響,映象盤將自動實現接管--只要不是所有failure磁碟組都損壞掉,否則的話,該磁碟組將自動DISMOUNT。舉個例子吧,某標準冗餘的failure組有6個盤(對應6個裸裝置),假如說此時壞了一塊盤,沒關係,操作繼續,壞了那塊會被自動dropped,剩下的5塊盤仍然能夠負擔起正常的讀寫操作。
2.3、ASM擴充套件性
最多支援63個磁碟組;
最多支援10000個磁碟;
最大支援4pb/磁碟;
最大支援40 exabyte/ASM儲存;
最大支援1百W個檔案/磁碟組;
外部冗餘時單個檔案最大35tb,標準冗餘時單個檔案最大5.8tb,高冗餘度時單個檔案最大3.9tb。
2.4、 新增磁碟組
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.5、 修改磁碟組
事物總是在變化中前進,這是事物的一般規律,磁碟組也不例外,在其建立完之後,保不齊什麼時候可能就需要加或刪個磁碟,或者修改某個盤的大小(如果還有機會改的話)。這時候你就需要ALTER DISKGROUP語句了,ALTER DISKGROUP語句的語法太簡單(靈活)了,因此這裡三思就不列了,後面透過幾個實際應用的示例來說明其語法規則。
ASM最好的一點就是,不管你是加還是刪磁碟組中的磁碟,它都能自動進行平衡,確保該磁碟組中每塊盤儲存的資料量平均,以實現最最佳化的IO效能,並且這一過程不會對資料造成影響
2.5.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.5.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.5.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.5.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將會等到操作真正完成時,才返回提示資訊。
2.6 mount/unmount磁碟組
只有被mount的磁碟組才能被資料庫使用並執行add/drop等磁碟操作,ASM中的磁碟組預設會在ASM例項啟動時自動載入,當然也可以手動透過命令列語句mount/unmount磁碟組。
查詢ASM例項中建立的磁碟組可以透過V$ASM_DISKGROUP檢視檢視,例如:
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
當前兩個磁碟組均為MOUNT狀態,要將其置為UNMOUNT,執行語句如下,例如將ASMDISK2磁碟組UNMOUNT:
SQL> alter diskgroup asmdisk2 dismount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDISK1 MOUNTED
0 ASMDISK2 DISMOUNTED
注意喲,UNMOUNT磁碟組的話務必慎重操作,要確保UNMOUNT的磁碟組中儲存的檔案對應的資料庫當前未啟動,而且該操作也會直接導致資料庫SHUTDOWN。
再將其置回MOUNT狀態,操作如下:
SQL> alter diskgroup asmdisk2 mount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDISK1 MOUNTED
2 ASMDISK2 MOUNTED
2.7 管理目錄及檔案
ASM磁碟組中檔案和目錄的管理自動化水平相當高,應該說基本上完全不需要DBA參與,它自己就能玩的很好,當然,如果你非要動動手,那也是可以的。
2.7.1 管理磁碟組目錄
建立新目錄:
SQL> alter diskgroup asmdisk2 add directory '+ASMDISK2/JSS1';
Diskgroup altered.
修改目錄名:
SQL> alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1'
2 to '+ASMDISK2/JSS2';
Diskgroup altered.
刪除目錄名:
SQL> alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2';
Diskgroup altered.
實際上,ASM中目錄和檔案的管理,也可以透過ASMCMD命令列方式進行,該命令列進入之後,是一個類似檔案系統的管理介面,ORACLE提供了一些最基礎的,如cd、ls、mkdir、rm等等幾個有限的操作命令,如果對這部分內容感興趣,可以參考官方文件中的介紹,或者搭個環境實踐操作,可用命令很少且簡單,熟悉Linux/Unix的話極易上手。
2.7.2 管理別名(Alias Names)
別名就是外號,比如說當系統自動產生的名稱太過複雜不怎麼好記,DBA可以透過別名,為它建立一個簡單化的名稱,而又不會對其現有名稱造成任何影響。ASM中建立別名是透過alter diskgroup的alias子句實現,支援增加/修改/刪除等多項操作。V$ASM_ALIAS檢視中可以查詢到當前例項中建立的別名。
例如,增加別名:
SQL> alter diskgroup asmdisk2 add alias '+ASMDISK2/repdb/datafile/temp01.dbf' for '+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831';
Diskgroup altered.
修改別名:
SQL> alter diskgroup asmdisk2 rename alias '+ASMDISK2/repdb/datafile/temp01.dbf' to '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
Diskgroup altered.
刪除別名:
SQL> alter diskgroup asmdisk2 drop alias '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
Diskgroup altered.
不管是新增/刪除或是修改別名,對原有檔案路徑均不會有影響。
2.7.3 刪除磁碟組中檔案/別名
破壞總是最簡單的,當然我不是說刪除就一定是破壞,不過從嚴謹的角度講,刪除這樣的操作要少做(沒說不做),做前得再三確認,三思而行並留有備份,即使做錯了,還有恢復的可能。
當然啦,ASM中遇到刪除檔案這樣需求的機率很低,但也不是完全沒有,比如說執行了資料庫不完全恢復操作後,某部分資料檔案就不再需要,而恢復操作不會處理這部分檔案,為合理利用空間,就會需要DBA手動刪除這類檔案,真遇到這樣的需求,表急,語法也是黑簡單的吶,例如,刪除磁碟組2上的別名temp01:
SQL> alter diskgroup asmdisk2 drop file '+ASMDISK2/repdb/datafile/temp01.dbf';
Diskgroup altered.
沒錯,即能刪檔案也能刪別名,只不過如果刪除的是檔案的話,其關聯的別名(Alias)也會被自動刪除。
2.7.4 刪除磁碟組
太簡單了,語法:drop diskgroup gpname即可!不演示了!需要注意一點,如果刪除的diskgroup非空的話,直接執行上述語句會報錯,這時候可以透過附加including contents子句,來自動刪除該磁碟組中包含的檔案。刪除磁碟組的操作會自動修改spfile中ASM_DISKGROUPS初始化引數的值(如果使用了SPFILE的話)
3、管理ASM磁碟中的檔案
ASM中的磁碟與物理磁碟並非完全一一對應,由於ASM在儲存資料時是打散處理,ASM中的(同一個)檔案在儲存時也並非儲存在某個磁碟中,而是完全由ASM自動控制,甚至連建立檔案時的檔名,都由ASM透過OMF(Oracle managed files)管理。
接下來,三思跟大家一起聊聊ASM中檔案的那些事兒~~~
3.1、ASM中支援的檔案型別
大多數的ORACLE檔案型別均能被ASM支援,注意,我說的是大多數,而沒說全部,像trace檔案、alert檔案、dmp檔案等還不能直接被儲存到ASM中,注意,我說的是不能直接,沒說不能間接。
下表列出了ASM直接支援的檔案型別:
Control files
Datafiles
Redo log files
Archive log files
Trace files
Temporary files
Datafile backup pieces
Datafile incremental backup pieces
Archive log backup piece
Datafile copy
Persistent initialization parameter file (SPFILE)
Disaster recovery configurations
Flashback logs
Change tracking file
DataPump dumpset
Automatically generated control file backup
Cross-platform. transportable datafiles
如果想向ASM中儲存任意型別的檔案,FTP會是個好方式,yangtingkun的這篇BLOG詳細描述了這一方法:http://space.itpub.net/4227/viewspace-448289,透過這一方式,可以將任意檔案放入ASM中,而不用考慮是否能夠被直接支援,這其實提供了很大的靈活度,ASM不再是個嚴絲合縫的黑匣子,它也是有縫兒的~~
3.2、ASM中的檔名
ASM建立的檔案均由系統自動命名,這種命名方式官方定義為完全定義檔名(Fully Qualified Filename),這種方式命名的檔案包含完整的檔案路徑,比如像這樣的形式:
+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831
上述名稱是在檔案建立時完全由ASM自動生成,事上述名稱的生成格式為:
+diskgroup/dbname/file_type/file_type_tag.file.incarnation
+diskgroup:磁碟組名稱;
dbname:資料庫的DB_UNIQUE_NAME引數值;
file_type:建立的檔案型別,比如CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/TEMPFILE/BACKUPSET/FLASHBACK等等,型別眾多此處不一一例舉;
file_type_tag:檔案型別的標籤,比如表空間對應的通常為該表空間名稱;
file.incarnation:檔案序號+incarnation,用來確保檔案的唯一;
實際上,即使DBA在建立時想手動指定這樣格式的檔名也是不行的(即使指定了,建立的也只是別名),例如:
SQL>alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m;
alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m
*
ERROR at line 1:
ORA-01276: Cannot add file +ASMDISK2/repdb/datafile/jsstbs.280.722005095. File has an Oracle Managed Files file name.
指定非OMF格式的方式名:
SQL>alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs02.dbf' size 100m;
Tablespace altered.
看起來o了,其實不然,到asmcmd下檢視一下實際建立的檔案:
ASMCMD>pwd
+ASMDISK2/repdb/datafile
ASMCMD>ls -l jsstbs*
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE JUN 18 12:00:00 Y JSSTBS.263.714575967
DATAFILE UNPROT COARSE JUN 18 13:00:00 Y JSSTBS.271.722005397
N jsstbs01.dbf => +ASMDISK2/repdb/datafile/JSSTBS.263.714575967
N jsstbs02.dbf => +ASMDISK2/repdb/datafile/JSSTBS.271.722005397
由上可以看出,系統雖然建立了名為jsstb02.dbf的檔案,但只是別名,實際指向了由系統自動命名的JSSTBS.271.722005397。
即然檔案建立時無法指定實際檔名及路徑,那麼建立語句當然還可以更簡化,例如:
SQL>alter tablespace jsstbs add datafile '+ASMDISK2' size 10m;
Tablespace altered.
SQL>select file_name from dba_data_files where tablespace_name='JSSTBS';
FILE_NAME
--------------------------------------------------
+ASMDISK2/repdb/datafile/jsstbs01.dbf
+ASMDISK2/repdb/datafile/jsstbs02.dbf
+ASMDISK2/repdb/datafile/jsstbs.272.722005653
這樣就完全由ORACLE的OMF控制和管理了。
如果設定了初始化引數db_create_file_dest,甚至連磁碟組名都不需要寫了,例如:
SQL>show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +ASMDISK2
SQL>alter tablespace jsstbs add datafile size 10m;
Tablespace altered.
透過上述示例,相信大家對於使用ASM做為儲存的資料庫,新增資料檔案已無疑惑,不過如何新增其它型別檔案,比如重做日誌檔案、歸檔檔案(當然歸檔檔案本來也就不需要特殊處理,只要LOG_ARCHIVE_DEST_n設定好即可)等還不明瞭,其實沒有那麼複雜,操作方式都是同理的。由上述示例可知,ASM中檔名完全可由其自行管理,因此在建立檔案時,只需指定磁碟組路徑即可,檔名嘛,就由ASM自己玩吧~~
對於現有系統想遷入ASM儲存,最簡單的方式,莫過於使用RMAN了,之前的三思筆記系統文章中對此已有描述,此處不再重複深度,感興趣的朋友可以翻看之前的三思筆記系統文章,或者瀏覽官方文件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21754115/viewspace-1319828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 寫給自己看的找素材
- 寫給自己看的Typescript起步TypeScript
- 寫給自己看的 Flex 佈局Flex
- 寫給自己看的 Git 命令指北Git
- Word的相關操作
- Cookie的相關操作Cookie
- 寫給自己看的命名備忘錄
- 寫給自己看的面試題整理面試題
- 寫給自己看的三欄佈局的演示
- 時間相關的操作
- Linux相關的操作指令Linux
- python的字典及相關操作Python
- 寫給自己看的木偶元件和智慧元件的啟示元件
- 框架的基礎使用 (持續更新給自己看)框架
- 寫給自己看的在 Vue 下使用 Typescript 指北VueTypeScript
- 寫給自己看的釋出react靜態資源的方法React
- 155 執行緒的相關操作執行緒
- 1-python 字串的相關操作Python字串
- MySQL 中的約束及相關操作MySql
- 寫給自己看的體重記錄板使用指南
- MSSQL系列 (一):資料庫的相關操作SQL資料庫
- java與作業系統相關的操作Java作業系統
- Android多媒體之Camera的相關操作Android
- 說說你對樹的理解?相關的操作有哪些?
- 我看過的那些抗美援朝相關的影視劇
- MongoDB相關操作MongoDB
- AI繪畫的離譜操作,這個AI看來是有自己想法的AI
- 送給 18 歲的自己
- 寫給 35 歲的自己!
- 寫給未來的自己
- 寫給自己的規劃
- 學習PHP中的URL相關操作函式PHP函式
- jquery裡操作json相關的方法和例項jQueryJSON
- ASM磁碟組更換磁碟的操作方法ASM
- 說說你對圖的理解?相關操作有哪些?
- LINUX下磁碟管理的基本流程與相關操作命令Linux
- Android多媒體之Camera2的相關操作Android
- StringBuilder類相關操作UI
- pip 相關命令操作