您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Oracle ASM的概念以及工作原理是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
ASM:Automatic Storage Management,是ORACEL10G以后為了簡化存儲管理的復雜性,也是為了擺脫對其他廠商的依賴而推出的。ASM作為目前ORACLE推薦的首選存儲方案,除了具有集群文件系統的功能外,同時還集成了冗余、IO分散等卷管理器的功能。我們可以通過兩種方式使用ASM,包括建立在裸設備上,如果安裝了ASMLib,也可以建立的塊設備上。
使用ASM需要從ORACLE官方網站下載ASM驅動包,一般包括了ASM和ASMLib兩部分,需要注意ASM和ASMLib是兩部分,ASMLib只是ASM的一個管理工具包,我們常用ASMLib包創建ASM磁盤,如/etc/init.d/oracleasm VOL1 /dev/sdb1[這里也可以是裸設備].如上所訴,如果我們直接使用裸設備作為我們的ASM磁盤,那么就可以不用安裝ASMLib (主要是通過asm_disstring='' 參數指定)
如下的一些ASM包,下載ASM包需要根據自己的操作系統內核版本來選擇:
oracleasm-2.6.18-194.el5-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-194.el5debug-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-194.el5-debuginfo-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-194.el5PAE-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-194.el5xen-2.0.5-1.el5.i686.rpm oracleasmlib-2.0.4-1.el5.i386.rpm oracleasm-support-2.1.8-1.el5.i386.rpm
1.后臺進程
ASM與普通的RDBMS非常類似,ASM由一些后臺進程組成,也可以通過sql*plus工具維護。
ASM實例和傳統的實例的RDBMS實例相比多兩個進程:RBAL和ABRn
<1>RBAL:這個進程也叫rebalancer進程,負責規劃ASM磁盤組的rebalancer活動。
<2>ABRn:是RBAL進程的子進程,這個進程在數量上可以有多個,n從1~9,這些子進程負責完成真正的rebalancer活動。
<3>傳統進程:ASM實例也有DBWR、LGWR等進程。
而使用ASM作為存儲的RDBMS實例,也會多出兩個進程:RBAL和ASMB.
<4>RBAL:這個進程的主要功能是打開每個磁盤組的所有磁盤和數據的rebalancer。
<5>ASMB:這個進程作為ASM實例和數據庫實例之間的信息通道。這個進程負責與ASM實例的通信,它先利用Diskgroup Name從CSS獲得管理該Diskgroup的ASM實例的連接串,然后簡歷到ASM的持久連接,兩個實例通過這條連接定期交換信息,同時也是一種心跳機制。 這也說明了當我們的單實例數據使用ASM存儲時,為什么要單獨啟動一個CSS進程。
<6>O0nn01~10:這是一組進程,這組進程建立到ASM實例的連接,某些長時間操作如創建數據文件,RDBMS會通過這些進程向 ASM發送信息。
注意:ASM實例必須要先于數據庫實例啟動、和數據庫實例同步運行、遲于數據庫實例關閉。
2.ASM的安裝位置
ASM實例和RDBMS實例的關系需要注意以下兩點:
<1>如果一個節點上的ASM實例和RDBMS實例是1:n的關系,也就是一個ASM實例同時為多個RDBMS實例提供存儲, 則最好為 ASM 安裝單獨的$ASM_HOME,并和RDBMS的$ORACLE_HOME區分開來,在這種環境下需要使用ASM_HOME下的監聽器。
<2>如果節點上的ASM實例和RDBMS實例是1:1的關系,也就是ASM實例只為一個RDBMS實例提供存儲,則ASM和RDBMS可以共用一個$ORACLE_HOME
3.創建ASM磁盤
配置ASM磁盤需要注意以下幾點:
<1>ASM是以Oracle用戶身份運行的,要想讓它能夠發現磁盤分區并進行管理和使用,必須把這些分區的屬主設置成Oracle。
<2>可通過兩種方式創建ASM磁盤,一種是裸設備,一種是ASMLib方式。
<3>使用裸設備創建的ASM磁盤參數可以這樣指定:
asm_diskstring='/dev/raw/raw1','/dev/raw/raw5' 或 asm_diskstring='/dev/raw/raw*'
<4>使用ASMLib方式創建的ASM磁盤參數可以這樣指定即"ORCL:磁盤名"格式:
asm_diskstring='ORCL:VOL1','ORCL:VOL2' 或 asm_diskstring='ORCL:VOL*'
#######################
配置裸設備
配置裸設備我就不詳細描述了,下面只是給出命令。我的博客里也有相關的文章。注意的是配置完裸設備需要把裸設備的屬主改成Oracle,操作系統版本不同,配置稍有差別:
(1)對磁盤分區 fdisk -l /fdisk /dev/sdb
(2)編輯rawdevices配置文件,添加裸設備、塊設備的綁定條目
vi /etc/sysconfig/rawdevices
/dev/raw/raw1 /dev/sdb1
(3)啟動rawdevices服務 service rawdevices start
(4)配置隨系統自動啟動 chkconfig rawdevices on 一般默認是都on
(5)確認rawdevices服務啟動 service rawdevices status
(6)查看裸設備 raw -qa或直接cd /dev/raw;ls
(7)修改權限 cd /dev/raw;chown oracle:dba raw*
設置權限的時候 chown 命令重啟系統后會失效,可以把此命令配置在/etc/rc.local中。
#######################
ASMLib方式
使用ASMLib就不需要創建裸設備,可以直接在塊設備上創建(當然也可以裸設備上創建)。
(1)根據操作系統內核版本下載安裝 rpm -ivh oracleasm*.rpm
(2)配置驅動 /etc/init.d/oracleasm configure
(3)確認配置成功,ASMLib被加載#3種方法
--確認ASMLib被加載
lsmod |grep asm
--確認系統內存中存在oracleasmfs文件系統
cat /proc/filesystem
--確認oracleasmfs被掛載
df -ha
(4)創建ASM磁盤
/etc/init.d/oracleasm createdisk VOL1 /dev/sdb1 ...
(5)檢查ASM磁盤是否創建成功(ASMLib方式的磁盤)
cd /etc/init.d/oracleasm listdisks
(6)查看每個ASM磁盤對應的物理設備
/etc/init.d/oracleasm querydisk VOL1
4.ASM的存儲結構
ASM的存儲我們需要明白兩點:
<1>每個磁盤組都有一個ASM文件系統。
<2>ASM磁盤組自身就帶有條帶化和鏡像功能。
在使用ASM存儲的數據庫實例與普通采用文件系統的數據庫實例其存儲結構有所不同,在采用ASM存儲的數據庫實例中其RDBMS部分仍然采用tablespace,segment,extent這種結構來組織空間,這與傳統的方式一樣.所不同的是extent不再對應到data block,而是對應 到ASM的AU(Allocation Unit),空間的分配不再以data file形式,而是ASM file,這一點也證明了ASM 文件系統的存在.
ASM存儲特點:
<1> asm可以把多個磁盤分區(asm disk)集合成一個磁盤組(asm diskgroup)提供給RDBMS使用。對于RDBMS而言,ASM DiskGroup和普通的磁盤沒有區別,都可以在上面創建文件。使用asm存儲隔離了RDBMS實例對底層存儲技術的依賴,RDBMS只專心自己的事務功能即可,而不必關心底層存儲的實現細節。
<2> 一個Disk Group有1到多個ASM DISK組成,一個ASM DISK只能屬于一個Disk Group。
<3> 一個Disk Group中可以包含多個Disk File,但是一個Disk file只能在一個Disk Group內,每個Disk File會在ASM Disk間平均分配,分散IO以提高性能。
<4> 如果磁盤組空間不夠,可以動態向磁盤組中添加、刪除磁盤,然后ASM重新條帶化數據文件,而所有這些對RDBMS都是透明的。
<5> ASM還提供了卷管理器才有的鏡像保護功能,這種鏡像是在ASM file級別的,而不像其他的卷管理器是在卷級別。
<6> ASM把asm disk劃分為若干存儲單元叫作Allocation Unit(AU);一般每個AU是1MB。
<7> 數據庫仍然使用extent作為基本單位,extent是RDBMS的內容,需要對應到ASM的AU,extent和AU的對應關系一般為1:1,但是如果使用了ASM的冗余功能,關系就變成了1:2或1:3(叫作2-way或3-way mirroring)。
<8> 數據庫仍然是利用extent map來操作數據。在傳統的存儲方式中,extent map是從數據文件中獲得的;而在ASM環境中,這個extent map不是從數據文件中獲得,
而是從ASM實例獲得。
#==============================
什么extent map: 在數據庫中 Data file和segment的空間分配、擴展都不是以Data Block為單位的,而是以Extent為單位,這個extent大小在創建表空間的時候指定;整個表空間的所有extent信息就構成了extent map。根據extent map是記錄在數據字典中還是記錄在數據文件中,又可以分為數據字典和本地管理兩種管理方式,在Oracle10g以后,缺省的方式都是本地管理。
<9> 數據庫實例從asm獲得extent map來操作extent map后,后續的讀寫操作直接操作磁盤,而不再經過ASM。
<10> asm實例只負責對asm磁盤組的維護,包括創建、刪除磁盤組,添加、刪除磁盤;而不負責數據文件的讀寫,這些操作由數據庫實例完成。
5.RDBMS和ASM之間的交互
當ASM實例掛載一個磁盤組之后,ASM會把Disk Group Name、ASM Instance Name、Oracle Home Path等信息注冊到CSS,這些信息會被RDBMS用來構造Connect String。
當RDBMS啟動過程中需要訪問某個ASM File時,RDBMS會和CSS聯系,從CSS獲得Connect String,然后發起一個到ASM實例的連接,這條ASM和 RDBMS實例之間的初始連接叫做Umbilicu(臍帶),只要RDBMS打開ASM File,這個連接就會保持活動。直到所有ASM File都被RDBMS關閉后,這個連接才會關閉。在RDBMS一端,這個連接是ASMB后臺進程;而在ASM方面,是一個前臺進程,叫Umbilicus Forground(UFG).ASM和RDBMS通過這個連接發送互動信息。
如果檢查LISTENER中ASM實例的注冊信息,可以看到ASM不是OPEN狀態,而是以BLOCKED狀態注冊的。BLOCKED狀態禁止了通常方式的數據庫連接,從而確保所有連接都是通過ASMB后臺進程的路由完成,保證了ASM操作的安全性。
創建ASM文件的過程如下:
<1>、用戶在RDBMS中輸入create file命令;
<2>、RDBMS會產生一個前臺進程去連接ASM實例的進程;
<3>、創建文件的指令會通過這個連接交給ASM實例;
<4>、ASM實例根據指令創建文件,從磁盤中分配AU;ASM會根據指令中指定的template或Diskgroup默認的template來決定文件的冗余、條帶策略;
<5>、AU分配完成后,ASM就把這個文件的extent map發送給RDBMS;ASM創建一個COD記錄以跟蹤目前這個掛起的操作;
<6>、RDBMS發起IO操作,初始化這個ASM File;這時候不需要ASM介入;
<7>、初始化完成后,RDBMS向ASM發送commit請求;
<8>、ASM接到commit請求后,ASM的LGWR進程把ACD change Record 寫入到ACD Directory;然后ASM的DBWR進程把Allocation Table、File Directory、Alias Directory異步寫回磁盤;
<9>、如果RDBMS放棄創建,ASM會使用COD(相當于ASM中的回滾段)回滾文件操作。回滾操作會把Allocation Entries標志為free,釋放File Directory中的條目。
ASM File的打開和IO過程
<1>、RDBMS向ASM Instacne發生file-open請求
<2>、ASM查看ASM SGA中是否存在相應的Extent Map,如果有則直接通過ASMB把Extent Map發生給RDBMS,如果沒有則從File Directory,再通過ASMB把Extent Map發生給RDBMS
<3>、在10g中ASM會把整個ASM FILE的extent map都發生給RDBMS,在11g中只會返回前60個Direct Extent,Indirect Extent會在需要時載入。
<4>、ASM FILE的整個IO過程由RDBMS直接操作ASM FILE不需要ASM實例介入
刪除ASM File的過程
<1>、RDBMS實例想ASM實例發出刪除請求
<2>、ASM創建COD記錄用于回滾操作,接著標記allocation table中的條目為free,釋放File directory記錄,
刪除alias direcotry中的別名記錄。
<3>、如果此時ASM實例崩潰,則利用COD記錄進行回滾
6.ASM、RDBMS、CSS關系
在ASM實例與RDBMS實例運行過程中,CSS起到了重要的作用。我們知道存儲是由ASM實例維護的,但是RDBMS在運行過程中,并是不是所有的讀寫都要借助ASM實例,RDBMS實例只在打開數據文件時需要從ASM實例獲得Extent Map信息,并把這些信息保存在SGA中。而以后的數據讀寫都是直接操作存儲的。因此如果ASM實例終止,必須關閉所有使用該ASM的RDBMS實例,以確認這些RDBMS實例不能操作該ASM管理的存儲上的數據,也就是要進行IO隔離(IO Fencing)。
ASM實例啟動時,需要在CSS中注冊,而所有實用ASM存儲的RDBMS實例啟動時,也要像CSS注冊,同時從CSS獲得ASM的連接串。RDBMS實例和ASM實例是通過ASM實例端的UFG和RDBMS實例端的ASMB進程組成的通道進行通信。
如果ASM實例Crash,UFG就會終止RDBMS的ASMB進程,對于RDBMS而言,這個進程是關鍵進程,其終止會導致RDBMS的終止。
ASM進程和RDBMS進程除了主動向CSS注冊,CSS也要跟蹤兩個實例的IO的健康狀況,如果RDBMS的實例終止,CSS通知ASM,ASM實例就會代替RDBMS實例執行一些資源回收釋放工作。ASM實例將不受影響仍然正常運行。
7.ASM別名
先來了解一下OMF:
OMF,全稱是Oracle_Managed Files,即Oracle文件管理,使用OMF可以簡化管理員的管理工作,不用指定文件的名字、大小、路徑,
其名字,大小,路徑由oracle 自動分配。在刪除不再使用的日志、數據、控制文件時,OMF也可以自動刪除其對應的OS文件。
想使用OMF需要設置3個參數,我們可以根據需要對這三個參數設置,三個參數作用不解釋了
db_create_file_dest
db_create_online_log_dest_n
db_recover_file_dest
ASM別名可以看作是OMF在ASM上的擴展,它定義了各種文件在ASM磁盤上的存放位置,因此ASM file的存放路徑和文件命名是循序特定的格式的,格式如下:
+diskgroup_name/database_name/database file type/tag_name.file_number.incarnation
這個完整的名稱叫做FQDN(Fully Qualified Filename Notation)。但是FQDN對于DBA來說不容易記憶,因此Oracle又提供了ASM Alias來方便管理和記憶。
ASM別名的目的就是為了方便管理和記憶,所以沒有太多的道理可講,但是在使用上有些小技巧需要注意。別名即可以在文件創建之初就指定,也可以在文件創建之后再補上,兩者略有區別。
創建ASM別名兩種方法:
<1>在RDBMS中創建數據文件時就指定別名。
create tablespace test datafile '+data/test.dbf' size 10m;
<2>在ASM中對已有的ASM文件創建別名。
alter diskgroup data add alias '+data/test.dbf' for '+data/ORCL/datafile/test.273.660075820'
這兩種方式的區別在于,后者指定的別名對于數據庫不可見。
8.ASM的限制
目前ASM只支持數據庫文件(包括控制文件、spifle、數據文件、日志文件、備份文件),還不支持其他文件。ASM會檢查每個文件的文件頭,只有符合要求的才能保存到ASM 中,對于不能識別的文件報ORA-27047:"unable to read the header block or the file"錯誤。
上述就是小編為大家分享的Oracle ASM的概念以及工作原理是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。