达梦 DM9 部署实战:从上传到连库全流程

达梦 DM9 在 CentOS 7 下的详细部署实战指南(数据目录全走 /data 分区)

8 个步骤、5 个坑,全程真实输出。 达梦同行者 DM9 征文开跑,我拿了一台已经跑了十几个国产数据库的 CentOS 7 老伙计,从零装了一遍 DM9。没有"预计输出"、没有"略",每一步的命令和返回都是原样复制,踩的坑全部带报错原文。照着做,四十分钟连上库。

作者:(江湖人称"数据库界华少")| shunwah 星辰数智社

实验环境:

项目 实测值
操作系统 CentOS Linux 7.9.2009(kernel 3.10.0-693.el7.x86_64)
CPU 8 核 · Intel Xeon Gold 6126 @ 2.60GHz(VMware 虚机)
内存 27G(available 22G),Swap 8G 全空
根分区 91G ext4, 已用 76%(只剩 21G)
数据盘 /dev/sdb1 xfs 200G, 可用 184G
安装包 dm9_20260514_x86_centos7_64.zip(iso 1003M)
部署形态 单机集中式(试用版,2027-04-17 到期)

公众号首图封面设计 4.jpg

目录

  1. 部署前环境检查
  2. 目录规划:全部走 /data
  3. 传包与校验(踩坑 1:SHA256 文件格式)
  4. 创建用户(踩坑 2:UID 撞车)
  5. 挂载安装镜像
  6. 交互式安装 DM9
  7. root 后置脚本
  8. 系统调优:limits / THP / swappiness
  9. 初始化实例 dminit
  10. 注册服务并启动
  11. disql 连库验证
  12. 验收查询:五条 SQL 确认身份
  13. 踩坑汇总
  14. 总结

1、部署前环境检查

先看这台机器扛不扛得住。这台机器有个特点: /data 目录下已经躺着十几个国产数据库——金仓、openGauss、TiDB、OceanBase、崖山、Vastbase、KWDB……在这种"动物园"环境里装 DM9,比干净虚机更能撞见真坑。

cat /etc/redhat-releasedf -Th
free -huname -m

真实输出(关键行):

