上海蒙马软件技术有限公司

2021年8月8日

一、DM数据库初始化参数说明

达梦数据库初始化实例后初始化参数无法修改,如果要调整必须重新初始化库,所以为了移植、开发、维护的方便,根据应用特征合理规划初始化参数尤为重要,确定后形成安装规范项目组成员保持一致,如果初始化参数不一致的数据库实例间的物理备份、逻辑备份等将不能互用。

初始化参数进行详细说明:

初始化参数

对数据库使用的影响

页大小(page size)

字符串字段的最大长度及每行记录的总长度

日志文件大小(rlog)

高并发事务下的刷盘速度

时区(time zone)

时区不同时造成的时间不一致

字符串比较大小写敏感(string case sensitive)

SQL 语句及应用是否兼容

字符集(charset)

字符的存储空间及可识别字符的数量

VARCHAR 类型以字符为单位(lengthin char)

dm 字符类型默认以字节来存储,影响应用对字符长度的判断

改进字符串 HASH 算法

改进字符串 HASH 算法

1) 页大小

在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。

页大小对字符数据类型实际最大长度及每行记录的影响如下表所示(不同的数据库版本略有差异):

数据库页大小

每个字符类型字段实际最大长度(字节)

每行记录除大字段外其他字段总长度(字节)

4K

1900

2000

8K

3900

4000

16K

8000

8000

32K

8188

16000

除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为 16 或者 32

2) 日志文件大小

每个 DM 数据库实例必须至少有 2 个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用,日志文件在初始化实例后可以增加和扩大,小型 OA 系统建议设置为 2*256M,在线大型交易系统建议设置为 4*2048M

3) 时区

选择时区前,需要确认操作系统时区和数据库时区一致,以避免操作系统上看到的时间,和数据库中的时间存在差异。建议使用北京时间+8:00。

4) 字符串比较大小写敏感

为了兼容不同的数据库,达梦在初始化数据库的时候有一个参数,用来设置字符串比较是否大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感, ORACLE 迁移过来的系统,使用大小写敏感,以便和原来系统匹配。

5) 字符集

建议采用默认值 GB18030,如果需要国际字符可以采用 Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间些。

6)以字符为单位

该参数的作用是建表时 VARCHAR 的长度是按照字符计算还是字节计算,默认以字节为单位,即字段的长度单位按照字节计算,如果采用字符为单位,字段的长度单位按照字符来计算,不同的字符集会导致字段长度不一样,实际最大长度受到页大小的限制。建议采用默认以字节为单位,如果从 MYSQL 迁移的同时又不方便扩大表结构的长度,需要设置为以字符为单位。

7)改进字符串 HASH 算法

在之前的达梦版本上用的旧的 HASH 算法(大概 2014 年 10 月前后,具体时间未知),之后的版本默认使用新 HASH 算法,如果是从之前旧版本数据还原到新版本上使用,不能使用改进字符串 HASH 算法,其他情况使用改进字符串 HASH 算法。

示例一:从 ORACLE 迁移一个 24 小时在线交易型系统,数据量 300G 以上,表数量 500张以上,表含有少量 VARCHAR2(4000)字段,日增数据量 10 万条以上,建议:

簇大小:16                    #每次申请的页数,表存满了以后会一次性连续申请16个页
页大小:16K
日志文件大小:4*2048M
时区:+8:00
字符串比较大小写敏感:是
字符集:GB18030
VARCHAR 类型以字符为单位:否
改进字符串HASH算法:是

示例二:从 MYSQL 迁移一个电子政务系统,含大量 VARCHAR2(4000)字段,日增数据量 100 条,建议:

簇大小:16
页大小:32K
日志文件大小:2*256M
时区:+8:00
字符串比较大小写敏感:否
字符集:GB18030 (如果涉及非中英文字符选择 Unicode,VARCHAR 类型以字符为单位:如果采用达梦 DTS 迁移选否,采用 SQL 脚本迁移选是)
改进字符串HASH算法:是

二、已有实例

系统中已经按照下面的指令建立了一个实例

./dminit PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1 DB_NAME=arpdb PATH=/opt/dmdbms/data

三、多实例注意事项

如果需要在初始化数据库实例,需要修改一下参数

  • DB_NAME 数据库名称(缺省:DAMENG)
  • INSTANCE_NAME 实例名(缺省:DMSERVER)
  • PORT_NUM 监听端口号(缺省:5236)

四、创建第二个实例

cd /opt/dm8/bin
./dminit PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1 DB_NAME=memadb PATH=/opt/dm8/data PORT_NUM=5327

五、启动第二个实例和数据库

./dmserver /opt/dmdbms/data/memadb/dm.ini

再开一个终端:

进入dmdba用户,查看进程状态:

ps -ef|grep dm

查看端口情况:

ss -nltp

六、用disql访问

使用disql访问,需要提供端口号

七、注册实例到系统服务

注册实例实现systemd管理,实现自动启停。

注册前:

注册(root用户运行):

命令:dm_service_installer.sh

关键参数:

  • -t 服务类型,包括dmimon,dmap,dmserver,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr,dmdcs,dmdrs,dmdras,dmdss
  • -p 服务名后缀,对于dmimon,dmap服务类型无效
cd /opt/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p memadb  -dm_ini /opt/dmdbms/data/memadb/dm.ini

注册后:  

八、查看实例服务状态

重启机器,查看服务状态

九、实例启停查看

#用root用户
#启动数据库服务
systemctl start DmServicememadb
#停止数据库服务
systemctl stop DmServicememadb
#查看数据库服务状态
systemctl status DmServicememadb

十、练习

1、初始化数据库

dmdba用户运行

## dmdba用户

cd /opt/dmdbms/bin

# 创建新的数据库testdb,实例名称test

./dminit PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1  PATH=/opt/dmdbms/data DB_NAME=testdb INSTANCE_NAME=test PORT_NUM=5000

# 启动
./dmserver /opt/dmdbms/data/testdb/dm.ini

2、注册实例到服务

root用户运行 (注册服务前,再dmserver控制台按ctrl+C,停止数据库例程)

cd /opt/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p testdb  -dm_ini /opt/dmdbms/data/testdb/dm.ini
# -t   服务类型,包括dmimon,dmap,dmserver,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr,dmdcs,dmdrs,dmdras,dmdss
# -p   服务名后缀,对于dmimon,dmap服务类型无效

3、数据库实例运行日志

数据运行运行日志位于/opt/dmdbms/log下:

  • 例程日志:dm_TEST_202107.log
  • 数据库日志:DmServicetestdb.log