Automatic Storage Management (ASM) 是 Oracle 推薦的資料庫專用存儲管理方案,提供條帶化、鏡像、自動再平衡等功能,簡化存儲管理並提升 I/O 效能。ASM 實例與 RDBMS 實例架構相似,均由 SGA、背景進程、控制文件組成,可透過 SQL*Plus、ASMCMD、DBCA 管理。
ASM SGA 包含 Buffer Cache、Shared Pool、Large Pool。Shared Pool 關鍵作用:儲存 Extent Map(區塊映射表),將檔案邏輯區塊映射到物理磁碟區塊。
Extent Map 大小估算公式:
-- 1. 計算所有資料檔、線上日誌、臨時檔總大小 (GB)
SELECT SUM(bytes)/(1024*1024*1024) FROM v$datafile;
SELECT SUM(bytes)/(1024*1024*1024) FROM v$logfile a, v$log b WHERE a.group# = b.group#;
SELECT SUM(bytes)/(1024*1024*1024) FROM v$tempfile WHERE status = 'ONLINE';
-- 2. External Redundancy 磁碟組:每 100 GB 需 1 MB Extent Map
-- 3. 建議 Shared Pool = Extent Map 大小 + 2 MB 緩衝
實務上多採用預設值,僅在超大型資料庫(PB 級)需手動調整。
| 進程 | 所屬實例 | 職責 |
|---|---|---|
| RBAL | ASM | Rebalancer 協調進程,規劃磁碟組再平衡活動 |
| ARBn (n=1~9) | ASM | RBAL 子進程,執行實際再平衡資料搬移 |
| RBAL | RDBMS | 打開 ASM 磁碟、發起再平衡請求 |
| ASMB | RDBMS | ASM 與 RDBMS 通訊橋樑:傳遞 Extent Map、心跳檢測、狀態同步 |
啟動/關閉順序鐵律:ASM 必須先啟動、同步運行、最後關閉。一個 ASM 可服務多個 RDBMS(1:n),建議獨立 ASM_HOME 避免補丁衝突。
oracleasmlib-2.0.x-x.el7.x86_64.rpm(用戶空間庫)oracleasm-support-2.1.x-x.el7.x86_64.rpm(管理工具)oracleasm--2.0.x-x.el7.x86_64.rpm (核心模組,**必須與 uname -r 完全一致**)下載來源:Oracle ASMLib 官方頁面,按 CPU 架構選擇。
# 1. 安裝 RPM
rpm -ivh oracleasm-*.rpm oracleasmlib-*.rpm oracleasm-support-*.rpm
# 2. 配置驅動(互動式:預設用戶 oracle、群組 dba、開機自啟、啟動設權限)
/etc/init.d/oracleasm configure
# 輸入:oracle, dba, y, y
# 3. 建立 ASM 磁碟
/etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
/etc/init.d/oracleasm scandisks
/etc/init.d/oracleasm listdisks
# 輸出 VOL1 表示成功
/etc/init.d/oracleasm {start|stop|restart|enable|disable|status}
{createdisk|deletedisk|querydisk|listdisks|scandisks}
ASM_DISKSTRING、ASM_DISKGROUPS、ASM_POWER_LIMIT(再平衡並行度)需在 RDBMS 端配置。ASM 以實例化架構封裝存儲複雜度,配合 ASMLib 實現裝置持久命名與權限自動化,是 Oracle RAC 與單機高可用部署的首選存儲層。掌握 SGA 估算、進程交互、ASMLib 部署細節,是 DBA 邁向架構師的必修課。