Oracle數據庫ASM功能詳解

1什麼是ASM

        ASM全稱爲Automated Storage Management,即自動存儲管理,它是自Oracle10g這個版本Oracle推出的新功能。這是Oracle提供的一個卷管理器,用於替代操作操作系統所提供的LVM,它不僅支持單實例配置,也支持RAC這樣的多實例配置。將給Oracle數據庫管理員帶來極大的方便,ASM可以自動管理磁盤組,並提供數據冗餘和優化。特別是對於企業極的大型數據庫管理員來說,可以使管理員可以從管理成百上千個數據文件這些瑣碎的日常事務中解脫開來,以便處理其它更爲重要的事務上去。

        在Oracle 10g這個版本之前,管理一個大型數據庫成百上千個的數據文件對數據庫管理員來說是一個既無技術含量又十分枯燥的工作,這要求數據庫管理員要熟悉一些系統的LVM的相關知識,做好磁盤規化,LV的條帶等相關的系統方面的相關操作。而使用自動存儲管理將大大減輕這方面的工作量,數據庫管理員只需要管理少數幾個磁盤組即可。一個磁盤組是ASM管理的一個邏輯單元,由一組磁盤設備組成。我們可以定義一個磁盤組作爲數據庫的默認磁盤組,Oracle會自動管理存儲,包括創建、刪除數據文件等。Oracle會自動將這些文件與一個合適的數據庫對象做關聯,這樣我們在管理這些對象時只需要提供對象的名稱,而無需像以前那樣提供詳細的文件名。

        ASM提供了很多有用的存儲技術,如RAID和LVM(邏輯卷管理)等。像這些技術一樣,ASM允許你在一組獨立的磁盤上創建一個單獨的磁盤組。這樣就實現了單個磁盤組的I/O均衡。同時ASM還實現了條帶化(Striping)和磁盤鏡像(Mirroring)以提高I/O的性能和數據可靠性。與RAID或LVM不同的是,ASM是在文件級實現的條帶化和鏡像,這樣的實現方式給用戶帶了很大選擇自由度,我們可以在同一個磁盤組中對不同的文件配置不同的存儲屬性,實現不同的存儲方式。

 

 

2 11g中ASM都有哪些新特徵

2.1 快速重新同步(ASM Fast Mirror Resync)

        短暫的磁盤路徑發生問題時,恢復ASM磁盤組(DISK GROUP)的允餘性是很費時間的,特別是這種恢復操作需要重新佈局整個磁盤組的情況下。ASM快速磁盤重新同步這個新特徵能顯著減少重新同步一塊壞磁盤時這種情況的時間,當你更換了壞磁盤,ASM能夠快速的同步ASM磁盤的extent。

        任何使磁盤組臨時不可用的問題被認爲是暫時的失效,這是ASM快速重新同步新特徵可以恢復的。磁盤路徑失效,例如接口線問題,主機適配器問題,磁盤控制器問題,或者是磁盤電源問題這些都能引起瞬時失效。缺省的情況下,當一塊磁盤脫機時,ASM會立刻移出該磁盤。ASM快速再同步功能夠記錄脫機磁盤在脫機期間該磁盤上區的所有的變化,當磁盤被修復或再次聯機時,這期間更改的extent能夠被快速的重新同步到剛纔失效的這些磁盤中。

        你可以設定DISK_REPAIR_TIME這個屬性使失效磁盤在被修復和再次聯機這段時間內重新整理這樣的操作不發生。這個時間可以以分鐘(m或M)或者小時(h或H)爲單位,如果你不指定時間單位,缺省的時間單位爲小時。如果DISK_REPAIR_TIME這個屬性沒有設定,其缺省值爲3.6小時。需要注意的是,這個缺省值適用於磁盤被設定爲脫機模式而操作語句沒有DROP AFTER子句這樣的情況。大部分來說環境,3.6個小時這個DISK_REPAIR_TIME缺省屬性數值應該都是合適的。

        注意:

        使用這項新功能,ASM磁盤組的兼容性需要設定至11.1或更高。

        例:

        CREATE DISKGROUP asmdskgrp1 DISK '/dev/raw/*'
        SET ATTRIBUTE 'compatible.rdbms' = '11.1', 'compatible.asm' = '11.1';

        只有當包含脫機磁盤的磁盤組再次被掛上,消逝時間(自磁盤被設定成脫機模式後)都是增加的,V$ASM_DISK的REPAIR_TIME這列顯示的是脫機磁盤在被刪除之前所剩餘的時間(單位:秒),當指定的時間到達後,ASM刪除磁盤,可以用帶有DROP AFTER的ALTER DISKGROUP DISK OFFLINE語句來覆蓋這個屬性。

        注意:

        DROP AFTER也是11g的新特徵。

        如果一條ALTER DISKGROUP SET ATTRIBUTE DISK_REPAIR_TIME操作的磁盤組含有脫機的磁盤,這個屬性只對當前那些非脫機模式的磁盤是生效的。

        當一塊脫機磁盤被第二次執行脫機操作,消逝時間會被重置並重新開始計算。如果另一個時間這塊磁盤又被執行了DROP AFTER操作,上一個值會被覆蓋並且新值生效。不能用ALTER DISKGROUP DROP DISK語句刪除處於脫機狀態的磁盤,這樣操作時會報錯。如果在某時情況,例如磁盤不能夠被修復,需要在DISK_REPAIR_TIME到達前把磁盤刪除時,可以再次執行帶有DROP AFTER子句的OFFLINE語句,DROP AFTER指定0H或0M,表示立刻刪除。

        你可以用ALTER DISKGROUP來設定磁盤組的DISK_REPAIR_TIME屬性,可以是分鐘,也可以是小時,例如4.5小時或270分鐘,例如:

        ALTER DISKGROUP dg01 SET ATTRIBUTE 'disk_repair_time' = '4.5h'
        ALTER DISKGROUP dg01 SET ATTRIBUTE 'disk_repair_time' = '270m'

        在你修復磁盤後,運行ALTER DISKGROUP DISK ONLINE這條SQL語句可以使磁盤組恢復到聯機狀態,新的讀寫操作都可以正常進行了,這條語句也觸發把磁盤維修期間內更改的extent從磁盤組冗餘的數據重新同步到剛纔失效的這些磁盤中。

 

