[Oracle10G新特性]_08.自動存儲管理
?
??? 關(guān)于10g的ASM特性,我在以前的《Oracle ASM介紹》這篇轉(zhuǎn)載中就介紹過了,而且比較詳細。相比較而言,這次的這篇文章會比較注重細節(jié)的操作一些,如果需要了解ASM的屬性和功能,還是看原先的文章比較好一些。當然,這里要注意的是,可以通過v$asm_這一組動態(tài)視圖來查看和管理你的ASM性能及狀態(tài),這是所有DBA都喜聞樂見的一種形式。
?
??? 礙于環(huán)境的限制,一直都沒有機會創(chuàng)建一個ASM的數(shù)據(jù)庫,不過聽說ASM的Bug還是很多的,應(yīng)該到現(xiàn)在為止還是比較少的公司會使用的吧,所以對于一些錯誤就很難發(fā)現(xiàn)了,在這里學習一下也只不過是純理論的,等以后實際用到在詳細了解一下吧。OK。
?
----------------------------------------------------------------------
?
自動存儲管理
?
數(shù)據(jù)庫管理員終于可以將自己從單調(diào)而常用的增加、移動和刪除存儲磁盤的任務(wù)中解脫出來了 — 并且無需增加額外的成本。
?
??? 假設(shè)您剛得到一個新的 Oracle 數(shù)據(jù)庫的全新的服務(wù)器和存儲子系統(tǒng)。除操作系統(tǒng)配置之外,在您能夠創(chuàng)建數(shù)據(jù)庫之前,最重要的工作是什么?很明顯,就是創(chuàng)建存儲系統(tǒng)布局 — 或更具體地說,選擇一種保護級別,然后構(gòu)建必需的冗余磁盤陣列 (RAID) 組。
?
??? 在大多數(shù)數(shù)據(jù)庫安裝中安裝存儲器要花費大量的時間。從多種可能中選擇一種特定的磁盤配置需要仔細的規(guī)劃和分析,并且最重要的是,需要詳細了解存儲技術(shù)、卷管理器和文件系統(tǒng)。在這個階段的設(shè)計任務(wù)可以大致說明如下(注意這個列表只是代表性的,任務(wù)將隨配置而變化):
?
??? 1、確認存儲器在操作系統(tǒng)級通過了認證,并確定冗余保護的級別,該級別可能已經(jīng)提供(硬件 RAID)。
??? 2、集中和構(gòu)建邏輯卷組,并確定分段或鏡像是否也是必需的。
??? 3、在邏輯卷管理器創(chuàng)建的邏輯卷上構(gòu)建文件系統(tǒng)。
??? 4、設(shè)定所有權(quán)和權(quán)限,以便 Oracle 進程可以對設(shè)備進行打開、讀和寫操作。
??? 5、在文件系統(tǒng)上創(chuàng)建數(shù)據(jù)庫,如果可能的話務(wù)必在非 RAID 的位置上創(chuàng)建特殊文件,例如重做日志、臨時表空間和重做表空間之類的特殊文件。
?
??? 在大多數(shù)公司中,這些步驟大部分是由對存儲系統(tǒng)非常了解的某些人來執(zhí)行的。這里的“某些人”通常不是數(shù)據(jù)庫管理員。
?
??? 不過,請注意所有這些任務(wù) — 分段、鏡像、邏輯文件系統(tǒng)構(gòu)建 — 的執(zhí)行都只支持一種類型的服務(wù)器,Oracle 數(shù)據(jù)庫。因此,Oracle 自己提供一些技巧來簡化或改進這個過程不是很有意義嗎?
?
??? Oracle Database 10g 正是這么做的。一個新的和激動人心的特性 — 自動存儲管理 (ASM) — 使 DBA 能夠完全在 Oracle 框架內(nèi)執(zhí)行上述的許多任務(wù)。利用 ASM,您可以僅利用 Oracle Database 10g 軟件自帶的功能(無需額外的成本)來將一組磁盤轉(zhuǎn)換成一個高可伸縮的(重點是在“可伸縮”上)和高性能的文件系統(tǒng)/卷管理器。并且您不需要是一個磁盤、卷管理器或文件系統(tǒng)管理方面的專家。
?
??? 在本部分中,您將了解到關(guān)于 ASM 大量的基礎(chǔ)知識,以開始在實際的應(yīng)用程序中使用它。正如您的猜測,這個強大的特性無疑將引發(fā)全面的討論,篇幅所限,我們不能在此作過多介紹,如果您想了解更多的內(nèi)容,在結(jié)論部分列出了一些極好的信息來源。
?
ASM 是什么?
?
??? 假設(shè)您要在數(shù)據(jù)庫中使用 10 個磁盤。利用 ASM,您不需要在 OS 端創(chuàng)建任何東西,該特性將把一組物理磁盤集合成一個邏輯實體(稱為磁盤組)。磁盤組類似于一個分段(和可選鏡像)文件系統(tǒng),但具有重要的差異:它不是一個用于存儲用戶文件的通用文件系統(tǒng),并且它不進行緩沖。由于后面的原因,磁盤組提供了直接作為原始設(shè)備來訪問這個空間,并仍提供文件系統(tǒng)的便利性和靈活性的好處。
?
??? 邏輯卷管理器一般使用一個函數(shù)(如散列函數(shù))來將塊的邏輯地址映射到物理塊。計算使用 CPU 周期。此外,當增加一個新的磁盤(或 RAID-5 磁盤組)時,這種典型的分段函數(shù)需要重新定位整個數(shù)據(jù)集中的每一位。
?
??? 相比而言,ASM 使用一個特殊的 Oracle 例程來解決從文件區(qū)到物理磁盤塊的映射問題。這種設(shè)計除了定位文件區(qū)非常快速之外,還在增加或刪除磁盤時有所幫助,因為文件區(qū)的位置不需要調(diào)整。這個特殊的 ASM 例程類似于其它的文件系統(tǒng),必須運行此例程,ASM 才能工作,并且用戶不能進行修改。一個 ASM 例程可以在同一臺服務(wù)器上支持許多 Oracle 數(shù)據(jù)庫例程。
?
??? 這個特殊的例程只是一個例程,不是用戶可以在其中創(chuàng)建對象的數(shù)據(jù)庫。所有關(guān)于磁盤的元數(shù)據(jù)都存儲在磁盤組本身中,使得它們能夠盡可能地自我描述。
?
??? 那么概括地說,ASM 的優(yōu)點是什么?
?
??? ● 磁盤增加 — 增加磁盤變得非常容易。無需停機時間,并且文件區(qū)域自動重新分配。
??? ● I/O 分配 — I/O 自動分布在所有可用的磁盤上,無需人工干預(yù),從而減少了熱點出現(xiàn)的可能性。
??? ● 帶區(qū)寬度 — 在重做日志文件中分段可以細分(128K,以獲得更快的傳輸速率),對于數(shù)據(jù)文件,帶區(qū)則略大一些(1MB,以一次性傳輸大量的數(shù)據(jù)塊)。
??? ● 緩沖 — ASM 文件系統(tǒng)不進行緩沖,直接進行輸入/輸出。
??? ● 核心化的異步 I/O — 實現(xiàn)核心化的異步 I/O 無需特殊的設(shè)置,并且無需使用原始或第三方的文件系統(tǒng)(如 Veritas Quick I/O)。
??? ● 鏡像 — 如果硬件鏡像不可用,則可以容易地建立軟件鏡像。
?
?
逐步創(chuàng)建一個基于 ASM 的數(shù)據(jù)庫
?
??? 下面是如何創(chuàng)建一個基于 ASM 的數(shù)據(jù)庫的具體的示例:
?
???
1. 創(chuàng)建一個 ASM 例程
?
??? 通過指定下列初始化參數(shù),您可以利用數(shù)據(jù)庫創(chuàng)建助手來創(chuàng)建一個 ASM 例程:
?
INSTANCE_TYPE = ASM
?
??? 當服務(wù)器啟動時,您應(yīng)當啟動該例程,而當服務(wù)器關(guān)閉時,應(yīng)當最后關(guān)閉該例程。
?
??? 這個參數(shù)的默認值是 RDBMS,適用于常見的數(shù)據(jù)庫。
?
???
2. 創(chuàng)建磁盤組
?
??? 在啟動 ASM 例程后,利用可用的磁盤創(chuàng)建一個磁盤組。
?
CREATE DISKGROUP dskgrp1
EXTERNAL REDUNDANCY
DISK
'/dev/d1',
'/dev/d2',
'/dev/d3',
'/dev/d4',
... and so on for all the specific disks ...
;
?
??? 在上述命令中,我們使數(shù)據(jù)庫利用名稱為 /dev/d1、/dev/d2 等的磁盤創(chuàng)建了一個名稱為 dksgrp1 的磁盤組。您還可以在 DISK 子句中用通配符指定磁盤名稱,而不是分別給定磁盤。
?
DISK '/dev/d*'
?
??? 在上述命令中,我們指定了一個子句 EXTERNAL REDUNDANCY,它指示一個磁盤出現(xiàn)故障將使磁盤組停止工作。這通常是由硬件提供冗余(如鏡像)的情況。如果沒有基于硬件的冗余,則可以設(shè)置 ASM 來在磁盤組中創(chuàng)建一組特殊的磁盤(稱為 failgroup),以提供這種冗余。
?
CREATE DISKGROUP dskgrp1
NORMAL REDUNDANCY
FAILGROUP failgrp1 DISK
'/dev/d1',
'/dev/d2',
FAILGROUP failgrp2 DISK
'/dev/d3',
'/dev/d4';
?
??? d3 和 d4 不是 d1 和 d2 的鏡像,雖然看起來似乎是那樣。相反,ASM 使用所有的磁盤來創(chuàng)建一個容錯系統(tǒng)。例如,可能利用在 d4 上保留的一個備份來在 d1 中創(chuàng)建磁盤組上的一個文件。另一個文件可以利用 d2 上的備份在 d3 上創(chuàng)建。一個特定的磁盤出現(xiàn)故障,則允許使用另一個磁盤上的備份,以使操作可以繼續(xù)。例如,您可能丟失了磁盤 d1 和 d2 的控制器,ASM 將為全部故障磁盤組的區(qū)塊的拷貝建立鏡像,以保持數(shù)據(jù)完整性。
?
???
3. 創(chuàng)建表空間
?
??? 現(xiàn)在利用基于 ASM 的存儲器中的一個數(shù)據(jù)文件來在主數(shù)據(jù)庫中創(chuàng)建一個表空間。
?
CREATE TABLESPACE USER_DATA DATAFILE '+dskgrp1/user_data_01'
SIZE 1024M
/
?
??? 就這樣!創(chuàng)建過程完成了。
?
??? 注意磁盤組是如何作為一個虛擬文件系統(tǒng)使用的。這種方法不僅在數(shù)據(jù)文件中有用,在其它類型的 Oracle 文件中也有用。例如,您可以按以下方式創(chuàng)建在線重做日志文件
?
LOGFILE GROUP 1 (
'+dskgrp1/redo/group_1.258.3',
'+dskgrp2/redo/group_1.258.3'
) SIZE 50M,
...
??? 甚至存檔日志目標也可以設(shè)為一個磁盤組。與 Oracle 數(shù)據(jù)庫相關(guān)的全部內(nèi)容都可以在一個基于 ASM 的磁盤組中創(chuàng)建。例如,備份是 ASM 的另一大用途。您可以設(shè)置一組廉價的磁盤來創(chuàng)建一個數(shù)據(jù)庫的恢復(fù)區(qū),RMAN 可以使用這個恢復(fù)區(qū)來創(chuàng)建備份數(shù)據(jù)庫文件和存檔日志文件。(在下一個關(guān)于 Oracle Database 10g 中的 RMAN 的部分中,您將詳細了解如何使用這種功能來為您帶來好處。)
?
??? 請記住,無論 ASM 如何支持僅由 Oracle 數(shù)據(jù)庫創(chuàng)建和讀取的文件;它也不能替代一個通用的文件系統(tǒng),并且不能存儲二進制文件和純文本文件。
?
?
維護
?
??? 讓我們看看維護磁盤組所需的一些典型任務(wù)。您可能必須經(jīng)常在磁盤組 dskgrp1 中增加額外的磁盤來適應(yīng)不斷增長的需求。可以執(zhí)行下面的語句:
?
alter diskgroup dskgrp1 add disk '/dev/d5';
?
??? 要查明哪個磁盤在哪個磁盤組中,可以執(zhí)行下面的語句:
?
select * from v$asm_disk;
?
??? 該命令顯示了 ASM 例程為所有客戶機數(shù)據(jù)庫管理的所有磁盤。在這些磁盤中,您可能決定利用以下命令來刪除一個磁盤:
?
alter diskgroup dskgrp1 drop disk diskb23;
?
結(jié)論
?
??? ASM 的引進提供了顯著的價值,它使得在 Oracle 數(shù)據(jù)庫中管理文件變得非常容易。利用這個捆綁的特性,您可以從一組磁盤中容易地創(chuàng)建一個高可伸縮和高性能的存儲解決方案。任何動態(tài)的數(shù)據(jù)庫環(huán)境都需要添加、移動和刪除磁盤,ASM 提供了必需的工具集,使 DBA 從那些單調(diào)的任務(wù)中解脫出來。
?
?
?
?