ASM (Automatic Storage Management) 自 Oracle 10g 引入,是專為 Oracle 數據庫設計的集成式卷管理器與文件系統。它替代了作業系統層面的 LVM(邏輯卷管理器)與原始設備,提供:
| 概念 | 說明 | 類比 |
|---|---|---|
| 磁盤組 | ASM 管理的邏輯存儲池,由多個 ASM 磁盤組成 | LVM 的 Volume Group |
| ASM 磁盤 | 磁盤組內的最小分配單元,對應物理磁盤/分區/LUN | LVM 的 Physical Volume |
| 分配單元 | 數據在磁盤組內條帶化的基本塊(默認 1MB/4MB) | Stripe Unit |
| 文件 | 數據文件、控制文件、日志、備份集等,均為 ASM 文件 | 文件系統中的文件 |
| 模板 | 定義文件的冗余、條帶、區域屬性的預設配置 | 文件系統的默認屬性 |
10g 中,磁盤離線(如纜線鬆動、HBA 故障、電源抖動)導致磁盤組冗余降級。磁盤恢復上線後,ASM 需全量重讀磁盤所有 Extent 並重新鏡像,耗時與磁盤容量成正比,TB 級磁盤可能需數小時甚至數天,期間冗余缺失風險極高。
-- 創建磁盤組並啟用 11.1 兼容性(Fast Resync 前提)
CREATE DISKGROUP data_dg NORMAL REDUNDANCY
DISK '/dev/asm-disk1', '/dev/asm-disk2', '/dev/asm-disk3'
ATTRIBUTE 'compatible.asm'='11.1', 'compatible.rdbms'='11.1';
-- 修改修復窗口為 6 小時
ALTER DISKGROUP data_dg SET ATTRIBUTE 'disk_repair_time'='6h';
-- 手動離線磁盤並指定 2 小時後自動剔除(覆蓋組級屬性)
ALTER DISKGROUP data_dg OFFLINE DISK data_dg_0001 DROP AFTER 2h;
-- 磁盤修復後上線觸發快速重同步
ALTER DISKGROUP data_dg ONLINE DISK data_dg_0001;
-- 查看離線磁盤剩餘寬限期(秒)
SELECT name, path, state, repair_timer FROM v$asm_disk WHERE group_number = 1;
| 進程 | 所在實例 | 職責 |
|---|---|---|
| RBAL | ASM / RDBMS | ASM 端:協調再平衡計劃;RDBMS 端:打開磁盤組、參與再平衡鎖協調 |
| ARBn (n=0-9) | ASM | 實際執行 Extent 遷移的工作進程,由 `ASM_POWER_LIMIT` 控制並行度 |
| ASMB | RDBMS | 連接 ASM 實例的橋樑:傳遞 Extent Map 更新、心跳檢測、元數據同步 |
啟動順序鐵律: ASM 實例 → RDBMS 實例。關閉順序相反。ASM SGA 默認值(Shared Pool 48M, Large Pool 12M)通常足夠,僅在超大磁盤組(>10TB)需按 Extent Map 大小調大 Shared Pool。
ASMLib 為 Linux 提供內核模塊與用戶態工具,簡化裸設備綁定、權限持久化與多路徑識別。