【Oracle数据库指南】第42篇:Oracle ASM实例与磁盘组管理详解
Oracle ASM(Automatic Storage Management,自动存储管理)是Oracle专为数据库设计的卷管理器和文件系统,将存储管理与操作系统解耦,提供跨磁盘的条带化(Striping)和镜像(Mirroring)功能,无需依赖操作系统LVM或RAID。本文详细讲解ASM实例架构、磁盘组的创建与配置、冗余级别选择、磁盘的添加与删除,以及ASM与数据库实例的集成使用。ASM 架
·
摘要
Oracle ASM(Automatic Storage Management,自动存储管理)是Oracle专为数据库设计的卷管理器和文件系统,将存储管理与操作系统解耦,提供跨磁盘的条带化(Striping)和镜像(Mirroring)功能,无需依赖操作系统LVM或RAID。本文详细讲解ASM实例架构、磁盘组的创建与配置、冗余级别选择、磁盘的添加与删除,以及ASM与数据库实例的集成使用。
一、ASM 架构概述
1.1 ASM 的组成
ASM 架构
├── ASM 实例(独立的Oracle实例,不挂载数据库)
│ ├── ASM SGA(固定大小,较小)
│ └── ASM 后台进程(RBAL、ARBx、GMON等)
│
└── 磁盘组(Disk Group)
├── 磁盘1(ASM Disk)→ 可以是裸设备、块设备
├── 磁盘2(ASM Disk)
└── ...
1.2 ASM 的优势
| 特性 | 说明 |
|---|---|
| 自动条带化 | 数据均匀分布到所有磁盘,最大化I/O吞吐 |
| 内置镜像 | 不依赖操作系统RAID,双重/三重镜像 |
| 在线扩容 | 添加新磁盘后,自动重新平衡数据(ReBalance) |
| 故障容忍 | 磁盘故障时自动切换,不影响数据库 |
| 跨平台一致 | 统一的存储管理接口,不依赖OS特性 |
| 与Oracle深度集成 | RMAN、Data Guard、RAC等原生支持 |
二、ASM 磁盘准备
2.1 配置 udev 设备权限(Linux)
# 查看磁盘设备
lsblk
fdisk -l | grep "^/dev/sd"
# 创建 udev 规则(确保Oracle用户有权限访问磁盘)
cat > /etc/udev/rules.d/99-oracle-asmdevices.rules << 'EOF'
KERNEL=="sdb", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sdc", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sdd", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sde", OWNER="oracle", GROUP="dba", MODE="0660"
EOF
# 重新加载 udev 规则
udevadm control --reload-rules
udevadm trigger
# 验证权限
ls -la /dev/sdb /dev/sdc /dev/sdd /dev/sde
2.2 清除磁盘上的旧分区表
# 清除磁盘首部(如果有旧数据)
dd if=/dev/zero of=/dev/sdb bs=1M count=10
dd if=/dev/zero of=/dev/sdc bs=1M count=10
三、安装 Grid Infrastructure(ASM 的宿主)
ASM 在 Oracle 11g R2+ 中需要安装 Grid Infrastructure(包含 ASM + Clusterware)。
单机环境安装步骤:
- 以 root 用户运行
grid/runInstaller - 选择 “Configure Oracle Grid Infrastructure for a Standalone Server”(单机)
- 设置 ORACLE_BASE、GRID_HOME
- 创建 ASM 磁盘组(安装过程中可以设置)
# Grid Infrastructure 环境变量
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/product/11.2.0/grid
export PATH=$ORACLE_HOME/bin:$PATH
# 查看 ASM 实例状态
srvctl status asm
crsctl status res -t
四、ASM 实例管理
4.1 启动和关闭 ASM 实例
# 以sysdba连接ASM实例
export ORACLE_SID=+ASM
sqlplus / as sysasm
-- 启动ASM实例
STARTUP;
-- 关闭ASM实例
SHUTDOWN NORMAL; -- 等待所有数据库实例断开
SHUTDOWN ABORT; -- 强制关闭(不推荐)
4.2 ASM 实例参数
-- 查看 ASM 实例参数
SHOW PARAMETER asm;
SHOW PARAMETER instance_type; -- 值为 ASM
-- 关键参数
-- ASM_DISKGROUPS:自动挂载的磁盘组
-- ASM_DISKSTRING:搜索 ASM 磁盘的路径模式
-- ASM_POWER_LIMIT:ReBalance 速度(1-11,越大越快,I/O消耗也越大)
五、磁盘组管理
5.1 磁盘组冗余级别
| 级别 | 说明 | 需要磁盘数 | 可容忍故障 |
|---|---|---|---|
| EXTERNAL | 外部冗余(依赖硬件RAID) | ≥ 1 | 取决于硬件 |
| NORMAL | 双向镜像 | ≥ 2(不同Failure Group) | 1个Failure Group故障 |
| HIGH | 三向镜像 | ≥ 3(不同Failure Group) | 2个Failure Group故障 |
5.2 创建磁盘组
-- 连接到 ASM 实例
CONNECT / AS SYSASM
-- 创建 NORMAL 冗余磁盘组(双向镜像)
CREATE DISKGROUP data_dg NORMAL REDUNDANCY
FAILGROUP fg1 DISK '/dev/sdb' NAME data_disk1,
FAILGROUP fg2 DISK '/dev/sdc' NAME data_disk2;
-- 创建 HIGH 冗余磁盘组(三向镜像)
CREATE DISKGROUP redo_dg HIGH REDUNDANCY
FAILGROUP fg1 DISK '/dev/sdd' NAME redo_disk1,
FAILGROUP fg2 DISK '/dev/sde' NAME redo_disk2,
FAILGROUP fg3 DISK '/dev/sdf' NAME redo_disk3;
-- 创建 EXTERNAL 冗余磁盘组(依赖硬件RAID,性能最好)
CREATE DISKGROUP fra_dg EXTERNAL REDUNDANCY
DISK '/dev/sdg' NAME fra_disk1;
5.3 查看磁盘组信息
-- 查看所有磁盘组
SELECT name, state, type, total_mb, free_mb,
ROUND(free_mb/total_mb*100, 1) AS free_pct
FROM v$asm_diskgroup;
-- 查看磁盘组中的磁盘
SELECT dg.name AS diskgroup, d.name AS disk_name,
d.failgroup, d.state, d.total_mb, d.free_mb
FROM v$asm_disk d
JOIN v$asm_diskgroup dg ON d.group_number = dg.group_number
ORDER BY dg.name, d.failgroup, d.name;
-- 查看磁盘组中的文件
SELECT name, type, bytes/1024/1024 AS mb
FROM v$asm_file
WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATA_DG')
ORDER BY type, name;
六、磁盘组维护操作
6.1 向磁盘组添加磁盘
-- 向磁盘组添加磁盘(会自动触发 ReBalance)
ALTER DISKGROUP data_dg ADD FAILGROUP fg3 DISK '/dev/sdh' NAME data_disk3;
-- 监控 ReBalance 进度
SELECT * FROM v$asm_operation;
-- 等待 REBAL 操作完成(可能需要几分钟到几小时)
6.2 从磁盘组删除磁盘
-- 删除磁盘(Oracle 先迁移数据,再删除磁盘)
ALTER DISKGROUP data_dg DROP DISK data_disk3;
-- 监控迁移进度
SELECT * FROM v$asm_operation;
6.3 挂载和卸载磁盘组
-- 挂载磁盘组(使其可用)
ALTER DISKGROUP data_dg MOUNT;
-- 卸载磁盘组(数据库不使用该磁盘组的文件时才可卸载)
ALTER DISKGROUP data_dg DISMOUNT;
-- 强制挂载(即使磁盘组有问题)
ALTER DISKGROUP data_dg MOUNT FORCE;
6.4 修复磁盘组(检查与平衡)
-- 检查磁盘组一致性
ALTER DISKGROUP data_dg CHECK ALL;
-- 手动触发 ReBalance(调整速度)
ALTER DISKGROUP data_dg REBALANCE POWER 4; -- 速度1-11
七、在 ASM 环境下创建数据库
# 配置数据库实例参数(使用ASM磁盘组)
cat > /tmp/initdb_asm.ora << 'EOF'
db_name = 'ASMDB'
db_create_file_dest = '+DATA_DG'
db_create_online_log_dest_1 = '+REDO_DG'
db_create_online_log_dest_2 = '+REDO_DG'
db_recovery_file_dest = '+FRA_DG'
db_recovery_file_dest_size = 50G
memory_target = 2G
processes = 300
EOF
-- 在 ASM 环境下创建数据库(OMF+ASM,无需指定文件路径)
CONNECT / AS SYSDBA
STARTUP NOMOUNT PFILE='/tmp/initdb_asm.ora';
CREATE DATABASE asmdb
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
DATAFILE SIZE 700M AUTOEXTEND ON
SYSAUX DATAFILE SIZE 500M AUTOEXTEND ON
DEFAULT TEMPORARY TABLESPACE temp TEMPFILE SIZE 300M
UNDO TABLESPACE undotbs1 DATAFILE SIZE 500M
LOGFILE GROUP 1 SIZE 300M, GROUP 2 SIZE 300M, GROUP 3 SIZE 300M;
八、ASM 监控视图
-- 磁盘组空间监控(当 free_pct < 20% 时告警)
SELECT name,
total_mb / 1024 AS total_gb,
free_mb / 1024 AS free_gb,
ROUND(free_mb / total_mb * 100, 1) AS free_pct
FROM v$asm_diskgroup
WHERE state = 'MOUNTED';
-- 磁盘健康状态
SELECT dg.name AS diskgroup, d.name AS disk,
d.mode_status, d.state, d.mount_status
FROM v$asm_disk d
JOIN v$asm_diskgroup dg ON d.group_number = dg.group_number
WHERE d.state != 'NORMAL';
九、最佳实践
- 选择 NORMAL/HIGH 冗余而非 EXTERNAL:不依赖操作系统RAID,Oracle自行管理
- Failure Group 对应物理磁盘控制器:相同控制器的磁盘放在同一 Failure Group
- DATA、REDO、FRA 分开磁盘组:不同类型文件的 I/O 特性不同
- 监控磁盘组空闲空间:低于20%时需扩容
- ReBalance 调低优先级:生产高峰期将 POWER 设为 1~2,避免影响业务
十、总结
Oracle ASM 管理的核心要点:
- ASM 实例:独立实例,管理磁盘组;使用 +ASM 作为 ORACLE_SID
- 冗余级别:EXTERNAL(无冗余)、NORMAL(双镜像)、HIGH(三镜像)
- 磁盘组操作:CREATE、ALTER(ADD/DROP DISK)、CHECK、REBALANCE
- 与数据库集成:参数指定磁盘组名(如 +DATA_DG),OMF 自动管理文件名
- 监控:V A S M D I S K G R O U P 、 V ASM_DISKGROUP、V ASMDISKGROUP、VASM_DISK、V$ASM_OPERATION
参考资料
- 《Oracle 11g数据库管理员指南》— 刘宪军著
- Oracle官方文档:Automatic Storage Management Administrator’s Guide
- Oracle官方文档:Database Administrator’s Guide - Storage Management
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)