2.2 ASM滾動升級

        在ORACLE11g及之後的版本,你可以把ASM的集羣置爲"滾動升級"模式,充許不同版本的ASM結點共同工作。滾動升級"模式中的每個結點能夠獨立的升級或打補丁,而不會影響到數據庫的使用,因些其很大的提升數據庫的正常運行時間。需要注意的是你只可以對ORACLE11g及之後的版本進行"滾動升級",換句話說,你不能用這種功能把ORACLE10g的數據庫升級到11G的。

        在進行滾動升級前,你的環境也一定要做一定的準備的。舉例來說,如果你使用了ORACLE Clusterware軟件,在你開如做滾動升級前,Clusterware也一定要完整的升級到下一個滿足要求的版本。當然,做Clusterware升級時也應當用滾動的方式,更大的確保高穩定性和最大的正常運行時間。

        在對一個結點的ASM軟件打補丁或進行升級之前,必須把ASM集羣置爲滾動升級模式,這允許開始升級和操作你的環境在多個軟件版本的模式,語句如下:

        ALTER SYSTEM START ROLLING MIGRATION TO number;

        number是由版本號、發行號、更新號、端口發行號和端口更新號這幾部分組成的,中間以逗號分開,例如11.2.0.0.0。

        實例在運行這條語句時會檢查你指定的number與當前已安裝的軟件版本是不是兼容。當升級開始後,ASM實例只有如下的一些操作纔是充許的:

        * 磁盤組掛載和卸載

        * 數據庫文件打開,關閉,重新設定尺寸和刪除

        * 限制訪問ORACLE自帶的視圖和包,所有的全局視圖都是失效的

        在滾動升級開始後,可以任意一個宕掉ASM實例來進行軟件升級,升級完的ASM實例在啓動後會自動重新加入ASM集羣。當集羣中的所有實例都完成升級到最新的軟件版本後,你就可以結束滾動升級模式了。

        如果一塊磁盤在ASM實例進行滾動升級時是脫機的,那麼直到升級結速這塊磁盤都會保持脫機的狀態,而且直到ASM集羣回到正常模式觸發刪除磁盤的記時器也是停止的。

        如果升級過級出現問題,可以用同樣的過程回滾結點的軟件到之前的版本。集羣的任一地方有數據重整操作,升級會失敗,所以必須等數據重整操作完成纔可以開始滾動升級。另外,只要集羣中有一個結點是活動的,滾動升級狀態是保留的。

        如果一個集羣正在進行滾動升級時一個新的ASM實例加進來,新的實例會被告知集羣正處在滾動升級模式,你可以用如下的SQL語句查詢ASM集羣環境的狀態:

        SELECT SYS_CONTEXT('sys_cluster_properties', 'cluster_state') FROM DUAL;

        如果ASM集羣所有的實例都停了,那麼當任何一個ASM實例重新啓動,這個實例都會脫離滾動升級模式。如要實例都重新啓動後  還要進行升級,必須重新開始滾動升級操作。

        當滾動升級完成後,運行如下的SQL:

        ALTER SYSTEM STOP ROLLING MIGRATION;

        發出這條語句後,ORACLE做了如下的一些操作:

        * 校驗ASM集羣的所有成員的軟件版本是不是相同,如果一個或幾個實例運行在不同的軟件版本,這條語句會報錯,集羣繼續處在滾動升級模式.

        * 使集羣的所有實例都脫離滾動升級模式,集羣開始全功能工作

        * 如果設定ASM_POWER_LIMIT參數允許數據重整理,因滾動升級而被阻塞的數據重整理操作會重新開始。

 

 