[root@worker3 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@worker3 ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root ext4       91G   65G   21G  76% /
/dev/sda2               ext4      190M  119M   58M  68% /boot
/dev/sdb1               xfs       200G   17G  184G   9% /data
/dev/sr0                iso9660   792M  792M     0 100% /run/media/root/CentOS 7 x86_64
[root@worker3 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            27G        1.9G         19G        1.4G        5.8G         22G
Swap:          8.0G          0B        8.0G
[root@worker3 ~]# uname -m
x86_64

环境检查

⚠️ 一个决定后面所有路径的选择:根分区只剩 21G、已用 76%,而 /data 有 184G 闲着。所以这篇的全部路径——软件、数据、安装包、备份—— 一律走 /data,根分区一个字节都不多占。这也是我给所有"老服务器装新库"的人的第一条建议。

依赖检查(libaio 是 DM 的硬依赖,glibc 2.17 是 CentOS 7 自带的,DM9 安装器会自行校验):

rpm -qa | grep libaio
ldconfig -p | grep libaio

2、目录规划:全部走 /data

目录路径 用途 所属分区
/data/dm9/app/dmdbms 数据库软件安装目录 /data(200G)
/data/dm9/dmdata/data 实例数据文件目录 /data(200G)
/data/dm9/dmdata/arch 归档日志目录 /data(200G)
/data/dm9/dmdata/backup 备份文件目录 /data(200G)
/data/dm9/soft 安装包暂存目录 /data(200G)

软件与数据逻辑分离、物理同盘,既满足分离原则,又避开根分区的 76%。

3、传包与校验

安装包提前传到 /opt,先挪到数据盘再解压:

mkdir -p /data/dm9/softmv /opt/dm9_20260514_x86_centos7_64.zip /data/dm9/soft/cd /data/dm9/soft && unzip dm9_20260514_x86_centos7_64.zipls -lh

传包

解压出三个文件,iso 是 1003M:

[root@worker3 opt]# mkdir -p /data/dm9/soft && mv dm9_20260514_x86_centos7_64.zip /data/dm9/soft/
[root@worker3 opt]# cd /data/dm9/soft && unzip dm9_20260514_x86_centos7_64.zip
Archive:  dm9_20260514_x86_centos7_64.zip
  inflating: dm9_20260514_x86_centos7_64.iso
 extracting: dm9_20260514_x86_centos7_64.iso_SHA256.txt
  inflating: dm9_20260514_x86_centos7_64_ent_9.1.0.26.README
[root@worker3 soft]# ls -lh
total 2.0G
-rw-r--r-- 1 root  root       226 Aug 14 11:42 dm9_20260514_x86_centos7_64_ent_9.1.0.26.README
-rw-r--r-- 1 root  root     1003M Aug 14 11:42 dm9_20260514_x86_centos7_64.iso
-rw-r--r-- 1 root  root       148 Aug 14 11:42 dm9_20260514_x86_centos7_64.iso_SHA256.txt
-rwxr-xr-x 1 dmdba dinstall  986M Sep 20 15:10 dm9_20260514_x86_centos7_64.zip
[root@worker3 soft]#

顺手看一眼 README,里面有构建环境的真实锚点:

[root@worker3 soft]# cat dm9_20260514_x86_centos7_64_ent_9.1.0.26.README
OPENSSL VERSION:  OpenSSL 3.5.4
GCC VERSION:      gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
GLIBC VERSION:    ldd (GNU libc) 2.17
GLIBCXX VERSION:  GLIBCXX_3.4.19
Build ID:         6074dd372445dfddd5943ee9d58918df8e07ba8a

按惯例跑 sha256sum -c 校验,它给我回了句不客气的:

[root@worker3 soft]# sha256sum -c dm9_20260514_x86_centos7_64.iso_SHA256.txt
sha256sum: dm9_20260514_x86_centos7_64.iso_SHA256.txt:
no properly formatted SHA256 checksum lines found

? 踩坑 1 · 校验文件不是标准格式

不是包坏了——是这个 148 字节的校验文件是 Windows CertUtil 导出的格式( sha256sum -c 只认 哈希 文件名 两列格式),GNU coreutils 解析不了。绕开它,把两边各 64 位的哈希提出来直接比:

cd /data/dm9/soft
a=$(sha256sum dm9_20260514_x86_centos7_64.iso | awk '{print $1}')
b=$(grep -oiE '[0-9a-f]{64}' dm9_20260514_x86_centos7_64.iso_SHA256.txt | head -1)echo "本机算的: $a"echo "官方给的: $b"[ "$a" = "$b" ] && echo "OK-校验通过" || echo "MISMATCH-重新传包"
本机算的: 66e909973ece7b3527b6d78210d2e5a05a1ad45b8c82a66ae03ff1b442acbe47
官方给的: 66e909973ece7b3527b6d78210d2e5a05a1ad45b8c82a66ae03ff1b442acbe47
OK-校验通过

两串哈希一字不差,放行。1G 的包传输出错不罕见,校验不过就重传——装到一半报奇怪的错,排查成本比重传高十倍。

校验

4、创建用户

先建组,再建用户。 注意:我第一遍就踩了坑。

groupadd dinstall -g 2001
useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
useradd: UID 2001 is not unique

? 踩坑 2 · UID 撞车

这条报错只在"一台机器装过多个国产数据库"的环境里才撞得到——UID 2001 早被别的库占了。而且 useradd 失败后,下一条 passwd 还会跟着报 Unknown user name 'dmdba',两个报错串在一起,特别容易怀疑自己手滑。

解法:别指定 UID,让系统自己分。

useradd -G dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba          # 输入你自己的强密码,别照抄别人的
[root@worker3 soft]# useradd -G dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@worker3 soft]# passwd dmdba
Changing password for user dmdba.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

建用户

5、挂载安装镜像

mkdir -p /mnt/dm9
mount -o loop /data/dm9/soft/dm9_20260514_x86_centos7_64.iso /mnt/dm9ls -l /mnt/dm9
[root@worker3 soft]# mkdir -p /mnt/dm9
[root@worker3 soft]# mount -o loop /data/dm9/soft/dm9_20260514_x86_centos7_64.iso /mnt/dm9
mount: /dev/loop0 is write-protected, mounting read-only
[root@worker3 soft]# ls -l /mnt/dm9
total 1026317
-r-xr-xr-x 1 root root    4250937 Apr  3 10:24 DM9-Install Manual.pdf
-r-xr-xr-x 1 root root 1046697406 May 14 14:42 DMInstall.bin
[root@worker3 soft]#

提示 write-protected, mounting read-only 是正常话术,只读挂载本来就该这样。看到 DMInstall.bin 和安装手册 PDF,就可以进安装器了。

挂载

6、交互式安装 DM9

su - dmdbacd /mnt/dm9
./DMInstall.bin -i

安装器每一步的选择(我替你先踩过一遍):

安装器提问 选择 原因
Installer Language 1 简体中文
许可协议 2 同意并继续
安装组件 1,2 服务器 + 客户端工具
指定安装目录 /data/dm9/app/dmdbms ⚠️ 必须手填!默认值 /home/dmdba/dmdbms 在根分区,会把 76% 顶到报警
许可证文件路径 直接回车 走试用版
确认安装 y

安装语言

安装小结

安装过程一路打勾,关键点全部真实通过:

[dmdba@worker3 dm9]$ ./DMInstall.bin -i
Installer Language:
  1) 简体中文
  2) English
