Flex ASM本质是集群服务架构变更,非简单磁盘组迁移;确认是否启用需查运行态:asmcmd showclustermode输出“Flex mode enabled”且crsctl stat res -t显示ora.asm资源(无节点后缀)、状态ONLINE,同时v$instance中instance_type为ASMPROX。
flex asm 不是“把磁盘组挪个地方”就能用的模式切换,它本质是集群服务架构变更;传统 asm 磁盘组本身不需要迁移,真正要动的是 asm 实例绑定关系、ocr 注册状态和客户端连接路径。直接对磁盘组执行 cp 或 asmcmd cp 不解决任何高可用问题,反而可能破坏 ocr 中的资源依赖。
怎么确认当前 ASM 还在传统 1:1 模式
别信安装日志或图形界面勾选记录,必须查运行态:
- 在任意节点执行
asmcmd showclustermode,输出必须为ASM cluster : Flex mode enabled;若显示disabled,说明没生效 - 运行
crsctl stat res -t | grep asm,资源名应为ora.asm(无节点后缀),且状态是ONLINE;若看到ora.rac1.asm这类带节点名的资源,就是传统模式 - 连到 ASM 实例查
SELECT instance_type FROM v$instance;,返回值必须是ASMPROX;如果是ASM,说明仍是本地实例
启用 Flex ASM 前必须停整个集群,不是只停 ASM
常见错误是只执行 srvctl stop asm 就去跑配置脚本,结果 OCR 锁死、资源注册失败:
- 必须用 root 执行
crsctl stop cluster -all,确保所有节点 CRS 完全停止 - Grid Infrastructure 版本必须 ≥ 12.1.0.2,用
opatch lsinventory验证补丁集,所有节点 GI 版本严格一致 - OCR、SPFILE、密码文件(
orapw+ASM)必须全部存于 ASM 磁盘组中,且对应磁盘组的COMPATIBLE.ASM≥ '12.1' - 静默启用命令是
asmca -silent -configureFlexASM -asmRedundancy HIGH -diskString '/dev/oracleasm/disks/*',其中-diskString必须与现有磁盘路径完全一致,否则后续加盘报 ORA-15032
数据库启动后 client 列为空?不是磁盘组没迁,是服务注册失败
启用 Flex 后,数据库不再直连本地 ASM,而是通过 SCAN 或 GNS 解析 ASM 服务名;asmcmd lsct 的 client 列为空,说明注册未完成:
- 检查 SCAN VIP 是否可达:
ping rac-scan+telnet rac-scan 1521 - 验证 GNS 解析:
nslookup rac-scan应返回三个 SCAN IP,若超时或只返回一个,GNS 异常 - 防火墙必须放行 1521(ASM 监听)、1522(GNS)、6200(MGMTLSNR)端口,尤其叶节点容易漏掉 1522
-
asm_diskstring参数仍有效,但它只控制磁盘发现范围;真正决定连哪个 ASM 实例的是 OCR 中动态维护的ASM_CLIENT属性,手工改srvctl modify asm -client会被覆盖,还可能触发 OCR 冲突
ORA-15063 报错但 ASM 实例在线?优先查网络和 TAF 支持
Flex ASM 故障转移是秒级的,但前提是客户端能重连——老版本 JDBC 驱动或自定义连接池若没启用 TAF(Transparent Application Failover),就会卡在报错不恢复:
- 数据库启动时报 ORA-15063,先看 alert.log 里是否伴随
TNS-12545或TNS-00515,这是网络层失败信号 - 检查
tnsnames.ora中连接描述符是否含(FAILOVER=ON)和(RETRY_DELAY=1),否则 Oracle 不会主动尝试其他 ASM 实例 - JDBC URL 必须带
oracle.jdbc.TnsAdmin指向正确目录,并启用oracle.jdbc.replay.enable=false(RAC 12c 下 replay 与 Flex ASM 不兼容) - 用
sqlplus /@rac-scan:1521/cdb1手动测试连接,比应用日志更能暴露底层网络问题
最易被忽略的一点:Flex ASM 要求所有节点共享同一套 ASM 网络配置,包括子网掩码、MTU、路由表;哪怕一个节点私网接口启用了 jumbo frame 而其他节点没开,asmcmd lsct 就会间歇性丢失 client 条目,且故障转移失败时不报明确错误。











