达梦连接配置介绍
1. JDBC连接串格式
JDBC(Java Database Connectivity)是 Java 应用程序与数据库的接口规范,旨在让各数据库开发商为 Java 程序员提供标准的数据库应用程序编程接口(API)。JDBC 定义了一个跨数据库、跨平台的通用 SQL 数据库 API。
DM JDBC 驱动程序是 DM 数据库的 JDBC 驱动程序,它是一个能够支持基本 SQL 功能的通用应用程序编程接口,支持一般的 SQL 数据库访问。
通过 JDBC 驱动程序,用户可以在应用程序中实现对 DM 数据库的连接与访问,JDBC 驱动程序的主要功能包括:
建立与 DM 数据库的连接
发送 SQL 语句到数据库
处理并返回语句执行结果
1.1 格式一
host、port 不作为连接属性,直接输入值即可。
格式:
jdbc:dm://[host][:port][/schemaName][?propName1=propValue1][&propName2=propValue2][&…]…
参数说明:
host:数据库所在 IP 地址,缺省为 localhost。ipv6 地址需包含在[]中
port:数据库端口号,缺省为 5236
schemaName:指定登录使用的默认模式名,缺省使用与登录用户同名的模式
?:参数分隔符,表示后面的都是参数
&:参数间隔符,多个参数用&分开
propName:连接串属性名称。详见JDBC连接串属性表;
propValue:连接串属性值。
示例:
jdbc:dm://192.168.0.96:5236/SYSDBA?resultSetType=1003
1.2 格式二
host、port 作为连接属性,此时必须按照JDBC连接串属性表中说明进行设置,且属性名称大小写敏感。
格式:
jdbc:dm://[/schemaName][?propName1=propValue1][&propName2=propValue2][&…]…
示例:
jdbc:dm://?host=192.168.0.96&port=5236
1.3 格式三
使用自定义服务名,可指定多个数据库节点。
格式:
jdbc:dm://GroupName[/schemaName][?GroupName=(host1:port1,host2:port2,…)][&propName1=propValue1][&propName2=propValue2][&…]…
参数说明:
GroupName:数据库服务名,支持指定多个 host:port,若未指定服务名对应的 host:port,则将在配置文件 dm_svc.conf 中匹配相应的服务名;
若未指定服务名对应的 host:port,则在 dm_svc.conf 中匹配
示例:
jdbc:dm://test?test=(192.168.0.96:5236,192.168.0.96:5237)&LOGIN_DSC_CTRL=0&LOGIN_MODE=1&CLUSTER=DSC&autoReconnect=2&epSelector=1
同一个属性在 JDBC 连接串和 dm_svc.conf 中均有设置但值不同时,以 JDBC 连接串优先。
2. JDBC连接串属性表
所有时间参数可使用(h:小时,m:分钟,s:秒,ms:毫秒),不带单位时默认 ms,有效值范围 0~2147483647。缺省值 5 分钟。
2.1 连接属性
| 属性 | 说明 | 必须 |
|---|---|---|
| host | 主库地址,IP 或 localhost | 否 |
| port | 端口号 | 否 |
| unixSocketFile | UNIX socket 路径(Linux) | 否 |
| user | 登录用户 | 否 |
| password | 登录密码 | 否 |
| appName | 客户端应用程序名称 | 否 |
| socketTimeout | 网络通信链路超时(ms) | 否 |
| sessionTimeout | 会话超时时间(s) | 否 |
| connectTimeout | 连接超时时间(ms),缺省 5000 | 否 |
| StmtPoolSize | 语句句柄池大小,缺省 15 | 否 |
| PStmtPoolSize | prepare 语句句柄池大小 | 否 |
| pstmtPoolValidTime | prepare 语句缓存有效时间(ms) | 否 |
| escapeProcess | 是否进行语法转义处理 | 否 |
| autoCommit | 是否自动提交 | 否 |
| localTimezone | 客户端本地时区(分钟,-779~840) | 否 |
| maxRows | 结果集行数限制 | 否 |
| LobMode | 大字段数据获取模式:1服务器获取,2本地缓存 | 否 |
| ignoreCase | 结果集列名是否忽略大小写 | 否 |
| resultSetType | 结果集类型:1003/1004/1005 | 否 |
2.2 集群与高可用属性
| 属性 | 说明 | 必须 |
|---|---|---|
| loginMode | 优先登录的服务器模式(0~4) | 否 |
| loginStatus | 连接时只选择状态匹配的库(0/3/4/5) | 否 |
| loginDscCtrl | 是否只选择 dsc control 节点 | 否 |
| epSelector | 节点选择策略(0=均匀分布,>0=固定第n个) | 否 |
| epSelectorDynamic | 是否根据节点存活状态动态调整 epSelector | 否 |
| autoReconnect | 连接异常处理策略(0~7,可组合) | 否 |
| switchTimes | 尝试遍历服务名列表的次数 | 否 |
| switchInterval | 遍历间隔时间(ms) | 否 |
| cluster | 集群类型:DW/RW/MPP/DPC/DSC/NORMAL | 否 |
| dbAliveCheckFreq | 检测数据库存活的频率(ms) | 否 |
| checkFreq | 循环检测连接是否需要重置的时间间隔(ms) | 否 |
2.3 读写分离属性
| 属性 | 说明 | 必须 |
|---|---|---|
| rwSeparate | 是否启用读写分离(0~5) | 否 |
| rwPercent | 分发到主库的事务占比(%) | 否 |
| rwAutoDistribute | 事务分发是否由 JDBC 自动管理 | 否 |
| rwHA | 是否开启读写分离高可用 | 否 |
| rwStandbyRecoverTime | 备库故障恢复检测间隔(ms) | 否 |
| allowRange | 允许动态负载均衡误差范围(%) | 否 |
2.4 安全与加密属性
| 属性 | 说明 | 必须 |
|---|---|---|
| sslFilesPath | SSL 加密文件路径 | 否 |
| sslKeystorePass | SSL 加密文件口令 | 否 |
| uKeyName | Ukey 文件路径 | 否 |
| uKeyPin | Ukey 口令 | 否 |
| OsAuthType | 操作系统认证类型(0~4) | 否 |
| loginCertificate | 登录加密公钥路径 | 否 |
| localEncrypt | 是否启用用户名密码本地加密 | 否 |
| userEncrypt | 消息通信是否加密用户名 | 否 |
2.5 日志与监控属性
| 属性 | 说明 | 必须 |
|---|---|---|
| logDir | 日志文件生成目录 | 否 |
| logLevel | 日志级别:off/assert/error/warn/sql/info/DEBUG/all | 否 |
| logFlushFreq | 日志刷盘频率(s) | 否 |
| statEnable | 是否启用状态监控 | 否 |
| statDir | 状态监控信息输出目录 | 否 |
| statFlushFreq | 状态监控写文件刷盘频率(s) | 否 |
| statSlowSqlCount | 统计慢 SQL top 行数 | 否 |
| statHighFreqSqlCount | 统计高频 SQL top 行数 | 否 |
2.6 其他属性
| 属性 | 说明 | 必须 |
|---|---|---|
| mppLocal | 是否 MPP 本地连接 | 否 |
| mppOpt | MPP 集群批量插入优化 | 否 |
| keyWords | 用户关键字标识 | 否 |
| dmsvcconf | URL 属性配置文件路径 | 否 |
| dbAliveCheckTimeout | 检测数据库存活的连接超时(ms) | 否 |
| prepareOptimize | 是否对预编译 SQL 做优化 | 否 |
| serverOption | 附加信息,格式:{key=value,...} | 否 |
| reconnectErrors | 需要重连的异常错误码 | 否 |
| errMap | DM 错误码和 Oracle 错误码映射 | 否 |
3. dm_svc.conf配置文件
dm_svc.conf 是客户端配置文件,包含 DM 各接口和客户端工具需要配置的参数,必须和接口/客户端工具位于同一台机器上才能生效。初始 dm_svc.conf 文件在 DM 安装时自动生成。不同平台的生成目录有所不同。
文件位置:
Windows 32位:%SystemRoot%\system32
Windows 64位:%SystemRoot%\system32
Windows 64位运行32位程序:%SystemRoot%\SysWOW64
Linux:/etc
可通过环境变量 DM_SVC_PATH 修改路径。
3.1 配置项支持情况
| 配置项 | JDBC | .NET | NodeJS | Go |
|---|---|---|---|---|
| 服务名 | √ | √ | √ | √ |
| EP_SELECTOR | √ | √ | √ | √ |
| AUTO_RECONNECT | √ | × | √ | √ |
| CLUSTER | √ | × | √ | √ |
| LOGIN_MODE | √ | √ | √ | √ |
| LOGIN_DSC_CTRL | √ | × | √ | √ |
| RW_SEPARATE | √ | √ | √ | √ |
| RW_HA | √ | × | √ | √ |
| CONNECT_TIMEOUT | √ | × | √ | √ |
| SOCKET_TIMEOUT | √ | √ | √ | √ |
| SWITCH_TIMES | √ | √ | √ | √ |
| COMPRESS | √ | × | √ | √ |
| SSL_FILES_PATH | √ | × | √ | √ |
| LOG_DIR | √ | √ | √ | √ |
| LOG_LEVEL | √ | √ | √ | √ |
| STAT_ENABLE | √ | × | × | √ |
3.2 dm_svc.conf用法
dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前;服务配置区在后,以“[服务名]”开头。其中,服务名配置项可以在全局配置区,也可以在此服务名对应的服务配置区之前,即在其对应的“[服务名]”之前。
dm_svc.conf 格式如下:
# 全局配置区
参数配置……
# 服务配置区
[服务名1]
参数配置……
# 服务配置区
[服务名2]
参数配置…… |
服务配置区中的配置优先级高于全局配置区。全局配置区的配置项影响所有会话,除非会话所属服务配置区中单独进行了配置,因此对于全局配置区配置项的设置修改需要慎重。
如果对 dm_svc.conf 的配置项进行了修改,需要重启客户端工具,修改的配置才能生效。另外,如果 dm_svc.conf 配置文件中包含中文,则必须保证该配置文件的编码与客户端编码一致。
3.3 配置示例
场景一
配置常规环境的 dm_svc.conf。此处常规环境是指服务名中的 IP 之间互不相关(既不是主备关系、也不在一个集群中)。
例 NORMAL 中的 192.168.0.1 和 192.168.0.2 是两个互不相关的 IP。
# 以#开头的行表示是注释
# 全局配置区
NORMAL=(192.168.0.1:5000,192.168.0.2:5236)
TIME_ZONE=(480) #表示+8:00时区
DIRECT=(Y)
# 服务配置区
# 常规环境,两个没有关系的IP
[NORMAL]
TIME_ZONE=(540) #表示+9:00时区
LOGIN_MODE=(4)
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
|
场景二
配置集群环境的 dm_svc.conf。一个服务名中的所有 IP 均来自于同一个集群。
以 DMDSC 集群为例。
# 以#开头的行表示是注释
# 全局配置区 DMDSC1=(192.168.1.1:5236,192.168.1.3:5236) DMDSC2=(192.168.1.5:5236,192.168.1.7:5236) TIME_ZONE=(480) #表示+8:00时区
#DMDSC1 服务配置区 #以下配置目标连接 DMDSC1 服务名的第一个服务(192.168.1.1:5236),以间隔 1000 毫秒的节奏尝试遍历服务名中的各服务进行连接,若在遍历中成功连上符合要求的服务则立即返回;若没有,则继续。一共尝试 60 次遍历,若60次尝试后依然未连接上目标服务,则根据LOGIN_MODE的配置进行下一种连接的尝试。若连接建立时连上的是2号服务,而一段时间后 1 号服务可以正常连接了,当前连接也不会自动切换到 1 号服务。 [DMDSC1] LOGIN_MODE=(4) #若是DSC主+单机备,建议这里配置成0 SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) EP_SELECTOR=(1) AUTO_RECONNECT=(1)
#DMDSC2 服务配置区 #以下配置目标连接 DMDSC2 服务名的第一个服务(192.168.1.5:5236),以间隔 1000 毫秒的节奏尝试遍历服务名中的各服务进行连接,若在遍历中成功连上符合要求的服务则立即返回;若没有,则继续。一共尝试 60 次遍历,若60次尝试后依然未连接上目标服务,则根据LOGIN_MODE的配置进行下一种连接的尝试。假设2号服务先连接成功,由于AUTO_RECONNECT=(2),因此当1号服务可以正常连接后当前连接会切换到1号服务。 [DMDSC2] CLUSTER=(DSC) LOGIN_MODE=(4) #若是DSC主+单机备,建议这里配置成0 SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) EP_SELECTOR=(1) AUTO_RECONNECT=(2)
|
场景三
配置常规环境和集群环境公用的 dm_svc.conf。
例 [NORMAL]为常规环境,[Data_Watch]为数据守护环境。服务名 NORMAL 中的 IP 互不相关,服务名 Data_Watch 中的 IP 为同一个数据守护环境中的 IP。
# 以#开头的行表示是注释
# 全局配置区
NORMAL=(192.168.0.1:5000,192.168.0.2:5236)
Data_Watch=(192.168.0.3:5236,192.168.0.4:4350)
TIME_ZONE=(480) #表示+8:00时区
DIRECT=(Y)
# 服务配置区
# 常规环境,两个没有关系的IP
[NORMAL]
TIME_ZONE=(540) #表示+9:00时区
LOGIN_MODE=(4)
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
# 服务配置区
# 数据守护环境,一主一备,只连备库
[Data_Watch]
TIME_ZONE=(540) #表示+9:00时区
LOGIN_MODE=(2)
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100) |
4. 关键参数说明
4.1 LOGIN_MODE
| 值 | 说明 |
|---|---|
| 0 | 优先 PRIMARY → NORMAL → STANDBY |
| 1 | 只连接主库 |
| 2 | 只连接备库 |
| 3 | 优先 STANDBY → PRIMARY → NORMAL |
| 4 | 优先 NORMAL → PRIMARY → STANDBY(缺省) |
启用读写分离时(rwSeparate ≠ 0),loginMode 不生效
4.2 AUTO_RECONNECT
| 值 | 说明 |
|---|---|
| 0 | 关闭连接 |
| 1 | 异常时自动切换到其他库,抛 SQLException 通知上层 |
| 2 | 配合 epSelector=1,节点恢复后切回原节点 |
| 4 | 保持各节点会话动态均衡 |
可组合使用,如 3 表示 1+2
4.3 CLUSTER
| 值 | 说明 |
|---|---|
| DW | 主备 |
| RW | 读写分离 |
| MPP | 大规模并行处理集群 |
| DPC | 分布计算集群 |
| DSC | 数据共享集群(需配合 autoReconnect=2、epSelector=1) |
| NORMAL | 单机库(缺省) |
4.4 RW_SEPARATE
| 值 | 说明 |
|---|---|
| 0 | 不启用 |
| 1 | 启用,备库由系统自动决定 |
| 2 | 启用,备库由客户端选择 |
| 3 | 启用,备库由服务器通知 |
| 4 | 启用,只连接事务一致性备库 |
| 5 | 启用,为 GATEWAY 准备 |
4.5 EP_SELECTOR
| 值 | 说明 |
|---|---|
| 0 | 依次选取不同节点,连接均匀分布 |
| >0 |