暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM客户端配置文件详解与应用指南

398

说明

dm_svc.conf
客户端配置文件说明

dm_svc.conf
是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置的一些参数。

它必须和接口/客户端工具位于同一台机器上才能生效(使用者及业务程序的用户,需要有文件的读取权限)。

文件目录

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_PATH
来修改dm_svc.conf
文件路径;
• 在jdbc
url
中指定dmsvcconf
指定文件位置;
• 在GO
中使用svcConfPath
自定义客户端配置文件 (dm_svc.conf
) 的完整路径。

配置说明

常用配置说明如下,更多配置请参考官网说明:

https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage.html#2.1.1.4.1%20dm_svc.conf%20%E9%85%8D%E7%BD%AE%E9%A1%B9

dm_svc.conf 配置文件说明


适用于
配置项
缺省值
简述
通用配置








服务名
用于连接的服务名,参数值格式为: 服务名=(IP[:PORT],IP[:PORT],......) -- IP 为数据库所在的 IP 地址,如果是 IPV6 地址,为了区分端口,需要用[]封闭 IP 地址。 -- PORT 为数据库使用的 TCP 连接端口,可选配置;不配置则使用默认的端口 注:若配置服务名时没有指定端口,后续在工具或接口的命令中使用服务名时,在服务名后增加:XXXX,端口号会被忽略,这样指定的端口号是无效的
TIME_ZONE
操作系统当前时区
指明客户端的默认时区,设置范围为:-779~840,如 60 对应+1:00 时区
LANGUAGE
操作系统语言
当前数据库服务器使用的语言,会影响帮助信息错误和提示信息。支持的选项为:CN(表示中文)和 EN(表示英文)。可以不指定,若不指 定,系统会读取操作系统信息获得语言信息,建议有需要才指定。
CHAR_CODE
操作系统编码格式
客户端使用的编码格式,会影响帮助信息和错误提示信息,要与客户端使用的编码格式一致。支持的选项为: PG_UTF8(表示 UTF8 编码); PG_GBK/PG_GB18030(两者都表示 GBK 编码); PG_BIG5(表示 BIG5 编码); PG_ISO_8859_9(表示 ISO88599 编码); PG_EUC_JP(表示 EUC_JP 编码); PG_EUC_KR(表示 EUC_KR 编码); PG_KOI8R(表示 KOI8R 编码); PG_ISO_8859_1(表示 ISO_8859_1 编码)。 可以不指定,若不指定,系统会读取操作系统信息获得编码信息,建议有需要才指定。
KEYWORDS
标识用户关键字,所有在列表中的字符串,如果以单词的形式出现在 SQL 语句中,则这个单词会被加上双引号。 该参数主要用来解决用户需要使用 DM8 中的保留字作为对象名使用的状况。
LOGIN_MODE
4
指定优先登录的服务器模式。 0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式; 1:只连接主库; 2:只连接备库; 3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式; 4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式;
关于达梦中数据库模式说明请参考本表格下方备注内容。
SWITCH_TIMES
1
指定自动重连次数。如果无法成功连接到单节点数据库,则按照 SWITCH_TIMES 指定次数尝试自动重连。如果无法成功连接到数据库服务名,则按照 SWITCH_TIMES 指定的次数遍历服务名中库列表,遍历到活动的数据库则自动重连。有效值范围 1~9223372036854775807
SWITCH_INTERVAL
200
在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~922337203685477580
AUTO_RECONNECT
0
连接发生异常或一些特殊场景下连接处理策略。 0:关闭连接; 1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理; 2:配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上
JDBC
JDBC 配置项
*
JDBC 连接属性均可进行配置,具体请参考《DM8 程序员手册》表 4.1,需要将《DM8 程序员手册》表 4.1 中的属性名按 dm_svc.conf 配置项的命名规则进行变换,如 JDBC 连接属性 dbAliveCheckFreq 对应 dm_svc.conf 中的配置项名为 DB_ALIVE_CHECK_FREQ

备注:

DM 数据库包含以下几种模式:

·NORMAL:(默认)普通模式,用户正常访问数据库,操作没有限制。通常见于单机及非主备集群实例。

·PRIMARY:主库模式,用用正常访问数据库,通常见于达梦数据库主备集群。

·STANDBY:备库模式,接收主库发送的 REDO 日志并重做。数据对用户只读。通常见于达梦数据库主备集群。

常用配置举例

cat etc/dm_svc.conf
# 以#开头的行表示是注释
# 全局配置区
TIME_ZONE=(+480)
LANGUAGE=(cn)

#单机配置服务名举例
DM=(10.101.10.9:5236)

# 集群配置服务名举例
DW_PARTY=(10.101.10.10:5236,10.101.10.11:5236)

# 服务配置区
# 单机配置服务名举例
[DM]
LOGIN_MODE=(4)
SWITCH_TIMES=(300)
SWITCH_INTERVAL=(200)

# 集群配置服务名举例
[DW_PARTY]
LOGIN_MODE=(1)
SWITCH_TIMES=(300)
SWITCH_INTERVAL=(200)