Please enter an option[2]:1
正在解压安装包...
硬件架构校验通过!
GLIBC VERSION校验通过!
所需磁盘空间: 1.99GB
可用磁盘空间: 181.41GB
可用内存: 25.39GB
...
达梦数据库DM9安装完成
安装目录: /data/dm9/app/dmdbms
更多安装信息, 请查看安装日志文件: /data/dm9/app/dmdbms/log/install.log
请以root用户执行脚本: /data/dm9/app/dmdbms/script/root/root_installer.sh
[dmdba@worker3 dm9]$

? 一个小细节:安装小结里「版本信息」「有效日期」两栏是空的,别慌——这是试用版的正常表现,真正的版本号要等连库后查 v$version 才拿得到(第十二节有)。

7、root 后置脚本

安装器最后那句"请以 root 用户执行脚本",不是客套:

exit    # 从 dmdba 退回 root/data/dm9/app/dmdbms/script/root/root_installer.sh
[dmdba@worker3 dm9]$ exit
logout
[root@worker3 soft]# /data/dm9/app/dmdbms/script/root/root_installer.sh
移动 /data/dm9/app/dmdbms/dm_svc.conf 到/etc目录
创建DmAuditMonitorService服务
创建服务(DmAuditMonitorService)完成
创建DmJobMonitorService服务
创建服务(DmJobMonitorService)完成
创建DmInstanceMonitorService服务
创建服务(DmInstanceMonitorService)完成
创建DmAPService服务
Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service ...
创建服务(DmAPService)完成
启动DmAPService服务
[root@worker3 soft]#

这一步把客户端配置文件挪到 /etc,并创建了审计监控、作业监控、实例监控、辅助插件四个服务。

root_installer

8、系统调优

数据库有三个系统层的老毛病:文件句柄不够、透明大页(THP)造成延迟毛刺、内存被换到 Swap。一次性治了:

# 8.1 资源限制(dmdba 用户)cat >> /etc/security/limits.conf << 'EOF'dmdba  soft  nofile     65536
dmdba  hard  nofile     65536
dmdba  soft  nproc      65536
dmdba  hard  nproc      65536
dmdba  soft  core       unlimited
dmdba  hard  core       unlimited
dmdba  soft  as         unlimited
dmdba  hard  as         unlimited
dmdba  soft  fsize      unlimited
dmdba  hard  fsize      unlimited
dmdba  soft  data       unlimited
dmdba  hard  data       unlimited
dmdba  soft  nice       0
dmdba  hard  nice       0
EOF# 8.2 关闭透明大页(THP 会引起数据库延迟抖动)echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag# 8.3 降低 swap 倾向(避免数据库内存被换出)sysctl -w vm.swappiness=1echo 'vm.swappiness = 1' >> /etc/sysctl.conf

验证调优生效( [never] 就是对了):

[root@worker3 soft]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

这台机器装前是 [always],属于必改项。

调优

9、初始化实例 dminit