2.3 爲ASM管理員新增了SYSASM權限和OSASM操作系統用戶組

        在ORACLE10g這個版本,ORACLE沒有爲ASM管理員定製相應的角色,ASM管理員以SYSDBA角色進行管理工作,在實際工作中ASM管理員與數據庫管理員可能是不同的兩個或幾個人完成的,相對來說權限界定不清晰.11g這一新特徵引入SYSASM這一新權限目的就是爲了清晰ASM管理員與數據庫管理員的界面,防止越權操作的發生,使ASM管理員更好的進行ASM管理工作.

        這一新特徵同時在操作系統中也爲ASM新增了OSASM用戶組,OSASM這個組是專門爲ASM設計的,可以通過操作系統授權,被授權的這個組成員本地連接具有SYSASM權限,能夠以SYSASM角色進行全權限的ASM管理工作。最初,只有ASM的安裝用戶是這個組的成員,在後繼的工作,你可以添加新的用戶到OSASM這個用戶組,使新用戶有ASM管理的全部權限。

        需要注意的是,在ORACLE11g Release1的這個版本,系統OSDBA組的成員,連入數據庫據有SYSDBA的權限,這樣的用戶仍然可以連接並管理ASM的實例,但相信在後續的版本中有SYSDBA權限的用戶不會被授權有ASM實例的管理權限。

2.4 ASM 可擴展性和性能的增強

        ASM文件區管理在11g都有改進,體現在性能的提升和顯著的減少用於存儲文件區的SGA內存方面。當ASM的文件在大小上增加時,每一個區的大小也會自動的增加,因此,會有需要很少的指向區指針描述文件。當訪問20GB至128TB大小的ASM文件時11g的這個新特徵會提升性能。當然,這樣的文件通常是非常大的數據庫(VLDBs)所用的。

        除此之外,當你創建新的磁盤組時,你現在有多個分配單位大小選項,例如1, 2, 4, 8,16, 32, 和64(MB)。依據數據庫的負載和存儲系統的類型,選擇大的分配單位可能會獲得明顯的性能提升。

        磁盤組存儲的ASM文件的內容是由N個數據區組成的,數據區存儲在獨立的磁盤上。區包含一個或多個分配單位(AU).爲適應逐漸增大的大文件,ASM使用變化大小的區。

        變化大小的區能夠支持更大的ASM文件,減少大數據庫對SGA內存的使用,並且提升文件創建和打開操作的性能。一個ASM文件開始的一個區是由一個分配單位組成的。當文件大小增加時,如果大小超出預先定義的值,新的區大小也會增加到8分配單位,然後新的區大小增加到64個分配單位。對於新創建的文件,這一特徵自動生效的。

        分配單位的大小爲多少在磁盤組建立的時侯確定,可以爲1,2,4,8,16,32及64MB,當ASM文件的大小範圍在1到20,000個區這個量級時,每個區的大小與分配單位的大小相等;ASM當文件大小超出20,000個區,到20,001到40,000個區這個範圍,新的區的大小分自動增至8個分配單位大小;再有當ASM當文件大小超出40,000個區,,新的區的大小分自動增至64個分配單位大小。

        圖一表示的是含自塊磁盤的磁盤組,文件由每個區1AU增至8AU的變化狀況,在這個配置中,ASM沒有做文件鏡像的。

 

        圖一 磁盤組中ASM文件區分配圖

 

