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