达梦驱动

连接使用的驱动可以从 "/安装目录/drivers/" 下获得:

比如 JDBC 驱动:
jdbc/DmJdbcDriver16.jar 适用于 jdk1.6
jdbc/DmJdbcDriver17.jar 适用于 jdk1.7
jdbc/DmJdbcDriver18.jar 适用于 jdk1.8

再如 Hibernet 驱动:
jdbc/dialect/DmDialect-for-hibernate*.ja

常见的连接语法格式

jdbc:dm://192.168.0.96:5236?resultSetType=1003 主机与端口不作为连接属性
jdbc:dm://?host=192.168.0.96&port=5236 主机与端口作为连接属性
jdbc:dm://test?test=(192.168.0.96:5236,192.168.0.96:5237) test 是自定义的服务名(推荐)
jdbc:dm://TEST 若未指定服务名对应的 host:port,则将在配置文件 /etc/dm_svc.conf 中匹配相应的服务名(首推)
jdbc:dm://TEST?dmsvcconf=/path/xxx.conf 也可以自定义 TNS 文件位置

注意:
如果对 dm_svc.conf 的配置项进行了修改,需要重启客户端工具,修改的配置才能生效。
例如,使用 TongWeb 的 JDBC 驱动功能,则是重启 TongWeb 软件,不是重启应用。
如果 dm_svc.conf 配置文件中包含中文,则必须保证该配置文件的编码与客户端编码一致。
如果是应用直接使用连接串信息,有些应用可能不能识别 '&' 符号,需要将 '&' 换成 '&'。
如果数据库是单机(如测试环境)或者仅DSC集群,则不能使用 loginmod=1|2 来连接,因为数据库模式是 NORMAL,但可以使用 loginmod = 0 | 3 | 4 来连接。

可以考虑的属性

  • loginMode=4

    • 指定优先登录的服务器模式。取值范围 0~4,默认值为4。
    • 0:优先连接 PRIMARY 模式或者 NORMAL 模式的库,最后选择 STANDBY 模式;
    • 1:只连接主库;
    • 2:只连接备库;
    • 3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;
    • 4:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANDBY 模式。
    • 当启用读写分离时(即 rwSeparate 不为 0),loginMode 不生效。
  • epSelector=0

    • 0 表示依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上,默认值为0。
    • 1 表示选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。
  • autoReconnect=0

    • 连接发生异常或一些特殊场景下连接处理策略。取值范围 0~7,默认为0。
    • 0:关闭连接;
    • 1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLException,用于通知上层应用进行事务执行失败时的相关处理。
    • 2:配合 epSelector=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上。
    • 4:保持各节点会话动态均衡,通过后台线程检测节点及会话数变化,并切换连接使之保持均衡。
    • 也可以将 autoReconnect 置为上述几个值的组合值,表示同时进行多项配置,如置为 3 表示同时配置 1 和 2。
  • appName

    • 客户端应用程序名称,默认空。建议加上并且能区分应用自己的每一个模块,尤其是微服务,方便排查问题。
  • switchTimes=1

    • 当服务器故障后,尝试 1 次重连,默认值为1 次。
  • switchInterval=1000

    • 间隔多少毫秒再次尝试重连,switchTimes 与 switchInterval 的乘积就是连接故障时应用的感知时间,默认值为 1000 ms。
  • allowRange=5

    • 允许动态负载均衡误差范围的百分比,百分比越大表示允许的误差范围越大,有效值范围 0~50,默认值 5。
  • enRsCache

    • 是否开启结果集缓存;默认 false。
  • logLevel

    • 生成 JDBC 日志的级别,高级别同时记录低级别的信息,默认 off。日志按从低到高依次如下:
    • off:不记录;error:只记录错误日志;warn:记录警告信息;sql:记录 sql 执行信息;info:记录全部执行信息;all:记录全部。
  • compatibleMode

    • 兼容其他数据库;取值为数据库名称:oracle 表示兼容oracle,mysql 表示兼容 mysql
  • schema

    • 指定用户登录后的当前模式,默认为用户的默认模式。
  • checkFreq

    • 服务名连接数据库时,循环检测连接是否需要重置的时间间隔。即每间隔设定时间检测连接对象是否发生改变,若连接对象发生改变,JDBC 连接会自动重置到新对象。
    • 单位 ms,有效值范围 0~2147483647。默认值 300000。
  • connectTimeout

    • 0 表示无限制;默认 0;
  • sessionTimeout

    • 会话超时时间,单位 s,取值范围:0~2147483647,默认 0
  • socketTimeout

    • 网络通讯超时时间,单位 ms。取值范围 0~2147483647,默认0,表示无超时限制。
  • doSwitch

    • 连接发生异常或一些特殊场景下的连接处理策略。取值范围 0~2,默认为0.
    • 0:关闭连接;
    • 1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会报错,用于通知上层应用进行事务执行失败时的相关处理;
    • 2:配合 epSelector=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上。