2.5 新的ASM 命令行 (ASMCMD)命令和選項。

        ASMCMD有下列的四個新的命令: lsdsk、md_backup、md_restore 和remap。除此之外,你還能使用帶有新選項的ls和lsdg命令。下面描述一下這四個新的ASM命令:

        lsdsk -不論是否有一個ASM的實列正在運行,這個命令都能列出ASM磁盤的信息。當系統管理員或存儲管理員想查看一下ASM實例都用了哪些磁盤時這個命令是非常有用的。

        md_backup和md_restore- 這兩個命令使能能夠用相同的磁盤路徑、磁盤名、失敗組、屬性、模板及目錄結構別名來重新建立已經存在的磁盤組。你可以使用md_backup備份磁盤組的環境,在出現問題的時侯用mk_restore來恢復相應的磁盤組。

        Remap-你可以使用這個命令重映射或者回復normal及high redundancy模式ASM磁盤組中的壞塊,ASM讀取ASM映像好的拷貝中相應的塊,並且把這些塊重新寫回到磁盤組中一個替代的位置。

2.6 磁盤組兼容性方面新的屬性

2.6.1磁盤組兼容性概要

        爲使用一些ASM的新功能,你可以使用兩個磁盤組兼容性方面的屬性,COMPATIBLE.RDBMS和COMPATIBLE.ASM。這些屬性指定據庫和ASM 各自使用磁盤組所需的最小的軟件版本。缺省情況下,這兩個屬性都被設成10.1,如果你想利用新特徵必須推進這些屬性。

        兼容性屬性設置成早先發行的版本可以使客戶端訪問高版本的磁盤組,例如,Oracle 10g的客戶端能夠訪問Oracle11g的ASM磁盤組。

        ASM 和Oracle 數據庫磁盤組兼容性屬性設置決定了系統可使用的最小的ASM和Oracle數據庫軟件版本。例如, 如果ASM 兼容性是11.1, 並且Oracle 數據庫兼容性是10.1, 那麼ASM 軟件版本必須至少是11.1, 並且Oracle 數據庫客戶軟件版本必須是至少10.1 。二個屬性設置是compatible.asm 和compatible.rdbms。

        ASM 的軟件版本決定最近創建的磁盤組的缺省兼容性,當你以CREATE DISKGROUP SQL語句創造磁盤組時,可以忽略磁盤組兼容性設置。另外,可以使用ALTER DISKGROUP SQL語句爲現有的磁盤組改變兼容性設置。磁盤組兼容性設置只能逐漸升高,你無法恢復回一個更低的兼容性設置。

2.6.2 COMPATIBLE.ASM和COMPATIBLE.RDBMS

        兼容性屬性設置是通過這兩個參數完成的。COMPATIBLE.ASM屬性決定任一個ASM 事例使用一個磁盤組的最小的軟件版本。這個設置並且決定數據磁盤上ASM原數據的數據結構的格式。文件內容的格式由數據庫實例決定的。對於Oracle 11g版本中的ASM, 10.1 是其缺省的設置值。爲更好的完成磁盤組兼容性設置,應設置之前COMPATIBLE.RDBMS前先設置COMPATIBLE.ASM屬性。

        數據庫使用的所有磁盤組的COMPATIBLE.RDBMS屬性值必須小於或等於數據庫的COMPATIBLE初始參數設置值,對於Oracle 11g版本中的ASM, 10.1也是COMPATIBLE.RDBMS屬性的缺省值。舉例來說, 如果數據庫兼容初始化參數被設置成11.1.0, 那麼COMPATIBLE.RDBMS 只能被設置成10.1 和11.1 之間的任一值。

