CMAN启动失败主因是cman.ora位置错误或误用lsnrctl;TNS-01106源于gateway_name不匹配;rules需全字段精确匹配且顺序执行;ORA-12545多因CMAN无法解析dst或后端服务名不一致;19c起CMAN已弃用,应改用HAProxy等替代方案。
CMAN 启动失败报 TNS-01106:监听未注册或配置路径错
cman 本质是个独立进程,不是 oracle 数据库实例的一部分,它不读 $oracle_home/network/admin/tnsnames.ora,只认自己的 cman.ora。常见错误是把文件放错位置,或用 lsnrctl start 误操作——cman 必须用 cmanctl 启动。
-
cman.ora必须放在$ORACLE_HOME/network/admin/下,不能放错目录,也不能用软链绕过 - 启动前确认
cmanctl可执行且权限正常:which cmanctl、ls -l $ORACLE_HOME/bin/cmanctl - 报
TNS-01106: Listener is not aware of service多因cman.ora中gateway_name和实际启动名不一致,比如配置了gateway_name = mycman,却执行cmanctl start(默认启cman),应改用cmanctl start mycman
cman.ora 里 rules 怎么写才生效:路由与过滤的语法边界
CMAN 的连接控制全靠 rules 段,但它的匹配逻辑是“全字段精确匹配 + 顺序优先”,不是正则也不是模糊匹配。漏掉一个字段、大小写不对、多空格都会导致规则静默失效。
- 必须同时指定
src、dst、srv三个字段,缺一不可;src是客户端 IP 或子网(如192.168.1.0/24),dst是目标数据库监听地址(如db1.example.com:1521),srv是服务名(如orcl) - 过滤动作只能是
deny或permit,不能写成reject或block;动作后不能加分号或逗号 - 规则按从上到下顺序匹配,第一条命中即终止,不会继续往下查;所以高优先级规则(如 deny 特定 IP)务必写在前面
- 示例有效规则:
(src=10.0.5.100)(dst=db-prod:1521)(srv=hrdb)(action=deny)
CMAN 转发后客户端看到的 ORA-12545:真实原因常不是网络不通
客户端连 CMAN 成功,但转发到后端数据库时报 ORA-12545: Connect failed because target host or object does not exist,大概率不是防火墙问题,而是 CMAN 解析不到 dst 地址,或后端监听未开动态注册。
- CMAN 进程自身必须能解析
dst字段里的主机名(用nslookup或ping在 CMAN 所在服务器上验证) - 后端数据库监听必须启用
GLOBAL_DBNAME,且该值要和cman.ora中srv字段完全一致(区分大小写);检查用lsnrctl status看输出里是否有对应服务名 - 如果后端用 SCAN 或 RAC,
dst应填 SCAN VIP 或单个节点 VIP,不能填 localhost 或 127.0.0.1 —— CMAN 不走本地回环 - CMAN 日志(默认
$ORACLE_HOME/network/log/cman.log)里搜failed to resolve或connection refused能快速定位卡点
Oracle 19c+ 上 CMAN 已弃用:替代方案不是升级配置,而是换架构
Oracle 官方从 19c 开始标记 CMAN 为 deprecated,21c 彻底移除。不是参数调不好,是二进制本身没了。强行在新版本装旧 CMAN 会触发 LRM-00101 报错,且无补丁可打。
- 替代方案只有两个:用数据库自带的
Connection Manager (cman)的继任者 —— Oracle Connection Manager with SSL/TLS(需额外 license);或更现实的,用反向代理层如 HAProxy 做 TCP 层路由 + 连接限制 - HAProxy 示例关键段:
backend oracle_db+option tcp-check+tcp-check connect port 1521,它不解析 TNS,只做四层转发,规避了 CMAN 的所有解析缺陷 - 如果必须保 CMAN,最低兼容版本是 12.2.0.1;18c 是最后一个带完整 CMAN 的长期支持版,但已停止更新
CMAN 的核心限制在于它不感知数据库状态,只认静态配置。哪怕后端实例宕了,它照样转发,直到超时。这点在现代运维里很难接受,不是配得够细就能绕过去的问题。


















