问题时间:2026 年 7 月 10 日
受影响环境:sit-zfmm-yy-01u(应用服务器)→ 达梦数据库服务器
问题现象:应用服务连接数据库时报错 [-3113],提示"没有匹配的可登录服务器",应用无法正常使用数据库服务。
应用日志中持续出现以下报错信息:
程序… = [-3113] code=[没有匹配的可登录服务器]
在应用服务器上通过 disql 工具尝试连接数据库:
操作步骤 结果
执行命令 ./disql SUNYARDZFMMCS@ZFMM
第一次尝试 [-70019]: 没有匹配的可登录服务器
第二次尝试 用户名: SUNYARDZFMMCS
第三次尝试 密码: [-70028]: 创建 SOCKET 连接失败
结论 3 次尝试后无法连接服务器,退出 disql
使用 IP 地址和端口直接连接数据库:
./disql SUNYARDZFMMCS@13.64.17.42:5225
结果:服务器 [13.64.17.42:5225]: 处于普通打开状态
通过 IP + 端口方式可以正常连接数据库,说明数据库实例本身运行正常。
排查思路如下图所示:
步骤 操作 结果
步骤 1 确认数据库实例状态 实例正常运行,端口可通
步骤 2 检查应用连接方式 发现应用使用服务名方式连接
步骤 3 检查 dm_svc.conf 配置 发现异常配置参数
步骤 4 定位根因 LOGIN_MODE=1 残留导致连接失败
步骤 5 修改配置并验证 应用恢复正常
检查应用端配置的 dm_svc.conf 文件,发现以下关键问题:
(1)应用使用了服务名方式进行 JDBC 连接配置
(2)服务名配置中仅配置了单 IP 地址
(3)但同时配置了全局参数 LOGIN_MODE=1
关键发现:LOGIN_MODE=1 的含义是"仅连接主节点(Primary)",该参数仅在集群环境下有效。当前数据库已调整为单机模式,不存在主备节点之分,导致驱动在尝试连接时因找不到 Primary 节点而直接返回 -3113 错误。
参数 含义
LOGIN_MODE=0 优先连接 PRIMARY 模式的库,Normal 模式次之,最后选择 Stantby 模式
LOGIN_MODE=1 仅连接主节点(Primary)
LOGIN_MODE=2 仅连接备节点(Standby)
LOGIN_MODE=3 优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 Normal 模式
LOGIN_MODE=4 优先连接 Normal 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。缺省值为 4。
根因:用户反馈,该数据库环境原为集群部署,后因主机资源下线回收了一个节点,调整为单机模式。但在修改 dm_svc.conf 时,操作仅删除了多余的 IP 地址,未同步删除集群相关的参数配置(LOGIN_MODE=1),导致应用通过 JDBC 驱动连接数据库时,驱动按照 LOGIN_MODE=1 的逻辑去寻找 Primary 节点,而单机环境下无主备之分,驱动无法找到符合条件的节点,直接返回 -3113 错误:“没有匹配的可登录服务器”。
修改应用端的 dm_svc.conf 配置文件:
修改前(问题配置):
ZFMM=(13.64.xx.xx:5225)
LOGIN_MODE=1
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(1000)
修改后(正确配置):
ZFMM=(13.64.xx.xx:5225)
#LOGIN_MODE=1 <-- 删除或注释该行
#SWITCH_TIMES=(3) <-- 删除或注释该行
#SWITCH_INTERVAL=(1000) <-- 删除或注释该行
修改配置后,重启应用服务使配置生效:
重启后验证:
✅ 应用日志不再报 -3113 错误
✅ 应用能够正常连接数据库
✅ disql 通过服务名方式连接正常
本次 -3113 错误的根因是:数据库从集群调整为单机模式后,dm_svc.conf 配置未完全同步修改,残留的 LOGIN_MODE=1 参数导致 JDBC 驱动在单机环境下无法找到 Primary 节点,从而返回"没有匹配的可登录服务器"错误。
(1)集群调整为单机时,配置检查清单:
- 确认所有节点的 IP 配置正确
- 确认 DM_SVC.CONF配置文件中LOGIN_MODE 参数已删除或调整为 4
(2)变更后验证清单:
- disql 通过服务名方式连接验证
- 应用端连接验证
- 监控应用日志确认无异常错误
(3) 建议在生产环境建立变更检查清单(Checklist),避免遗漏配置项。
文章
阅读量
获赞