2.6.3 設置磁盤組兼容性的方法

        可能通過CREATE DISKGROUP or ALTER DISKGROUP兩個語句設置磁盤組的兼容屬性。

        使用 CREATE DISKGROUP建立磁盤組時指定兼容屬性

        以下例子建立一個正常冗餘盤磁盤組asmdskgrp1,ASM 兼容屬性設置成10.2 ,與數據庫兼容性屬性取默認值(假定COMPATIBLE.RDBMS 缺省小於或等於10.2):

        CREATE DISKGROUP asmdskgrp1 DISK '/dev/raw/*'
        SET ATTRIBUTE 'compatible.asm' = '10.2';

        以下例子建立一個正常冗餘盤磁盤組asmdskgrp2,ASM 兼容屬性設置成11.1 ,與數據庫兼容屬性取默認值(假定COMPATIBLE.RDBMS 缺省小於或等於11.1):

        CREATE DISKGROUP asmdskgrp2 DISK '/dev/raw/*'
        SET ATTRIBUTE 'compatible.asm' = '11.2';

        以下例子建立一個正常冗餘盤磁盤組asmdskgrp3,ASM 兼容屬性及與數據庫兼容屬性都取11.1:

        CREATE DISKGROUP asmdskgrp3 DISK '/dev/raw/*'
        SET ATTRIBUTE 'compatible.rdbms' = '11.1', 'compatible.asm' = '11.1';

        使用ALTER DISKGROUP SQL語句爲現有的磁盤組改變兼容屬性

        在磁盤組被創造了之後, 您能使用ALTER DISKGROUP SQL語句改變兼容屬性。使用ALTER DISKGROUP SQL語句在提交變動之前,需確保Oracle能提升指定盤組的兼容性。爲使進行ALTER DISKGROUP提升盤組兼容性而不減少數據庫和文件系統功能,所有影響的數據庫和文件系統都應當是在線的。

        舉例:

        ALTER DISKGROUP asmdskgrp4 SET ATTRIBUTE 'compatible.rdbms' = '11.1';
        ALTER DISKGROUP asmdskgrp5 SET ATTRIBUTE 'compatible.asm' = '11.1';

 

 

2.7 ASM 優先鏡像讀取

2.7.1優先鏡像讀取新特徵概要

        在擴展集羣中,如果遠程結點的訪問是不均衡的,這一新特徵對於提升性能是很有用的。這導致更好的存儲利用率,降低網絡負載。Oracle 10g中,ASM總讀一個鏡像區集的主要拷貝,我們知道這樣做的目的是爲了分散IO,提升性能。而對於一個磁盤組的一塊盤,對於某一個結點來說可能是本地盤,也可能是遠程盤,如果從主拷貝讀取數據,這個主拷貝又是遠程盤,顯然沒有本地盤效率高。不過在Oracle10g中是不能完成設定從哪塊盤讀取數據的,在11g中引入了ASM_PREFERRED_READ_FAILURE_GROUPS這個參數,即我們所談的ASM優先鏡像讀取新特徵,可以完成這樣的功能,如下再詳細說一下這個新特徵。

        當您配置ASM失敗組,它使結點從最靠近它的區讀取數據,這也許是最高效的,既使那個區是一個次要的區。換句話說,當次要區離結點較近時,你可以配置ASM 讀從一個次要區讀,而不是從較遠的主區讀。使用優先讀取失敗組對於擴展羣集來說是非常有用的。

        使用這個特徵, 在擴展的集羣相對這個結點的本地盤,Oracle推薦配置至少一個鏡像的區拷貝。然而在一個RAC數據庫中,爲一個結點被設定優先讀取的失敗組對另外的一個結點而言也許就是選程的,這倒不用擔心,每個實例優先讀取失敗組的參數設置是可以分別指定的。

        注意:

        默認情況下, 當您創造一個磁盤組, 磁盤組的每塊盤屬於一個失敗組。Oracle不推薦你爲使用磁盤組的每一個實例配置超過一個優先讀取失敗組。如果你爲每一個實例配置超過一個優先讀取失敗組, Oracle alter日誌會寫入警告信息。

2.7.2 配置和管理優先讀取失敗組

        要配置這個新特徵,需要設定ASM_PREFERRED_READ_FAILURE_GROUPS這個參數,參數爲失敗組的一個列表,這個參數通常是在集羣的ASM實例中被使用的,也是在集羣的ASM實例中 有效的,並且每個實例設定不同的值,其默認值爲NULL。參數的格式如下:

        舉例:

        diskgroup_name1.failure_group_name1, ...

        其中diskgroup_name表示的是磁盤組的名字,failure_group_name表示的是失敗組的名字。如果設定參數指定的磁盤組中並不存在相應的失敗組,ASM將忽略相應的失敗組。你可以以逗號分隔爲ASM_PREFERRED_READ_FAILURE_GROUPS參數設定多個值。

        舉例:

        ASM_PREFERRED_READ_FAILURE_GROUPS= = diskgroup_name.failure_group_name,diskgroup_name1.failure_group_name1...

2.8 ASM 快速的再平衡

        重新平衡操作發生在當磁盤組是在限制模式下,它消也除了Oracle RAC 環境裏鎖和解鎖extent map信息在ASM 事例之間的傳訊,因此提升了總體重新平衡的吞吐量。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章