









JDBC(Java Database Connectivity)是 Java 应用程序与数据库的接口规范,旨在让各数据库开发商为 Java 程序员提供标准的数据库应用程序编程接口(API)。JDBC 定义了一个跨数据库、跨平台的通用 SQL 数据库 API。
DM JDBC 驱动程序是 DM 数据库的 JDBC 驱动程序,它是一个能够支持基本 SQL 功能的通用应用程序编程接口,支持一般的 SQL 数据库访问。
通过 JDBC 驱动程序,用户可以在应用程序中实现对 DM 数据库的连接与访问,JDBC 驱动程序的主要功能包括:
建立与 DM 数据库的连接
发送 SQL 语句到数据库
处理并返回语句执行结果
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
host、port 作为连接属性,此时必须按照JDBC连接串属性表中说明进行设置,且属性名称大小写敏感。
格式:
jdbc:dm://[/schemaName][?propName1=propValue1][&propName2=propValue2][&…]…
示例:
jdbc:dm://?host=192.168.0.96&port=5236
使用自定义服务名,可指定多个数据库节点。
格式:
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 连接串优先。
所有时间参数可使用(h:小时,m:分钟,s:秒,ms:毫秒),不带单位时默认 ms,有效值范围 0~2147483647。缺省值 5 分钟。
| 属性 | 说明 | 必须 |
|---|---|---|
| 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 | 否 |
| 属性 | 说明 | 必须 |
|---|---|---|
| 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) | 否 |
| 属性 | 说明 | 必须 |
|---|---|---|
| rwSeparate | 是否启用读写分离(0~5) | 否 |
| rwPercent | 分发到主库的事务占比(%) | 否 |
| rwAutoDistribute | 事务分发是否由 JDBC 自动管理 | 否 |
| rwHA | 是否开启读写分离高可用 | 否 |
| rwStandbyRecoverTime | 备库故障恢复检测间隔(ms) | 否 |
| allowRange | 允许动态负载均衡误差范围(%) | 否 |
| 属性 | 说明 | 必须 |
|---|---|---|
| sslFilesPath | SSL 加密文件路径 | 否 |
| sslKeystorePass | SSL 加密文件口令 | 否 |
| uKeyName | Ukey 文件路径 | 否 |
| uKeyPin | Ukey 口令 | 否 |
| OsAuthType | 操作系统认证类型(0~4) | 否 |
| loginCertificate | 登录加密公钥路径 | 否 |
| localEncrypt | 是否启用用户名密码本地加密 | 否 |
| userEncrypt | 消息通信是否加密用户名 | 否 |
| 属性 | 说明 | 必须 |
|---|---|---|
| logDir | 日志文件生成目录 | 否 |
| logLevel | 日志级别:off/assert/error/warn/sql/info/DEBUG/all | 否 |
| logFlushFreq | 日志刷盘频率(s) | 否 |
| statEnable | 是否启用状态监控 | 否 |
| statDir | 状态监控信息输出目录 | 否 |
| statFlushFreq | 状态监控写文件刷盘频率(s) | 否 |
| statSlowSqlCount | 统计慢 SQL top 行数 | 否 |
| statHighFreqSqlCount | 统计高频 SQL top 行数 | 否 |
| 属性 | 说明 | 必须 |
|---|---|---|
| mppLocal | 是否 MPP 本地连接 | 否 |
| mppOpt | MPP 集群批量插入优化 | 否 |
| keyWords | 用户关键字标识 | 否 |
| dmsvcconf | URL 属性配置文件路径 | 否 |
| dbAliveCheckTimeout | 检测数据库存活的连接超时(ms) | 否 |
| prepareOptimize | 是否对预编译 SQL 做优化 | 否 |
| serverOption | 附加信息,格式:{key=value,...} | 否 |
| reconnectErrors | 需要重连的异常错误码 | 否 |
| errMap | DM 错误码和 Oracle 错误码映射 | 否 |
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 修改路径。
| 配置项 | 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 | √ | × | × | √ |
dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前;服务配置区在后,以“[服务名]”开头。其中,服务名配置项可以在全局配置区,也可以在此服务名对应的服务配置区之前,即在其对应的“[服务名]”之前。
dm_svc.conf 格式如下:
# 全局配置区
参数配置……
# 服务配置区
[服务名1]
参数配置……
# 服务配置区
[服务名2]
参数配置……
服务配置区中的配置优先级高于全局配置区。全局配置区的配置项影响所有会话,除非会话所属服务配置区中单独进行了配置,因此对于全局配置区配置项的设置修改需要慎重。
如果对 dm_svc.conf 的配置项进行了修改,需要重启客户端工具,修改的配置才能生效。另外,如果 dm_svc.conf 配置文件中包含中文,则必须保证该配置文件的编码与客户端编码一致。
场景一
配置常规环境的 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)
| 值 | 说明 |
|---|---|
| 0 | 优先 PRIMARY → NORMAL → STANDBY |
| 1 | 只连接主库 |
| 2 | 只连接备库 |
| 3 | 优先 STANDBY → PRIMARY → NORMAL |
| 4 | 优先 NORMAL → PRIMARY → STANDBY(缺省) |
启用读写分离时(rwSeparate ≠ 0),loginMode 不生效
| 值 | 说明 |
|---|---|
| 0 | 关闭连接 |
| 1 | 异常时自动切换到其他库,抛 SQLException 通知上层 |
| 2 | 配合 epSelector=1,节点恢复后切回原节点 |
| 4 | 保持各节点会话动态均衡 |
可组合使用,如 3 表示 1+2
| 值 | 说明 |
|---|---|
| DW | 主备 |
| RW | 读写分离 |
| MPP | 大规模并行处理集群 |
| DPC | 分布计算集群 |
| DSC | 数据共享集群(需配合 autoReconnect=2、epSelector=1) |
| NORMAL | 单机库(缺省) |
| 值 | 说明 |
|---|---|
| 0 | 不启用 |
| 1 | 启用,备库由系统自动决定 |
| 2 | 启用,备库由客户端选择 |
| 3 | 启用,备库由服务器通知 |
| 4 | 启用,只连接事务一致性备库 |
| 5 | 启用,为 GATEWAY 准备 |
| 值 | 说明 |
|---|---|
| 0 | 依次选取不同节点,连接均匀分布 |
| >0 | 选择列表中第 n 个节点,只有当前节点无法连接时才选下一个 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。