运维管理6 分钟阅读
Oracle RAC ASM 磁盘扩容实战
2026年10月23日阅读—点赞—收藏—
OracleRAC
在知识库中专注阅读,并随时返回相关工具与课程
最近给一套 Oracle 11g RAC 数据库扩容 ASM 磁盘,存储侧已经完成 LUN 映射,需要在操作系统上识别新盘,并将其加入现有的 DATA 磁盘组。
这套环境使用 Linux Multipath 管理存储多路径,通过 UDEV 配置 ASM 磁盘权限,ASM 直接使用 /dev/mapper 下的设备。
本次新增一块 600G 磁盘,整个扩容过程不需要停止数据库服务,记录一下完整操作流程,后续遇到类似需求可以直接参考。
存储管理员完成 LUN 映射后,在两个 RAC 节点分别使用 root 用户扫描 SCSI 总线。
1for host in /sys/class/scsi_host/host*; do2 echo "- - -" > "$host/scan"3done扫描完成后检查:
1lsblk2multipath -ll确认新增磁盘已经被系统识别,并检查 Multipath 是否正常聚合存储路径。
1mpathX (3600xxxxxxxxxxxxxxxxxxxxxxxxxxxxx) dm-X DGC,VRAID2size=600G3|-+- policy='round-robin 0' prio=50 status=active4| |- sdX active ready running5| `- sdY active ready running6`-+- policy='round-robin 0' prio=10 status=enabled7 |- sdZ active ready running8 `- sdW active ready running两个节点需要确认新增磁盘的 WWID 一致,确保访问的是同一块共享 LUN。
为了避免设备名称发生变化,建议通过 WWID 为新盘配置固定别名。
先备份配置文件:
1cp -p /etc/multipath.conf \2/etc/multipath.conf.bak_$(date +%Y%m%d_%H%M%S)编辑:
1vi /etc/multipath.conf在现有 multipaths 配置块中增加新盘映射:
1multipath {2 wwid 3600xxxxxxxxxxxxxxxxxxxxxxxxxxxxx3 alias data124}其中 WWID 替换为实际新盘的 WWID,data12 根据现场磁盘命名规则调整。
重新加载 Multipath 配置:
1service multipathd reload检查:
1multipath -ll data122multipathd -k"show maps"确认新盘已经正确映射为 /dev/mapper/data12。
两个 RAC 节点都需要配置相同的 WWID 与 alias。如果重新加载后别名没有立即生效,应先检查现有映射状态,不要直接清除正在使用的 Multipath 设备。
ASM 使用的磁盘需要具备正确的设备权限。本次环境采用 UDEV 管理,现有 ASM 磁盘权限为:
1grid:asmadmin 660先备份规则文件:
1cp -p /etc/udev/rules.d/60-dm-permissions.rules \2/etc/udev/rules.d/60-dm-permissions.rules.bak_$(date +%Y%m%d_%H%M%S)追加新盘规则:
1cat >> /etc/udev/rules.d/60-dm-permissions.rules <<'EOF'2ENV{DM_NAME}=="data12", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}"3EOF重新加载 UDEV 规则:
1udevadm control --reload-rules查询新盘对应的实际 dm-* 编号:
1multipath -ll data12假设当前节点对应 dm-12,执行:
1udevadm trigger --action=change \2 --sysname-match=dm-1234udevadm settle两个节点的 dm-* 编号可能不同,必须分别确认。
检查权限:
1ls -lL /dev/mapper/data122ls -l /dev/iscsi/oraasm-data12预期:
1brw-rw---- 1 grid asmadmin ... /dev/mapper/data12至此,新盘的持久化命名及权限配置完成。
切换到 Grid 用户,连接 ASM 实例:
1su - grid2sqlplus / as sysasm查看 ASM 磁盘发现路径:
1SHOW PARAMETER asm_diskstring;本次环境配置为:
1asm_diskstring = /dev/mapper查询新盘:
1SET LINES 2002COL PATH FOR A5034SELECT5 GROUP_NUMBER,6 DISK_NUMBER,7 NAME,8 PATH,9 HEADER_STATUS,10 MOUNT_STATUS,11 STATE,12 TOTAL_MB13FROM V$ASM_DISK14WHERE PATH = '/dev/mapper/data12';对于尚未加入磁盘组的全新磁盘,通常可以看到:
1HEADER_STATUS MOUNT_STATUS2------------- ------------3CANDIDATE CLOSED同时确认两个 ASM 实例均能发现新盘,并核实磁盘 WWID、容量、权限及磁盘头状态。新盘必须是经过存储管理员确认、可供本次扩容使用的 LUN。
再检查目标磁盘组:
1SELECT2 NAME,3 TYPE,4 STATE,5 TOTAL_MB,6 FREE_MB,7 USABLE_FILE_MB8FROM V$ASM_DISKGROUP9WHERE NAME = 'DATA';本次扩容前 DATA 磁盘组为 EXTERN 冗余,总容量为 3,635,200 MB。
完成上述检查后,在 ASM 实例执行:
1ALTER DISKGROUP DATA2ADD DISK '/dev/mapper/data12'3REBALANCE POWER 4;45Diskgroup altered.这里没有手动指定 ASM 磁盘名称,由 Oracle 自动分配。
REBALANCE POWER 4 指定本次数据重新分布操作的功率。生产环境可以根据业务负载及存储性能选择合适的值。
扩容过程中数据库可以继续提供服务,但 Rebalance 会产生额外 I/O,建议在业务相对空闲时执行。
磁盘加入 DATA 后,ASM 会重新分布数据。
查询:
1SET LINES 20023SELECT4 INST_ID,5 OPERATION,6 STATE,7 POWER,8 SOFAR,9 EST_WORK,10 EST_MINUTES11FROM GV$ASM_OPERATION;主要关注以下指标:
可以每隔几分钟查询一次,观察进度。
当 GV$ASM_OPERATION 不再返回正在执行的 Rebalance 操作时,再结合 ASM 告警日志及磁盘状态确认操作已正常完成。
首先检查新盘是否已经成为 DATA 磁盘组成员:
1SELECT2 NAME,3 PATH,4 HEADER_STATUS,5 MOUNT_STATUS,6 STATE,7 TOTAL_MB8FROM V$ASM_DISK9WHERE PATH = '/dev/mapper/data12';正常加入后应显示 HEADER_STATUS=MEMBER,磁盘组挂载正常时通常为 MOUNT_STATUS=CACHED、STATE=NORMAL。
然后检查 DATA 容量:
1SELECT2 NAME,3 TYPE,4 STATE,5 TOTAL_MB,6 FREE_MB,7 USABLE_FILE_MB8FROM V$ASM_DISKGROUP9WHERE NAME = 'DATA';本次扩容后的容量如下:
DATA 磁盘组总容量增加了 600 GiB,符合本次扩容预期。最终验收还需要确认 Rebalance 完成、所有磁盘状态正常。
Oracle RAC ASM 扩容主要分为六个步骤:
1存储侧完成 LUN 映射2 ↓3两个 RAC 节点扫描 SCSI 新盘4 ↓5配置 Multipath 固定别名6 ↓7配置 UDEV 磁盘权限8 ↓9检查 ASM 磁盘发现状态10 ↓11ALTER DISKGROUP ADD DISK12 ↓13监控 Rebalance 并验收整个过程不需要停止数据库,适用于使用 Multipath + UDEV 管理 ASM 磁盘的 Oracle RAC 环境。
实际操作时,重点确认两个节点的 WWID、设备权限和 ASM 磁盘发现情况。扩容完成后,再检查磁盘组容量和 Rebalance 状态即可。