配置环境变量,然后初始化。四个参数(PAGE_SIZE / EXTENT_SIZE / CHARSET / CASE_SENSITIVE)建库后 永.久不可改,决策标准: 按迁移来源定,不按习惯定。

su - dmdbacat >> ~/.bash_profile << 'EOF'export DM_HOME=/data/dm9/app/dmdbmsexport PATH=$PATH:$DM_HOME/bin:$DM_HOME/toolexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
EOFsource ~/.bash_profilecd $DM_HOME/bin
./dminit PATH=/data/dm9/dmdata/data \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  CHARSET=1 \
  CASE_SENSITIVE=Y \
  DB_NAME=DM9TEST \
  INSTANCE_NAME=DMSERVER \
  PORT_NUM=5236 \
  SYSDBA_PWD='你的强密码' \
  SYSAUDITOR_PWD='你的强密码'

? 两个提醒:
① 反斜杠后面直接回车, 别带空格——dminit 对行尾空格很敏感,多一个它就把下一行当参数的一部分。
② SYSDBA_PWD 别照抄示例,生产环境务必换强密码;而且含 @ ! 的密码会让 disql 解析出错(踩坑 4,见下)。

dminit 真实输出—— 这一屏就是 DM9 的身份证:

[dmdba@worker3 bin]$ ./dminit PATH=/data/dm9/dmdata/data \
>   PAGE_SIZE=32 \
>   EXTENT_SIZE=32 \
>   LOG_SIZE=2048 \
>   CHARSET=1 \
>   CASE_SENSITIVE=Y \
>   DB_NAME=DM9TEST \
>   INSTANCE_NAME=DMSERVER \
>   PORT_NUM=5236 \
>   SYSDBA_PWD='********' \
>   SYSAUDITOR_PWD='********'
dminit V9
db version: 0x7000d
file dm.key not found, use default license!
License will expire on 2027-04-17
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
 log file path: /data/dm9/dmdata/data/DM9TEST/DM9TEST01.log
 log file path: /data/dm9/dmdata/data/DM9TEST/DM9TEST02.log
write to dir [/data/dm9/dmdata/data/DM9TEST].
create dm database success. 2026-09-20 16:13:40
[dmdba@worker3 bin]$
  • V9 + 0x7000d = DM9 的身份证
  • License will expire on 2027-04-17 = 试用版有效期
  • create dm database success. 2026-09-20 16:13:40 = 部署时间戳

dminit

10、注册服务并启动

让 systemd 接管它,重启自动拉起:

exit    # 退回 rootcd /data/dm9/app/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p DM9TEST \
  -dm_ini /data/dm9/dmdata/data/DM9TEST/dm.ini
