达梦数据库连接配置方法

1. 达梦数据库集群介绍

目前业务系统的常用数据库类型主要有:

1) 单机

2) 数据守护(主备)集群

3) 读写分离集群

为方便后期对数据库的连接,下面将进行不同集群的连接串规范进行介绍。

2.JDBC 方式连接 DM

2.1. 单机常见连接方式

达梦数据库主要根据数据库的 ip+端口号来区分数据库实例,因此一般使

用单机连接只需要在 JDBC 连接串中确认好 IP 和端口号即可,使用哪个用户登

录进去则是哪个业务模式,默认访问这个用户的同名模式下的表就不用加模式

名可对该表进行查询,示例如下:

jdbc.driver=dm.jdbc.driver.DmDriver

//URL 中注意 IP 和端口号

jdbc.url=jdbc:dm://127.0.0.1:5236

jdbc.username=TESTDB1

jdbc.password=123456789

2.2. 主备集群常见连接方式

达梦主备集群作为高可用集群,可在应用端连接串配置服务名来降低当集

群故障时对应用系统的影响,具体配置介绍如下。2.2.1. 服务名配置介绍

dm_svc.conf 文件中包含 DM 各接口及客户端需要配置的一些参数。DM 安

装时生成一个配置文件 dm_svc.conf,一台服务器有多个应用需要连接数据

库,为了相互不影响,可以在任何目录创建 dm_svc.conf。

当数据库为主备集群或者有特殊设置要求时,可以配置 dm_svc.conf。

dm_svc.conf 可以配置连接数据库的方式、字符集、关键字屏蔽、默认的

配置路径如下表格,不同的平台所在目录有所不同,具体如下:

32 位的 DM 安装在 Win32 操作平台下,此文件于%SystemRoot%\system32 目录

64 位的 DM 安装在 Win64 操作平台下,此文件于%SystemRoot%\system32 目录

32 位的 DM 安装在 Win64 操作平台下,此文于%SystemRoot%\SysWOW64 目录

在 Linux 平台下,此文件位于/etc 目录。

dm_svc.conf 其他可配置项:参考官方文档

实时主备集群配置方法,在应用服务器配置的 dm_svc.conf 文件

# 以#开头的行表示是注释# 全局配置区

NORMAL=(192.168.0.1:5000,192.168.0.2:5236)

TIME_ZONE=(480) #表示+8:00 时区,注意不要在 480 前误写+

# 服务配置区

# 常规环境,两个没有关系的 IP

[NORMAL]

LOGIN_MODE=(1) #只连接主库

SWITCH_TIME=(3000) #检测到数据库实力故障时,接口在服务器之间切换的次数,超

过设置次数没有连接到有效数据库库,断开连接并报错

SWITCH_INTERVAL=(1000) #表示在服务器之间切换的时间间隔,单位为毫秒

