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
及以上。