systemctl start  DmServiceDM9TEST.service
systemctl enable DmServiceDM9TEST.service
systemctl status DmServiceDM9TEST.service
[root@worker3 root]# ./dm_service_installer.sh -t dmserver -p DM9TEST > -dm_ini /data/dm9/dmdata/data/DM9TEST/dm.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDM9TEST.service to /usr/lib/systemd/system/DmServiceDM9TEST.service.
创建服务(DmServiceDM9TEST)完成
[root@worker3 root]# systemctl start DmServiceDM9TEST.service
[root@worker3 root]# systemctl enable DmServiceDM9TEST.service
[root@worker3 root]# systemctl status DmServiceDM9TEST.service
● DmServiceDM9TEST.service - DM Instance Service(DmServiceDM9TEST).
   Loaded: loaded (/usr/lib/systemd/system/DmServiceDM9TEST.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2026-09-20 16:18:21 CST; 24s ago
 Main PID: 32239 (dmserver)
[root@worker3 root]#

看到 Active: active (running),实例就起来了。

注册服务

服务状态

11、disql 连库验证

su - dmdbacd $DM_HOME/bin
./disql SYSDBA@localhost:5236# 提示"密码:"时交互式输入
[dmdba@worker3 bin]$ ./disql SYSDBA@localhost:5236
密码:
服务器[localhost:5236]:处于普通打开状态
登录使用时间 : 8.042(ms)
disql V9
SQL>

看到 disql V9,收工。

disql

12、验收查询

连上之后跑六条验收查询,全是只读,放心执行:

select * from v$version;select id_code;select instance_name, status$ from v$instance;select sf_get_page_size() as page_size, sf_get_extent_size() as extent_size,
       sf_get_case_sensitive_flag() as case_sensitive;select * from v$license;select sf_get_unicode_flag() as unicode_flag;

① 版本 —— 完整身份串:

SQL> select * from v$version;
行号       BANNER
---------- ---------------------------------
1          DM Database Server 64 V9
2          DB Version: 0x7000d
3          03151060506-20260417-322930-20218
4          Msg Version: 3
5          Gsu level(5) cnt: 102

v$version

② 构建号:

SQL> select id_code;
行号       ID_CODE
---------- -----------------------------------
1          --03151060506-20260417-322930-20218

id_code

那串 03151060506-20260417-... 里藏着构建日期 2026-04-17——和 DM9 在 4 月 22 日大会发布的时间线严丝合缝。

③ 实例状态:

SQL> select instance_name, status$ from v$instance;
行号       INSTANCE_NAME STATUS$
---------- ------------- -------
1          DMSERVER      OPEN

实例

④ 初始化参数回查 —— 和 dminit 设的值一个都没跑偏:

SQL> select sf_get_page_size() as page_size, sf_get_extent_size() as extent_size,
2   sf_get_case_sensitive_flag() as case_sensitive;
行号       PAGE_SIZE   EXTENT_SIZE CASE_SENSITIVE
---------- ----------- ----------- --------------
1          32768       32          1

页 32768(32K)、簇 32、大小写敏感 Y。初始化这一锤,落对了。

参数回查

⑤ 授权状态:

SQL> select * from v$license;
行号       LIC_VERSION SERIES_NO SERVER_SERIES SERVER_TYPE ...
1          3.00        dm66n367  D             3
           DEVELOP USER  ...   EXPIRED_DATE: 2027-04-17  ...  PRODUCT_TYPE: DM V9

试用版,2027-04-17 到期,PRODUCT_TYPE = DM V9。

license

⑥ 字符集:

SQL> select sf_get_unicode_flag() as unicode_flag;
行号       UNICODE_FLAG
---------- ------------
1          1

flag=1 即 UTF-8,与 dminit CHARSET=1 对上了。

unicode

踩坑汇总

# 现象 报错原文 解法
1 校验文件格式 no properly formatted SHA256 checksum lines found CertUtil 格式非标准,手工提取 64 位哈希比对
2 UID 撞车 useradd: UID 2001 is not unique 多库共存环境特有,去掉 -u 参数让系统分配
3 挂载点缺失 mount point /mnt/dm9 does not exist mount 前先 mkdir -p
4 密码解析 含 @ ! 的密码让 disql 报"连接失败"而非"密码错" 改交互式登录,排查方向不被带偏
5 版本信息空 安装小结"版本信息/有效日期"为空 试用版正常,连库后查 v$version 拿真版本

总结

DM9 的安装体验对 DBA 是友好的——交互清晰、校验齐全、服务注册规范。真正需要经验的只有两处: 初始化参数的不可逆决策,和 老服务器上的路径规划。前者决定你以后好不好过,后者决定你今晚睡不睡觉。

装完别急着收工。我还顺手翻了它的数据字典:387 个动态视图、46 个参数,逐条筛了 VEC / AI / TENANT / DPC 关键词。结果挺意外——视图里一个向量视图都没有,参数里却撞见 HNSW;分布式相关视图装了三十多个,多租户却只带 DPC 前缀;还有一条: 装完默认不开并行,这台 8 核机器当时所有查询都跑单线程。 这些发现以及后续的验证实验,下一篇讲。


? 达梦同行者 · DM9 技术征文火热进行中
先锋奖(技术深度)|新锐奖(踩坑总结)|截稿:2026 年 9 月 24 日
规则与投稿入口:https://www.modb.pro/db/2089911440195526656
奖品:智能手表、机械键盘、达梦定制钛杯

作者简介:马顺华,江湖人称"数据库界华少",公众号「shunwah 星辰数智社」主理人。OceanBase 社区版主、墨天轮 MVP、崖山 YVP、KaiwuDB MVP、金仓 KVA、TiDB MVA、OpenTenBase ACE 等。⚡ 不是在测数据库,就是在去测数据库的路上。


请使用浏览器的分享功能分享到微信等