轉: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"錯誤。
9.ASM相關的一些檢視和資料字典
V$ASM_DISK
V$ASM_DISK_STAT
V$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT
V$ASM_FILE
V$ASM_ALIAS
V$ASM_TEMPLATE
V$ASM_CLIENT
V$ASM_OPERATION
10.使用裸裝置配置ASM例項
http://www.cnblogs.com/myrunning/p/4270849.html
11.將檔案系統資料庫遷移到ASM中
http://www.cnblogs.com/myrunning/p/4270889.html
12.使用檔案模擬ASM磁碟
http://www.cnblogs.com/myrunning/p/4280845.html
參考:張曉明<<大話Oracle RAC>>
http://czmmiao.iteye.com/blog/1753396
http://blog.csdn.net/zq9017197/article/details/7635095
http://www.cnblogs.com/springside-example/archive/2011/08/30/2529664.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2151010/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 理解ASM的ExtentASM
- ASM之快速理解ASM
- ASM Failure Group的一點理解ASMAI
- 有關ASM和ASMM的理解ASM
- 如何理解ASM裡FAILGROUP的概念ASMAI
- 【轉】Oracle ASM介紹OracleASM
- 配置ASM磁碟-轉載ASM
- 學習ASM技術(七)--ASM檔案轉化ASM
- Automatic Storage Management (ASM)(轉)ASM
- Discover Your Missed ASM Disks(轉)ASM
- win32asm原理 (轉)Win32ASM
- 轉移表空間到ASMASM
- Flex ASM的配置和轉換FlexASM
- 理解static(轉)
- 將FileSystem轉換為ASM儲存ASM
- (譯)win32asm教程-7 (轉)Win32ASM
- (譯)win32asm教程-9 (轉)Win32ASM
- (譯)win32asm教程-8 (轉)Win32ASM
- (譯)win32asm教程-10 (轉)Win32ASM
- (譯)win32asm教程-11 (轉)Win32ASM
- (譯)win32asm教程-5 (轉)Win32ASM
- (譯)win32asm教程-6 (轉)Win32ASM
- ASM磁碟頭資訊備份,轉載ASM
- asm files,asm directories,asm templatesASM
- 【ASM】ASM資料檔案和OS檔案(FILESYSTEM)轉移方法總結ASM
- Win32ASM經驗點滴 (轉)Win32ASM
- (譯)win32asm例項-1 (轉)Win32ASM
- (譯)win32asm例項-3 (轉)Win32ASM
- AT&T x86 asm 語法 (轉)ASM
- [轉]Important ASM changes in 11g Release 2ImportASM
- 【轉】理解紅黑樹
- 理解spring (轉載)Spring
- 理解java的多形性(轉)Java
- ASM 翻譯系列第四十彈:理解ASM中 REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的含義ASMUI
- 使用dbms_file_transfer轉換ASM檔案ASM
- ASM 檔案與本地檔案的轉換ASM
- (轉)Oracle rac環境下清除asm例項OracleASM
- oracle10g中的asm的配置(轉)OracleASM