单机的连接

下面两种连接方法均可:

jdbc:dm://192.168.1.27:1523 (单机我们用这种)
jdbc:dm://prod?prod=(192.168.1.27:15236)&appName=kuguan

单机 DW 连接

jdbc:dm://prod?prod=(192.168.1.27:15236,192.168.1.37:15236)&loginMode=1&epSelector=1(单机主备我们用这个)
loginMode=1 #1 表示只连接主库
epSelector=1 #1 表示选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接

DSC 集群的连接

示例1:负载动态均衡;两主机都连接
功能:可实现主机的负载动态均衡。
适用场景:交易并发量很小(<=200,由主机配置、事务大小等来综合判断)
jdbc:dm://test?test=(192.168.0.96:5236, 192.168.0.97:5236)
jdbc:dm://test?test=(192.168.0.96:5236, 192.168.0.97:5236)&switchInterval=1000&switchTimes=30&appName=XXXXX
应用的感知约是:(switchInterval=1000ms)*(switchTimes=30)=30s。

示例2:非负载动态均衡;只连列表中的第一个节点。
功能:可防止高并发时出现融合缓存交换的等待事件现象(规避 DSC 集群双节点写入性能)。
使用限制:此功能 DPI 接口和 disql 工具暂不支持。
适用场景:交易并发量很大(>=500,由主机配置、事务大小等来综合判断)
jdbc:dm://test?test=(192.168.0.96:5236, 192.168.0.97:5236)&epSelector=1&switchInterval=1000&switchTimes=30&appName=XXXXX&autoReconnect=2
epSelector=1 决定了只有当前节点无法建立连接时才会选择下一个节点进行连接。
autoReconnect=2 决定了如果服务器列表前面的节点恢复了,将当前连接切换到前面的节点上。

DSC+DW 的连接

假设2节点的DSC + 单机的数据守护(相当于RAC+单机的ADG)

两台DSC:
192.168.0.96:5236
192.168.0.97:5236
单机:
192.168.0.98:5236

示例1: 只连主库,负载动态均衡,两主机都连接,应用感知时间30s;
jdbc:dm://test?test=(192.168.0.96:5236, 192.168.0.97:5236, 192.168.0.98:5236)&loginMode=1&switchTimes=30&switchInterval=1000&appName=XXXXX

示例2: 只连主库,非负载动态均衡,只连列表中的第一个主节点,应用感知时间30s;
jdbc:dm://test?test=(192.168.0.96:5236, 192.168.0.97:5236, 192.168.0.98:5236)&loginMode=1&epSelector=1&switchTimes=30&switchInterval=1000&appName=XXXXX

-- By 许望(RHCA、OCM、VCP)
最后修改:2026 年 04 月 22 日 08 : 37 PM
如果觉得我的文章对你有用,请随意赞赏