flex asm启用需停集群并静默配置,确认生效须同时满足:asmcmd showclustermode输出“flex mode enabled”,且crsctl stat res -t显示ora.asm(无节点后缀)状态online。
flex asm 不是“开了就自动高可用”,它必须在集群停机状态下用静默命令重构,否则 crs 里资源名仍是 ora.rac1.asm 这类带节点后缀的旧格式,根本没生效。
怎么确认 Flex ASM 真正启用了
别信安装界面勾选记录,两个检查点缺一不可:
- 执行
asmcmd showclustermode,输出必须是ASM cluster : Flex mode enabled - 执行
crsctl stat res -t | grep asm,资源名要是ora.asm(无节点名),且状态为ONLINE;如果看到ora.rac1.asm或ora.rac2.asm,说明还是传统 1:1 绑定 - 常见误判:
asmca图形界面点了“Enable Flex ASM”但没点Finish,或中途报错退出——这种半启用状态查showclustermode仍显示disabled
启用 Flex ASM 的硬性操作顺序不能错
这不是改个参数的事,是集群级基础设施重构:
- Grid Infrastructure 必须 ≥
12.1.0.2,用opatch lsinventory确认所有节点补丁集完全一致 - 必须先执行
crsctl stop cluster -all停整个集群,只停 ASM 或 DB 不行 - 真正生效的命令是静默配置:
asmca -silent -configureFlexASM -asmRedundancy HIGH -diskString '/dev/oracleasm/disks/*',其中-diskString必须与现有磁盘路径完全一致,否则后续加盘会失败 - 启动后立刻验证:
asmcmd lsct应列出多个节点的 ASM 实例,且client列有数据库实例名;如果为空,说明数据库服务注册失败,大概率是 GNS 解析或 SCAN VIP 不通
Flex ASM 下数据库连 ASM 的真实机制
数据库不再硬连本地 ASM,而是靠 Clusterware 动态解析服务名,DBA 手动干预反而会破坏这个链路:
-
asm_diskstring参数依然有效,但它只控制磁盘发现范围,不影响连接目标 - 真正决定连哪个 ASM 实例的是 OCR 中的
ASM_CLIENT属性,由 Clusterware 自动写入和刷新;手工执行srvctl modify asm -client会被覆盖,还可能触发 OCR 冲突 - 如果数据库启动时报
ORA-15063但 ASM 实例在线,优先检查:nslookup scan-name是否能解析、SCAN VIP 是否可达、防火墙是否放行1521/1522端口
Flex ASM 的故障转移是秒级的,但前提是客户端重连逻辑能触发——老版本 JDBC 驱动或未启用 TAF 的连接池,可能卡在旧连接上不重试,这时候看日志全是 ORA-15032,实际不是 ASM 挂了,是应用层没走服务发现流程。











