Flex ASM是12c+ RAC解除ASM单点依赖的必需架构,非可选功能;未启用时节点ASM宕机将导致对应数据库实例无法启动。

Flex ASM不是可选的“增强功能”,而是12c+ RAC中解除ASM单点依赖的必需架构;不启用,节点ASM宕机=对应数据库实例无法启动。
确认当前集群是否已启用Flex ASM
直接执行命令比查文档更快:
$ asmcmd showclustermode
输出为 ASM cluster : Flex mode enabled - Direct Storage Access 才算真正启用。如果显示 Standard mode,说明仍是传统模式——即使你装的是12c或更高版本,也默认不开启Flex ASM。
补充验证方式:
- 连到任意ASM实例,查
INSTANCE_TYPE:若返回ASMPROX,表示该实例是Flex ASM代理(proxy),属于Flex模式 - 运行
srvctl config asm,若输出含Flex ASM或ASM base: N(N为数字),即为Flex模式
启用Flex ASM必须满足的三个硬性前提
缺一不可,否则 asmca 或安装时勾选会静默失败:
- 集群网络必须有至少两个独立网段:一个用于
public,一个专用于cluster_interconnect,asm(即私网)。oifcfg getif必须看到带asm标签的接口 - OCR 和表决盘(voting disk)必须放在 Normal 或 High 冗余的ASM磁盘组中(External冗余不支持Flex ASM)
- 所有节点的Grid Infrastructure必须版本一致,且不能混用11g GI管理12c DB——Flex ASM由GI层控制,DB层无权决定
修改ASM基数(ASM base)影响连接容错能力
默认ASM基数是3,意思是整个集群最多只运行3个ASM实例,其余节点通过ASM proxy连接它们。基数越小,故障转移路径越集中;越大,资源开销越高。
调整命令(需停集群或滚动重启):
$ srvctl modify asm -count 4
之后需重启所有ASM资源:
$ srvctl stop asm -all<br>$ srvctl start asm -all
注意:-count 值不能超过集群总节点数,也不能低于2(否则失去容错意义);生产环境建议设为 min(3, 总节点数) 起步,再根据ASM负载监控 V$ASM_CLIENT 中的 connected_from 分布来调优。
Flex ASM下数据库实例连接ASM的实际行为
这不是“自动切换”,而是由Oracle Clusterware在后台动态绑定。关键事实:
- 数据库实例启动时,不强制连接本地ASM;它向Clusterware申请ASM服务,由后者分配一个可用的ASM实例(可能是远程节点的)
- 若本地ASM进程被
kill -9,数据库实例不会中断——但你会在告警日志看到类似ASM instance +ASM1 on node1 is not available, reconnecting to +ASM2 on node2 - 客户端连接信息可通过
SELECT * FROM V$ASM_CLIENT查看,其中INSTANCE_NAME是数据库实例名,HOST_NAME是它当前连接的ASM所在节点
真正容易被忽略的是:Flex ASM不改变磁盘组访问逻辑,也不缓解ASM实例本身的CPU/内存瓶颈。它只解决“ASM进程挂了,数据库能不能活”的问题,而不是“ASM慢,数据库会不会卡”的问题。


