注意:

  1. 配置文件中可同时添加多套服务名配置,文件中服务名应保持唯一性
  2. 配置优先级由高到低:局部服务区配置 > 全局配置区配置 > 默认配置

jdbc 连接串配置举例

数据库连接配置

1)使用 IP 端口连接

--单机
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://10.101.10.10:5236</URL>

--集群
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://test?test=(192.168.0.96:5236, 192.168.0.96:5237)</URL>

2)使用dm_svc.conf
连接

<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DM</URL>

#说明:DM为dm_svc.conf中配置的服务名

兼容性参数配置

用法 1:在连接串的 url 后添加属性

参数:compatible_mode
compatibleMode

作用:兼容其他数据库。

当前支持的兼容性值:

  • oracle
    :表示兼容Oracle
  • oracle19
    :表示兼容oracle 19c
    (最早见于手册 8.1.3.26)
  • oracle11
    :表示兼容Oracle 11g
    (最早见于手册 8.1.3.62)
  • mysql
    :表示兼容Mysql

兼容Oracle
的情况分为对老版本Oracle
的兼容和对新版本Oracle 19c
的兼容。

当 JDBC 驱动端 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.DatabaseMetaData 类的 getFunctions getProcedures getFunctionColumns getProcedureColumns 接口,可以搜索到包对象的内部存储过程和函数 。

5.DatabaseMetaData.getPrimaryKeys()返回结果中的列 pk_name 为索引名。
DM 本来返回的为约束名,Oracle 为索引名。

6.Url 格式串兼容 Oracle url 格式串前缀"jdbc:oracle:@" / "jdbc:oracle:thin:@"
例如:连接 DM 数据库时 url 可写为:”jdbc:oracle:thin:@localhost:5236” 7.CLOB/BLOB 类的写入数据接口(setXXX),参数偏移允许从 0 开始。
DM 偏移从 1 开始, 而 Oracle 从 0 开始,内部做兼容处理,允许偏移从 0 开始。

8.对于所有的数值类型,ResultSetMetaData 和 ParameterMetaData 的类型描述都为 Types.NUMERIC,当调用 getObject 接口获取数据时返回的为 BigDecimal。

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

当 JDBC 驱动端 compatible_mode=oracle19 时兼容 Oracle 19c JDBC 接口,同时也包含对老版本 Oracle 的兼容,但进行批量
绑 定 时 , executeBatch 的 返 回 值 存 在 差 异 : 配 置 为 compatiblemode=oracle19 时 正 常 返 回 实 际 影 响 的 行 数 , 配 置 为
compatiblemode=oracle 时返回-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 级别。

格式:jdbc:dm://GroupName?GroupName=(host1:port1,host2:port2,…) [&propName1=propValue1] [ & propName2=propValue2] [&…]…

举例:

jdbc:dm://192.xx.xx.xx:5236?schema=cs&compatibleMode=oracle

参数介绍:

host:数据库所在 IP 地址,缺省为 localhost。若 host 为 ipv6 地址,则应包含在[]中;
port:数据库端口号,缺省为 5236;
在?后添加参数schema_name=cs: 指定连接的模式名,效果等同于/cs,推荐使用schema_name=cs的形式。模式名省略时,默认连接到与连接用户同名的模式;
?:是参数分隔符,表示后面的都是参数;
&:是参数间隔符,多个参数用&分开;
propName:连接串属性名称。详见表 4.1;
propValue:连接串属性值。

更多属性配置,请参考官方网站(表 4.1 JDBC 连接串属性):

用法 2:配置在 DM 客户端工具连接中

更多属性配置,请参考官方网站(表 4.1JDBC
连接串属性):

SQL 兼容解析器配置

DM
提供SQL
兼容解析器以兼容不同数据库语法。目前仅支持兼容SQL Server
MySQL
语法:

  • 兼容 SQL Server 语法的解析器称为 TSQL 解析器
  • 兼容 MySQL 语法的解析器称为 MySQL 解析器。
  • SQL 兼容解析器仅在会话层面生效
  • 仅单机和数据守护环境下支持 SQL 兼容解析器。
  • 支持配置方式:
    • 1)调用系统过程SP_SET_SESSION_PARSE_TYPE
      可以在会话中开启 SQL 兼容解析器
    • 2)使用 JDBC 连接串连接DM
      数据库时,在连接串的serverOption
      属性中指定 parse_type 字段来开启 SQL 兼容解析器

调用系统函数配置 SQL 兼容解析器

使用说明:

SP_SET_SESSION_PARSE_TYPE (
  PARSE_TYPE VARCHAR(16)
)

参数说明:
parse_type:可取值 TSQL、MySQL、DM。
- TSQL 表示开启 TSQL 解析器;
- MySQL 表示开启 MySQL 解析器;
- DM 表示开启 DM 解析器,即关闭 TSQL 或 MySQL 解析器,使用 DM自身语法策略

举例说明:

例 1 开启 TSQL 解析器。
SP_SET_SESSION_PARSE_TYPE('TSQL');

