已索引
达梦数据库版本介绍与选择
达梦数据库各版本的差异体现在产品的功能组件上。
目前用户主要选择的是开发版和企业版,开发版与企业版仅仅是License的区别。
- 开发版:不能作为商用,安装无需单独key,系统有内嵌key,试用时间从版本制作日开始计算为期一年,具体可以通过 v$license.EXPIRED_DATE 查看。
- 标准版:适合中小企业需求,不支持扩展组件(各种集群、DMHS同步),不支持DBLINK、HUGE表、分区表、并行查询,不支持小型机,不支持多于2CPU的平台,单表不超过1亿条,总空间不超过500G,并发不超过25。
- 企业版:功能齐全,支持高级特性。企业版是使用最广泛的版本。
- 安全版:安全版拥有企业版的所有功能,并重点加强了其安全特性,引入强制访问控制功能,采用数据库管理员(DBA)、数据库审计员(AUDITOR)、数据库安全员(SSO)三权分立安全机制,支持KERBEROS、操作系统用户等多种身份鉴别与验证,支持透明、半透明等存储加密方式以及审计控制、通信加密等辅助安全手段,使 DM 安全级别达到 B1 级,适合于对安全性要求更高的政府或企业敏感部门选用。
安装手册
在安装介质的 ISO 文件中有安装手册。
部署规划
根据CPU架构、操作系统版本选择安装介质。本文以海光、Kylin V10 和 DM8 为例。
操作系统:Kylin Linux Advanced Server release V10 (Lance)
数据库版本:DM V8 20241226
路径规划:
数据库安装路径 /dmdb/dmdbms
数据库实例路径 /dmdb/dmdata/DMDB
归档路径 /dmdb/dmarch/DMDB
备份路径 /orabak (所有数据库均沿用该目录,且使用独立磁盘,独立VG,防止备份导致文件系统满了后数据库挂起)
实例信息:
实例名称INSTANCE_NAME: DMDBPRI/DMDBSTD
实例端口PORT_NUM: 5236(生产环境不使用默认端口)
页大小PAGE_SIZE: 32
簇大小EXTENT_SIZE: 16
编码格式CHARSET: UTF-8(默认是GB18030)
字符大小写敏感CASE_SENSITIVE: 是
以字符为单位LENGTH_IN_CHAR: 否(MySQL是以字符为单位的)
安装前配置
注意:主备库服务器操作一致。
准备目录
mkdir /dmdb
chown dmdba.dinstall /dmdb
创建用户与组
安装前必须创建 dmdba 用户,禁止使用 root 用户安装数据库
groupadd -g 3001 dinstall
useradd -u 3001 -g dinstall dmdba
echo 'xxxxx' | passwd --stdin dmdba <-- 密码会由堡垒机统一修改为随机密码
快速安装
/tmp 目录要1个G以上,并且操作系统安装了gcc。
如果仅用于个人测试,创建好用户、组、目录后,就可以运行安装程序了。
$ ./DMInstall.bin -i
加 -i 是文本界面,不加是图形界面,根据向导安装即可。
调整磁盘调度算法
# cat /sys/block/vdb/queue/scheduler
[mq-deadline] kyber bfq none
deadline算法在 Kylin V10 中为 mq-deadline,在 RHEL7 中为 deadline。如果默认不是deadline算法,通过修改 /etc/default/grub在 grub 的引导配置文件中加入 elevator=[deadline|mq-deadline]。
重启后再次确认磁盘调度算法。
说明:deadline 调度算法保证超时(达到最终期限时间)的队列中的请求会优先被处理,防止请求被饿死。因此,Deadline 对数据库环境是最好的选择。
关闭 swap
Swap 的关闭需要视情况而定,建议内存充裕时关闭,内存太小不关闭。
如需关闭,在 fstab 文件中注释掉该行即可。
关闭 numa
通过修改 /etc/default/grub 在 grub 的引导配置文件中加入 numa=off。
生成新的配置文件,根据实际情况选择下面的语句执行:
grub2-mkconfig -o /etc/grub2.cfg
或者
grub2-mkconfig -o /etc/grub2-efi.cfg
重启主机后确认 NUMA 是否关闭:
dmesg | grep -i numa
说明:NUMA(Non-Uniform Memory Access)架构是为了解决多 CPU 下内存访问冲突,即不再将整个物理内存作为一个整体,而是根据不同的 CPU 区分不同的内存块,如 2 颗 CPU 每颗 CPU 使用 64G 内存。当 NUMA 参数 zone_reclaim_mode 设置为 1 时,内核将要求多路 CPU 尽量从距离较近的系统内存节点(服务器的整体内存在 numa 架构下将被分成若干个节点)分配内存,而不是在整个服务器可访问内存的范围内进行内存分配。因此,在较高内存占用压力下,内存申请会触发内存频繁回收整理的机制,严重影响系统整体性能(长期处于内核态 sys 很高),进而可能导致 SQL 卡顿问题的发生。
关闭透明大页
--查看是否启用透明大页
cat /sys/kernel/mm/transparent_hugepage/enabled
[always]表示透明大页启用 [never]表示透明大页禁用
通过修改 /etc/default/grub 在 grub 的引导配置文件中加入 transparent_hugepage=never。
生成新的配置文件,根据实际情况选择
grub2-mkconfig -o /etc/grub2.cfg
或者
grub2-mkconfig -o /etc/grub2-efi.cfg
重启主机后确认大页是否关闭。
说明:在 khugepaged 进行扫描进程占用内存,并将 4k Page 交换为 Huge Pages 的这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能。并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为 4k page 优化的程序来说,可能会造成随机的性能下降现象。
调整overcommit
vim /etc/sysctl.conf
修改vm.overcommit_memory=0
然后执行sysctl -p 使配置文件生效
参数值为0表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1:表示内核允许分配所有的物理内存,不管当前的内存状态如何。2:表示内核允许分配超过所有物理内存和交换空间总和的内存。
修改系统limit限制
vim /etc/security/limits.conf
dmdba soft nproc 20480
dmdba hard nproc 20480
dmdba soft nofile 32768
dmdba hard nofile 32768
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
注意检查是否有子配置文件,Kylin v10 没有, RHEL 有,如果有,需要将其删除或者注释掉。
调整 system.conf 参数
当运行系统实例时,systemd 读取 system.conf,当运行用户实例时,读取 user.conf。
达梦数据库服务注册为系统服务的进程,如通过 systemctl 或者 service 方式设定随机自启动的数据库服务,其能打开的最大文件描述符、proc 数量等不受 limits.conf 控制,需要修改 /etc/systemd/system.conf 文件。
调整项介绍
(1) DefaultLimitNOFILE:用户默认最大打开文件数。
(2) DefaultLimitNPROC:用户默认最大进程数。
添加配置:
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=10240
保存退出后需要重启服务器才能生效。
安装数据库管理软件
安装软件
注意:主备库服务器操作一致。
# mount -o loop 安装包 /mnt
该ISO文件里面有两个文件:DM8 Install.pdf 和 DMInstall.bin
# su - dmdba <--- root装也没问题,不需要执行脚本了,会自动修改安装目录文件属性为 dmdba.dinstall
$ /mnt/DMInstall.bin -i <--- 如果不加参数-i就是图形化安装
Installer Language:
[1]: 简体中文
[2]: English
Please select the installer's language [2]: 这个默认值是根据操作系统的语言自动选择的,我们都选择2
Extract install files.........
Welcome to DM DBMS Installer
Whether to input the path of Key File? (Y/y:Yes N/n:No) [Y/y]:n
Whether to Set The TimeZone? (Y/y:Yes N/n:No) [Y/y]:
TimeZone:
[ 1]: (GTM-12:00) West Date Line
[ 2]: (GTM-11:00) Samoa
[ 3]: (GTM-10:00) Hawaii
[ 4]: (GTM-09:00) Alaska
[ 5]: (GTM-08:00) Pacific(America and Canada)
[ 6]: (GTM-07:00) Arizona
[ 7]: (GTM-06:00) Central(America and Canada)
[ 8]: (GTM-05:00) East(America and Canada)
[ 9]: (GTM-04:00) Atlantic(America and Canada)
[10]: (GTM-03:00) Brasilia
[11]: (GTM-02:00) Middle Atlantic
[12]: (GTM-01:00) Azores
[13]: (GTM) Greenwich Mean Time
[14]: (GTM+01:00) Sarajevo
[15]: (GTM+02:00) Cairo
[16]: (GTM+03:00) Moscow
[17]: (GTM+04:00) AbuDhabi
[18]: (GTM+05:00) Islamabad
[19]: (GTM+06:00) Dakar
[20]: (GTM+07:00) BangKok,Hanoi
[21]: (GTM+08:00) China
[22]: (GTM+09:00) Seoul
[23]: (GTM+10:00) Guam
[24]: (GTM+11:00) Solomon
[25]: (GTM+12:00) Fiji
[26]: (GTM+13:00) Nukualofa
[27]: (GTM+14:00) Kiribati
Please Select the TimeZone [21]:
Installation Type:
1 Typical
2 Server
3 Client
4 Custom
Please Input the number of the Installation Type [1 Typical]:
默认是Typical,包含的组件有Server、Client、Drivers和`Service`
Require Space: 2229M
Please Input the install path [/dmdb/dmdbms]: /dmdb/dmdbms
Available Space:56G
Please Confirm the install path(/dmdb/dmdbms)? (Y/y:Yes N/n:No) [Y/y]:
Pre-Installation Summary
Installation Location: /dmdb/dmdbms
Require Space: 2229M
Available Space: 56G
Version Information:
Expire Date:
Installation Type: Typical
Confirm to Install? (Y/y:Yes N/n:No):y
2024-04-17 10:20:41
[INFO] Installing DM DBMS...
2024-04-17 10:20:41
[INFO] Installing BASE Module...
2024-04-17 10:20:44
[INFO] Installing SERVER Module...
2024-04-17 10:20:44
[INFO] Installing CLIENT Module...
2024-04-17 10:20:44
[INFO] Installing DRIVERS Module...
2024-04-17 10:20:45
[INFO] Installing MANUAL Module...
2024-04-17 10:20:45
[INFO] Installing SERVICE Module...
2024-04-17 10:20:45
[INFO] Move log file to log directory.
2024-04-17 10:20:45
[INFO] Installed DM DBMS completely.
Please execute the commands by root:
/dmdb/dmdbms/script/root/root_installer.sh
End
根据提示,以 root 执行脚本:
# /dmdb/dmdbms/script/root/root_installer.sh
Move /dmdb/dmdbms/bin/dm_svc.conf to /etc
Create the DmAPService service
Created symlink /etc/systemd/system/multi-user.target.wants/DmAPService.service → /usr/lib/systemd/system/DmAPService.service.
Finished to create the service (DmAPService)
Start the DmAPService service
如果是图形界面,安装结束后会提示初始化数据库,暂不初始化,我们后面人工初始化。
配置环境变量
注意:主备库服务器操作一致。
DM数据库软件安装完成后,会在 dmdba 的 .bash_profile 中自动配置如下变量:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dmdb/dmdbms/bin"
export DM_HOME="/dmdb/dmdbms"
但做的不太好,建议删除后修改为如下内容:
$ vim /home/dmdba/.bash_profile
export DM_HOME=/dmdb/dmdbms
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
创建数据库(初始化实例)
注意:
主备库服务器操作一致。
备库实例初始化只需要将DMDBPRI修改为DMDBSTD即可。
主备库实例名不能一致,数据库名可以一致。
命令行方式
$ cd /dmdb/dmdbms/bin
./dminit help
./dminit PATH=/dmdb/dmdata PAGE_SIZE=32 EXTENT_SIZE=16 CASE_SENSITIVE=1 CHARSET=1 PAGE_CHECK=0 LOG_SIZE=2048 DB_NAME=DMDB INSTANCE_NAME=DMDBPRI PORT_NUM=15236 SYSDBA_PWD=xxxx SYSAUDITOR_PWD=xxxx
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-12-25
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dmdb/dmdata/DMDB/DMDB01.log
log file path: /dmdb/dmdata/DMDB/DMDB02.log
write to dir [/dmdb/dmdata/DMDB].
create dm database success. 2025-03-04 16:42:46
初始化后启动一次验证实例
$ ./dmserver /dmdb/dmdata/DMDB/dm.ini
前台出现 "SYSTEM IS READY." 后,表示实例启动成功,执行 exit 退出。
图形界面方式
以 dmdba 身份执行 /dmdb/tool/dbca.sh
根据需要选择创建/删除数据库实例、注册/删除数据库服务。
数据库目录:默认是 /dmdb/data,根据际情况进行修改。
指定数据库名(默认DAMENG)、实例名(默认DMSERVER)和端口(默认5236)。
指定控制文件、数据文件和日志文件位置,默认在 /dmdb/data/<DBNAME>/下面,根据际情况进行修改。这儿只是指定了日志文件的数量(默认两个),大小在下一步指定。
指定数据库相关参数:簇大小、页大小、字符集、大小写敏感等一旦指定,数据库创建完成将无法更改。
指定 SYSDBA 和 SYSAUDITOR 的密码。
根据情况,决定是否勾选示例数据库。
创库后期,会提示以 root 身份执行三条命令来注册数据库服务。
如果计划要部署守护集群的话,则不要执行下面的命令来注册数据库服务。
# mv /dmdb/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
# systemctl enable DmServiceDMSERVER.service
# systemctl start DmServiceDMSERVER.service
注册数据库服务
如果需要配置数据守护集群,请跳过该步。
可以通过命令行或者图形界面来注册数据库服务。
如果是使用的 DBCA 建库,在结束时会提示用户执行脚本来注册服务。
dminit 方式建库只是创建了相关的数据库文件,并没有创建数据库服务。
没有注册数据库服务则只能以前台或后台方式来启动数据库。
如果要以服务的方式来控制启停,则需要注册数据库服务。
命令行
# cd /dmdb/dmdbms/script/root/
./dm_service_installer.sh -h
./dm_service_installer.sh -t dmserver -dm_ini /dmdb/dmdata/DMDB/dm.ini -p DM -m open
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDM.service → /usr/lib/systemd/system/DmServiceDM.service.
Finished to create the service (DmServiceDM)
# systemctl start DmServiceDM.service
# systemctl enable DmServiceDM.service
-p DM 这儿可以任意写,这儿写什么,DmServiceDM.service 中的 DM 就变为什么。
图形界面
用 dmdba 身份执行 /dmdb/tool/dbca.sh
选择注册数据库服务
指定 dminit 创建的数据库的 ini 文件路径,其它保持默认
点击 finish,会提示以 root 身份执行三条命令:
# mv /dmdb/bin/DmServiceDEMOSRV.service /usr/lib/systemd/system/DmServiceDEMOSRV.service
# systemctl enable DmServiceDEMOSRV.service
# systemctl start DmServiceDEMOSRV.service
启动数据库
方法1:dmdba 用户启动
该方法可以控制数据库启动到 mount 阶段
1).前台启动方式:
/dmdb/bin/dmserver /dmdb/data/DEMODB/dm.ini
如果没有注册数据库服务,只能使用此方式启动。执行命令的终端关闭后,数据库服务也被关闭。
2).后台启动方式:
$ /dmdb/bin/DmServiceDEMOSRV start [mount]
方法2:systemctl
root: systemctl start | stop | status DmService<注册名>
方法3(图形界面):
root: /dmdb/tool/dmservice.sh
该工具类似Windows的 Service 工具,可以对服务进行管理
注意:启动时会有 Warning,忽略,这是操作系统的兼容性问题
数据库参数优化
主备库操作一致,重启生效。
disql SYSDBA/xxxx(没有更改默认端口的话)
disql SYSDBA/xxxx@127.0.0.1:15236
set serverout on;
start /home/dmdba/AutoParaAdj3.8_dm8.sql
调优文件主要根据实际情况修改前面定义的变量的值,文件里有对变量的解释,如下:
exec_mode int:= 0; --0表示直接执行脚本修改参数,1表示不直接修改参数,打印设置参数的语句,设置为1后,必须调整v_mem_mb和v_cpus
is_dsc int := 0; --是否是dsc集群,如果是dsc集群请设置为1,将自动调整dsc相关参数
mem_per int:= 70; --默认所有的内存归达梦数据库使用,如实际不能100%可用,可以调整此参数; MAX_OS_MEMORY强制100不与此参数挂钩(默认是80)
v_mem_mb int:= 30826; --exec_mode为1时请自行根据机器实际内存调整此参数,单位为M
v_cpus int:= 16; --exec_mode为1时请自行根据机器实际CPU核数调整此参数
oltp_mode int:=0; --并发量较高的OLTP类型系统此参数设置为1,并发量不高的一般业务系统和OLAP类的系统此参数设置为0,影响SORT_FLAG和UNDO_RETENTION
pk_cluster_mode int:=0; --是否使用聚集主键:性能要求高且大字段较少的业务场景强烈建议设置为1,大字段多的场景设置为0
优化脚本会根据 v_mem_mb*(mem_per/100) 按照最佳实际比例进行计算分配。
开启SQL日志
主备库均要执行。
登录数据库后执行
disql SYSDBA/xxxx(没有更改默认端口的话)
disql SYSDBA/xxxx@127.0.0.1:15236
sp_set_para_value(1,'SVR_LOG',1);
exit
vim /dmdb/dmdata/DMDB/sqllog.ini
BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100)
[SLOG_ALL]
FILE_PATH = ..\log ##日志生成路径
PART_STOR = 0
SWITCH_MODE = 2 ##切换模式-文件大小切换
SWITCH_LIMIT = 512 ##单个文件大小,默认值是128
ASYNC_FLUSH = 1 ##异步日志
FILE_NUM = 10 ##文件个数,默认值是5
ITEMS = 0
SQL_TRACE_MASK = 1 ##1表示记录所有的SQL,2表示DML,3表示DDL
MIN_EXEC_TIME = 0
USER_MODE = 0
USERS =
EXECTIME_PREC_FLAG = 0
[SLOG_ERROR]
SQL_TRACE_MASK = 23 ##23表示语法、语义错误的语句
FILE_PATH = ..\log
[SLOG_DDL]
SQL_TRACE_MASK = 3
[SLOG_LONG_SQL]
SQL_TRACE_MASK = 25 ##25表示执行DML语句影响的行数
MIN_EXEC_TIME = 60000
调整完成后 登录数据库执行
SP_REFRESH_SVR_LOG_CONFIG(); --生效SQL日志配置
配置归档
如果是单机,参照下文配置本地归档。
如果需要配置数据守护集群,请跳过该步。
配置数据库备份
如果是单机,请参考下文配置数据库备份。
如果需要配置数据守护集群,请暂时跳过该步,配置完成后再配置定时备份。
删除数据库服务、数据库(实例)、软件
删除数据库服务(命令行)
该方法不需要先 systemctl stop 数据库,但如果后面计划删除数据库,就 stop 一下。
# /dmdb/script/root/dm_service_uninstaller.sh -h
# /dmdb/script/root/dm_service_uninstaller.sh -n DmService<注册名>
删除数据库服务(图形界面)
先 systemctl stop 掉数据库,然后用 dmdba 身份执行 /dmdb/tool/dbca.sh,选择删除数据库服务即可。
注意最后会提示执行如下两条命令:
# systemctl disable DmService<注册名>.service
# rm -f /usr/lib/systemd/system/DmService<注册名>.service
删除数据库(删除实例)
如果需要删除实例,删除实例目录即可,如果已经注册了后台服务,请先删除服务。
在删除数据库之前,先停止数据库实例。
rm -rf /dmdb/dmdata/DMDB
DM8 软件卸载
以 dmdba 身份执行 /dmdb/uninstall.sh
注意按照提示用 root 执行脚本
卸载后需要手工删除目录