數(shù)據(jù)庫管理員終于可以將自己從單調(diào)而常用的增加、移動和刪除存儲磁盤的任務(wù)中解脫出來了 — 并且無需增加額外的成本。
假設(shè)您剛得到一個新的 Oracle 數(shù)據(jù)庫的全新的服務(wù)器和存儲子系統(tǒng)。除操作系統(tǒng)配置之外,在您能夠創(chuàng)建數(shù)據(jù)庫之前,最重要的工作是什么?很明顯,就是創(chuàng)建存儲系統(tǒng)布局 — 或更具體地說,選擇一種保護(hù)級別,然后構(gòu)建必需的冗余磁盤陣列 (RAID) 組。
在大多數(shù)數(shù)據(jù)庫安裝中安裝存儲器要花費(fèi)大量的時間。從多種可能中選擇一種特定的磁盤配置需要仔細(xì)的規(guī)劃和分析,并且最重要的是,需要詳細(xì)了解存儲技術(shù)、卷管理器和文件系統(tǒng)。在這個階段的設(shè)計任務(wù)可以大致說明如下(注意這個列表只是代表性的,任務(wù)將隨配置而變化):
• 確認(rèn)存儲器在操作系統(tǒng)級通過了認(rèn)證,并確定冗余保護(hù)的級別,該級別可能已經(jīng)提供(硬件 RAID )。
• 集中和構(gòu)建邏輯卷組,并確定分段或鏡像是否也是必需的。
• 在邏輯卷管理器創(chuàng)建的邏輯卷上構(gòu)建文件系統(tǒng)。
• 設(shè)定所有權(quán)和權(quán)限,以便 Oracle 進(jìn)程可以對設(shè)備進(jìn)行打開、讀和寫操作。
• 在文件系統(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 自己提供一些技巧來簡化或改進(jìn)這個過程不是很有意義嗎?
Oracle Database 10 g 正是這么做的。一個新的和激動人心的特性 — 自動存儲管理 (ASM) — 使 DBA 能夠完全在 Oracle 框架內(nèi)執(zhí)行上述的許多任務(wù)。利用 ASM ,您可以僅利用 Oracle Database 10g 軟件自帶的功能(無需額外的成本)來將一組磁盤轉(zhuǎn)換成一個高可伸縮的(重點(diǎn)是在 “ 可伸縮 ” 上)和高性能的文件系統(tǒng) / 卷管理器。并且您不需要是一個磁盤、卷管理器或文件系統(tǒng)管理方面的專家。
在本部分中,您將了解到關(guān)于 ASM 大量的基礎(chǔ)知識,以開始在實(shí)際的應(yīng)用程序中使用它。正如您的猜測,這個強(qiáng)大的特性無疑將引發(fā)全面的討論,篇幅所限,我們不能在此作過多介紹,如果您想了解更多的內(nèi)容,在結(jié)論部分列出了一些極好的信息來源。
ASM 是什么?
假設(shè)您要在數(shù)據(jù)庫中使用 10 個磁盤。利用 ASM ,您不需要在 OS 端創(chuàng)建任何東西,該特性將把一組物理磁盤集合成一個邏輯實(shí)體(稱為磁盤組)。磁盤組類似于一個分段(和可選鏡像)文件系統(tǒng),但具有重要的差異:它不是一個用于存儲用戶文件的通用文件系統(tǒng),并且它不進(jìn)行緩沖。由于后面的原因,磁盤組提供了直接作為原始設(shè)備來訪問這個空間,并仍提供文件系統(tǒng)的便利性和靈活性的好處。
邏輯卷管理器一般使用一個函數(shù)(如散列函數(shù))來將塊的邏輯地址映射到物理塊。計算使用 CPU 周期。此外,當(dāng)增加一個新的磁盤(或 RAID-5 磁盤組)時,這種典型的分段函數(shù)需要重新定位整個數(shù)據(jù)集中的每一位。
相比而言, ASM 使用一個特殊的 Oracle 例程來解決從文件區(qū)到物理磁盤塊的映射問題。這種設(shè)計除了定位文件區(qū)非??焖僦?,還在增加或刪除磁盤時有所幫助,因?yàn)槲募^(qū)的位置不需要調(diào)整。這個特殊的 ASM 例程類似于其它的文件系統(tǒng),必須運(yùn)行此例程, ASM 才能工作,并且用戶不能進(jìn)行修改。一個 ASM 例程可以在同一臺服務(wù)器上支持許多 Oracle 數(shù)據(jù)庫例程。
這個特殊的例程只是一個 例程 ,不是用戶可以在其中創(chuàng)建對象的數(shù)據(jù)庫。所有關(guān)于磁盤的元數(shù)據(jù)都存儲在磁盤組本身中,使得它們能夠盡可能地自我描述。
那么概括地說, ASM 的優(yōu)點(diǎn)是什么?
磁盤增加 — 增加磁盤變得非常容易。無需停機(jī)時間,并且文件區(qū)域自動重新分配。
I/O 分配 — I/O 自動分布在所有可用的磁盤上,無需人工干預(yù),從而減少了熱點(diǎn)出現(xiàn)的可能性。
帶區(qū)寬度 — 在重做日志文件中分段可以細(xì)分( 128K ,以獲得更快的傳輸速率),對于數(shù)據(jù)文件,帶區(qū)則略大一些( 1MB ,以一次性傳輸大量的數(shù)據(jù)塊)。
緩沖 — ASM 文件系統(tǒng)不進(jìn)行緩沖,直接進(jìn)行輸入 / 輸出。
核心化的異步 I/O — 實(shí)現(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
當(dāng)服務(wù)器啟動時,您應(yīng)當(dāng)啟動該例程,而當(dāng)服務(wù)器關(guān)閉時,應(yīng)當(dāng)最后關(guān)閉該例程。
這個參數(shù)的默認(rèn)值是 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ū)塊的拷貝建立鏡像,以保持?jǐn)?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 ,
...
甚至存檔日志目標(biāo)也可以設(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 10 g 中的 RMAN 的部分中,您將詳細(xì)了解如何使用這種功能來為您帶來好處。)
請記住,無論 ASM 如何支持僅由 Oracle 數(shù)據(jù)庫創(chuàng)建和讀取的文件;它也不能替代一個通用的文件系統(tǒng),并且不能存儲二進(jìn)制文件和純文本文件。
維護(hù)
讓我們看看維護(hù)磁盤組所需的一些典型任務(wù)。您可能必須經(jīng)常在磁盤組 dskgrp1 中增加額外的磁盤來適應(yīng)不斷增長的需求??梢詧?zhí)行下面的語句:
alter diskgroup dskgrp1 add disk '/dev/d5';
要查明哪個磁盤在哪個磁盤組中,可以執(zhí)行下面的語句:
select * from v$asm_disk;
該命令顯示了 ASM 例程為所有客戶機(jī)數(shù)據(jù)庫管理的所有磁盤。在這些磁盤中,您可能決定利用以下命令來刪除一個磁盤:
alter diskgroup dskgrp1 drop disk diskb23;
結(jié)論
ASM 的引進(jìn)提供了顯著的價值,它使得在 Oracle 數(shù)據(jù)庫中管理文件變得非常容易。利用這個捆綁的特性,您可以從一組磁盤中容易地創(chuàng)建一個高可伸縮和高性能的存儲解決方案。任何動態(tài)的數(shù)據(jù)庫環(huán)境都需要添加、移動和刪除磁盤, ASM 提供了必需的工具集,使 DBA 從那些單調(diào)的任務(wù)中解脫出來。