例 2 开启 MySQL 解析器。
SP_SET_SESSION_PARSE_TYPE('MySQL');

例 3 开启 DM 解析器。
SP_SET_SESSION_PARSE_TYPE('DM');

在 URL 配置 SQL 兼容解析器

parse_type 字段可取值 TSQL、MySQL、DM,分别表示开启 TSQL 解析器、MySQL 解析器、DM 解析器,默认为 DM 解析器。

例 1 在连接串中指定 parse_type=TSQL 来开启 TSQL 解析器。
jdbc:dm://localhost:5236?serverOption={parse_type=TSQL}

例 2 在连接串中指定 parse_type=MySQL 来开启 MySQL 解析器。
jdbc:dm://localhost:5236?serverOption={parse_type=MySQL}

例 3 在连接串中指定 parse_type=DM 来开启 DM 解析器。
jdbc:dm://localhost:5236?serverOption={parse_type=DM}

URL 指定客户端配置文件位置

# jdbc的url参数增加dmsvcconf,实现读取指定位置的服务名配置文件
jdbc:dm://dm?dmsvcconf=path of dm_svc.conf

举例:
jdbc:dm://dm?dmsvcconf=/etc/dmsvc.conf

配置 maven 依赖

<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.2.138</version>
</dependency>

关键字屏蔽说明

首先我们要知道哪些是达梦的关键字?避免在数据库对象设计时使用

  • V$RESERVED_WORDS 视图中 RESERVED=Y 的关键字为系统保留字,无法直接在 SQL 语句中使用。
  • RES_FIXED=Y 的保留字是不能屏蔽的,屏蔽会影响使用。
SQL> select * from V$RESERVED_WORDS where RESERVED='Y' and KEYWORD='TOP';

行号     KEYWORD LENGTH      RESERVED RES_SQL RES_PL RES_SCHEMA RES_VARIABLE RES_ALIAS RES_FIXED
---------- ------- ----------- -------- ------- ------ ---------- ------------ --------- ---------
1          TOP     3           Y        Y       Y      N          N            N         N



如果非要使用这些关键字,方法有以下四种:

以下以有使用关键字 percent 和 top 为例

1.写 sql 时通过双引号引起来

select "percent","top" from tt;

注意:如果需要屏蔽的关键字属于 SQL 中的常用子句的关键字,不建议使用除添加双引号外的其他方式进行屏蔽

2.客户端连接字符串 url 中屏蔽掉

url 连接字符串添加 keywords=(屏蔽的关键字, 屏蔽的关键字)

jdbc:dm://192.168.80.133:5236/DAMENG?keywords=(percent, top)

注意:这里的/DAMENG 是在指定模式名,不是实例名,效果等同于使用?schema_name=DAMENG

3.客户端连接配置文件中屏蔽掉

修改/etc/dm_svc.conf
文件,在全局部分或者局部服务名后面添加【多个需屏蔽的关键字之间用逗号隔开】

注意:若全局和局部均进行了关键字屏蔽配置,局部优先级高于全局

举例:

TIME_ZONE=(480)
LANGUAGE=(cn)
KEYWORDS=(percent,top) #全局
DM1=(192.168.80.133:5237) # 为某个单机实例配置服务名为DM1
[DM1]                     # 为服务名为DM1的实例配置具体参数
TIME_ZONE=(480)
LANGUAGE=(cn)
KEYWORDS=(percent,top) #局部

需要重启应用生效

  1. 数据库服务端屏蔽掉(不推荐)

不建议这样处理,可能引起其它异常

--查询数据库中屏蔽的关键字
select * from v$dm_ini where para_name='EXCLUDE_RESERVED_WORDS';

方式 1:直接修改 dm.ini 配置文件中的 EXCLUDE_RESERVED_WORDS 参数

注意:多个需屏蔽的关键字之间用逗号隔开

EXCLUDE_RESERVED_WORDS=屏蔽的关键字, 屏蔽的关键字

方式 2:disql 进入数据库实例,不推荐使用,执行以下命令:

sp_set_para_string_value(2,'EXCLUDE_RESERVED_WORDS','percent,top');


修改参数后,重启数据库服务生效

关键字导致的问题举例

1)设置屏蔽 DM 关键字方式不正确导致 DM 自增出问题

问题:IDENTITY 关键字屏蔽后无法使用自增列

具体描述:修改数据库 dm.ini 中参数 EXCLUDE_RESERVED_WORDS、配置客户端 dm_svc.conf 文件,添加 KEYWORDS 配置项

以上这两种屏蔽关键字的方法都会使自增列无法使用

正确的处理方式:这种情况不建议使用除添加双引号外的其他方式进行屏蔽

2)数据库执行 SQL 语句,总提示语法分析错误。

SQL 语句语法确定是正确的情况下,总提示语法分析错误,并且不存在特殊字符引发报错的可能。

可先查看是否在数据库开启了关键字屏蔽。

3)在数据库层面配置关键词可能导致第三方备份软件失败,或者dexp、dimp部分功能异常等问题。


文章转载自国产数据库学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论