2.2.2. 应用 JDBC 直接使用服务名连接(可在/etc 下配置

dm_svc.conf

部分应用部署在单独的服务器,应用系统的厂商拥有直接进行服务器操作

的权限可在/etc/dm_svc.conf 中配置服务名,此时可以直接使用示例方法配置

URL 连接方式:

jdbc.driver=dm.jdbc.driver.DmDriver

//URL 中注意服务名是否和 dm_svc.conf 中是否一致

jdbc.url=jdbc:dm://NORMAL

jdbc.username=TESTDB1

jdbc.password=123456789

2.2.3. 应用无法在服务器的/etc 目录配置 dm_svc.conf 的连

接方式

部分应用部署在单独的服务器,应用系统的厂商拥没有 root 权限无法在

/etc 目录下创建 dm_svc.conf 文件配置服务名,此时可以在其他目录配置该文

件,如/home/dmdba 下创建 dm_svc.conf 进行配置,此时可以使用示例方法配

置 URL 连接方式:jdbc.driver=dm.jdbc.driver.DmDriver

//URL 中注意 IP 和端口号,以及服务名的位置

jdbc.url=jdbc:dm://NORMAL?dmsvcconf=/home/dmdba/dm_svc_dev.conf

jdbc.username=TESTDB1

jdbc.password=123456789

2.2.4. 应用直接通过 JDBC 配置集群信息连接

对于应用系统,有时候会觉得单独在应用服务器上配置 dm_svc.conf 比较

繁琐,此时我们可以直接在 JDBC 的 URL 连接串中直接配置服务名,如下述示

例:

jdbc.driver=dm.jdbc.driver.DmDriver

//URL 中注意 IP 和端口号,以及服务名的位置

jdbc.url= jdbc:dm://NORMAL?NORMAL=(x.x.1.3:5550,x.x.1.4:5550)&loginMode=1&

switchTimes=3000&switchInterval=1000

jdbc.username=TESTDB1

jdbc.password=123456789

2.3. 读写分离集群常见连接方式

2.3.1. 读写分离集群服务名配置

读写分离集群配置方法,在应用服务器配置的 dm_svc.conf 文件

# 以#开头的行表示是注释

# 全局配置区

TIME_ZONE=(480) #表示+8:00 时区,注意不要在 480 前误写+

LANGUAGE=(cn)

DMRW=(IP1:5236,IP2:5236,IP3:5236.IP4:5236)

[DMRW]

LOGIN_MODE=(1) #只连接主库RW_SEPARATE=(1) #启动读写分离

RW_PERCENT=(25) #分发到主库的事务占主备事务的百分比

SWITCH_TIME=(30000) #检测到数据库实力故障时,接口在服务器之间切换的次数,超过设

置次数没有连接到有效数据库库,断开连接并报错

SWITCH_INTERVAL=(200) #表示在服务器之间切换的时间间隔,单位为毫秒其余

dm_svc.conf 的配置参数可参考 2.2.1 章节对 dm_svc。conf 详细参数的介

绍。

2.3.2. 应用 JDBC 直接使用服务名连接(可在/etc 下配置

dm_svc.conf

配置与主备基本相同,只需要在 URL 中添加 rwSeparate

jdbc.driver=dm.jdbc.driver.DmDriver

//URL 中注意服务名是否和 dm_svc.conf 中是否一致,开启读写分离的开关

jdbc.url=jdbc:dm://DMRWL?rwSeparate=1&rwPercent=25

jdbc.username=TESTDB1

jdbc.password=123456789

2.3.3. 应用无法在服务器的/etc 目录配置 dm_svc.conf 的连

接方式

该方法的配置方式同 2.2.3 章节,同事只需要在连接串中添加续写分离属

性即可。

jdbc.driver=dm.jdbc.driver.DmDriver

//URL 中注意 IP 和端口号,以及服务名的位置

jdbc.url=jdbc:dm://DMRW?dmsvcconf=/home/dmdba/dm_svc_dev.conf&rwSeparate=1&rw

Percent=25

jdbc.username=TESTDB1

jdbc.password=1234567892.3.4. 应用直接通过 JDBC 配置集群信息连接

同上述 2.2.4 章节的介绍,读写分离集群也可以可以直接在 JDBC 的 URL 连

接串中直接配置服务名,如下述示例:

jdbc.driver=dm.jdbc.driver.DmDriver

//URL 中注意 IP 和端口号,以及服务名的位置

Jdbc.url=

jdbc:dm://DMRW?DMRW=(x.x.1.3:5236,x.x.1.4:5236&loginMode=1&switchTimes=3000&swi

tchInterval=1000

jdbc.username=TESTDB1

jdbc.password=123456789

3. 附录 1:其余常见连接需求 FAQ

3.1. 使用 SYSDBA 登录但需要连接其他业务模式 A

在使用达梦数据库时,可能存在一个用户下有多个模式(schema)的情

况,当用户登录之后访问非默认模式下的表等对象时,需要使用”模式名.对象

名”的方式进行访问等操作,或者可以执行 alter session set

current_schema=模式名;或者 SET SCHEMA <模式名>;指定当前模式。

有时候可能从 SQLSERVER 或者 MYSQL 数据库中迁移到达梦数据库时,没

有创建与每个数据库对应的梦数据库用户,可能在使用达梦迁移工具迁移时直

接将所有 MYSQL 中的数据库迁移到一个达梦数据库用户下的不同模式中(模式

名与 MYSQL 中数据库名相同)。这种情况下使用达梦数据库用户登录之后访问非

默认模式下的对象时,需要”模式名.对象名”的方式,这样对与程序来说可能代

码修改量比较大。针对这种情况,在达梦数据库中可以通过指定 JDBC URL 中的

schema 属性配置来指定当前模式。如下:String name=”dm.jdbc.driver.DmDriver”;

String url=”jdbc:dm://127.0.0.1:5236?schema=A”; //使用 schema 指定当前模式名

String user=”SYSDBA”;

String password=”123456789″;

3.2. 兼容 oracle mysql 的方式

3.2.1. 兼容 oracle

部分业务系统需要兼容 oracle,因此需要在 URL 添加

compatible_mode=oracle,兼容 Oracle JDBC 接口时,会出现以下情况:

1. 会话上的 readOnly 属性设置无效。

Connection.setReadOnly()接口忽略设置,Connection.isReadOnly() ==

false。

2. 会话关闭前做事务提交。

相关接口 Connection.close() ,调用时会先执行

Connection.commit()。

3. statement 有多种执行接口,各执行接口不再有对 SQL 类型的限制。

Statement 的多种执行接口包括 execute、executeUpdate、executeQuery

等。

当 checkExecType=1 时,这些接口对执行的 sql 语句类型有限制,

executeUpdate 不能执行查询语句,executeQuery 不能执行更新语句等诸如此

类的。当 checkExecType=0 时,兼容 oracle 的处理,各执行接口不再有对

SQL 类型的限制。

4. preparestement.executeBatch()接口返回值不是实际影响行数,而是

Statement.SUCCESS_NO_INFO。

5. DatabaseMetaData 类 的 getFunctions /getProcedure

/getFunctionColumns /getProcedureColumns 接口,可以搜索到包对象的内部

存储过程和函数 。

6. DatabaseMetaData.getPrimaryKey()返回结果中的列 pk_name 为索引名。DM 本来返回的为约束名,oracle 为索引名。

7. 返回的产品信息及版本号为 oracle 11。相 关 接 口

DatabaseMetaData 类 的 getDatabaseProductName()

/getDatabaseMinorVersion()/getDatabaseMinorVersion()

8. Url 格 式 串 兼 容 oracle url 格 式 串 前 缀 “jdbc:oracle:@” /

“jdbc:oracle:thin:@”。例如:连接 DM 数据库时 url 可写

为:”jdbc:oracle:thin:@localhost:5236”

9. CLOB/BLOB 类的写入数据接口(setXXX),参数偏移允许从 0 开始。

DM 偏移从 1 开始, 而 oracle 从 0 开始,内部做兼容处理,允许偏移从

0 开始。

10. 对于所有的数值类型,ResultSetMateData 和 ParameterMateData 的

类型

描述都为 Types.NUMERIC,当调用 getObject 接口获取数据时返回的为

BigDecimal。

11. 从数据库中获取到 dec 类型的数据,不保留无效的末尾 0。

3.2.2. 兼容 mysql

若应用系统需要设置 JDBC 驱动端 compatible_mode=mysql,兼容 Mysql

JDBC 接口时,会出现以下情况:

会话上设置事务隔离级别 Connection.TRANSACTION_REPEATABLE_READ

时,系统强制 改 为 Connection.TRANSACTION_READ_COMMITTED 。 DM 不 支

持 隔 离 级 Connection.TRANSACTION_REPEATABLE_READ,不开兼容时会忽略

设置使用默认隔离级。开启兼容时强制设

Connection.TRANSACTION_READ_COMMITTED 级别。

3.3. 其余 JDBC 连接串相关配置属性

JDBC 连接串中可设置的属性中除了 user 和 password 是必须要设置的,

其它属性均为可选项。如果同一个属性在 JDBC 连接串中和 dm_svc.conf 配置

项中均有设置,但值不同,则以 JDBC 连接串优先。JDBC 连接串属性可参考程序员手册 4.5.4 章节。表中所有时间均可以使用

h:小时,m:分钟,s:秒,ms:毫秒),不带单位使用时取配置项默认单位

ms,取值范围 0-2147483647。缺省值为 5 分钟。

3.4. 达梦的驱动文件在哪里

达梦默认的驱动文件可以通过以下方式获取:

–首先登录数据库服务器,查看数据库软件安装目录

ps -ef|grep dmap

可以看到例如:/home/dmdba/dmdbms/bin/dmap,从这里我们可以知道达梦

的安装目录为/home/dmdba/dmdbms,因此驱动的位置为:

/home/dmdba/dmdbms/drivers,找到对应的驱动后拷贝到应用服务器的对应位

置即可。

3.5. 应该选择哪个驱动

有 些 同 事 看 到 达 梦 的 JDBC

驱 动 下 有 DmJdbcDriver16.jar

DmJdbcDriver17.jar DmJdbcDriver18.jar,会咨询应该在应用服务器上放那个?

目前达梦的 DmJdbcDriver16.jar 对应应用 jdk1.6,17 对应 jdk 1.7,18 对应 1.8

及以上。

发表评论