摘要:这篇文章记录我在一台麒麟 V10 虚拟机上用命令行方式部署 DM8 单机实例的全过程:挂载介质、建用户、装软件、dminit 建库、注册服务、disql 验证。中间真实遇到了 /tmp 空间不足导致安装中断的问题,处理过程写在第六部分。文中所有命令、输出和截图都来自这次实验。
一、实验目标
这次部署想验证四件事:安装介质和服务器架构是否匹配;安装用户、目录权限是否到位;实例的关键参数是否按规划设置;数据库能否作为系统服务启动,并用 disql 连上。
装软件和建实例是两个阶段。DMInstall.bin 只负责把程序文件装到 /home/dmdba/dmdbs,实例是后面用 dminit 建的。这两步做完还不算部署完成,服务注册、启动、SQL 连接验证都要走一遍。

图1 DM8 单机部署的完整流程
二、实验环境
实验在一台独立的麒麟 V10 虚拟机上完成,配置记录如下,后面的排查都以这张表为准。
表1 实验环境记录
项目 实际记录
操作系统 麒麟服务器版 V10(x86_64,虚拟机,4 GB 内存)
CPU 架构 x86_64
DM 安装介质 dm8_20260428_x86_kylin10_sp3_64.iso,dminit 版本号 03134284552-20260414-322369-20221
安装用户 dmdba(UID 2001),用户组 dinstall(GID 2001)
软件目录 /home/dmdba/dmdbs
实例目录 /dmdata/data
归档与备份目录 /dmdata/arch、/dmdata/dmbak
数据库名/实例名 DAMENG/DMSERVER
端口 5236
动手前先跑几条命令,把架构、系统版本和磁盘空间记下来,免得装到一半才发现介质不对或者空间不够。
uname -m
cat /etc/os-release
free -h
df -h /tmp
df -h /dmdata
经验点: 安装包文件名里的 CPU 架构和系统标识要和目标环境对得上。“都是 64 位”不代表通用,信创环境里芯片、操作系统和介质的对应关系要逐项核对。
三、安装前准备
- 建专用用户
达梦官方文档要求用 dmdba 用户安装,不允许 root。如果机器上已经有这个账号,先用 id dmdba 确认一下,不要重复创建。
groupadd dinstall -g 2001
useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
passwd dmdba
接着建实例、归档和备份目录,把属主改成 dmdba:
mkdir -p /dmdata/data /dmdata/arch /dmdata/dmbak
chown -R dmdba:dinstall /dmdata
chmod -R 755 /dmdata
这里我没有用 chmod -R 777 图省事。目录写不进去时,先看属主、属组和当前执行用户,把权限整个放开风险太大。
- 调整最大打开文件数
用 root 编辑 /etc/security/limits.conf,按官方示例加下面几行。nofile 和数据库能同时打开的文件句柄数直接相关,这一项不要漏。
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
文档里说这套配置要重启服务器才永久生效。改完不能只看文件,要重新登进 dmdba 会话读一次。我重新登录后读到的是:
$ ulimit -n
65536
$ ulimit -u
65536
如果文件里写了新值、会话里读出来还是旧的,先确认会话是不是重新建立的、配置有没有真正加载,不要带着疑问继续装。
四、命令行安装与实例初始化
- 挂载介质、装软件
把 ISO 挂载到服务器,切到 dmdba,执行命令行安装:
mount /dev/sr0 /mnt/cdrom
su - dmdba
cd /mnt/cdrom
./DMInstall.bin -i
安装程序依次询问安装语言、Key 文件路径、时区、安装类型和安装目录。实验环境没有 Key,这一项选 n,用默认许可;安装类型选典型安装,目录填 /home/dmdba/dmdbs。确认后显示所需空间 2152M,可用 25G。
装完按终端提示,用 root 执行配置脚本:
$ sh /home/dmdba/dmdbs/script/root/root_installer.sh
移动 /home/dmdba/dmdbs/bin/dm_svc.conf 到/etc目录
创建DmAPService服务
Created symlink /etc/systemd/system/multi-user.target.wants/DmAPService.service → /usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动DmAPService服务
这个脚本创建 DmAPService,不执行会影响数据库备份功能,所以最后这个 root 脚本不能跳过。执行完我确认 DmAPService 已是 active (running),没有告警。
- 用 dminit 建实例
进入 bin 目录,先看当前版本支持哪些参数。不同版本 dminit 的参数不完全一样,照搬别的版本的命令容易出错。
su - dmdba
cd /home/dmdba/dmdbs/bin
./dminit help
./dminit help 显示,当前版本 PAGE_SIZE 可选 4/8/16/32K,CHARSET 可选 0(GB18030)、1(UTF-8)、2(EUC-KR),SYSDBA_PWD 和 SYSAUDITOR_PWD 是必填项,与官方文档一致。
下面的命令创建 DAMENG 库和 DMSERVER 实例。密码位置要替换成自己的,公开文章里不写真实密码:
./dminit PATH=/dmdata/data
PAGE_SIZE=8
EXTENT_SIZE=16
CASE_SENSITIVE=Y
CHARSET=1
DB_NAME=DAMENG
INSTANCE_NAME=DMSERVER
PORT_NUM=5236
SYSDBA_PWD='【替换为强密码】'
SYSAUDITOR_PWD='【替换为强密码】'
实际执行输出(节选):
file dm.key not found, use default license!
License will expire on 2027-04-14
log file path: /dmdata/data/DAMENG/DAMENG01.log
log file path: /dmdata/data/DAMENG/DAMENG02.log
write to dir [/dmdata/data/DAMENG].
create dm database success. 2026-11-11 17:40:44
命令格式不难,难在参数怎么定。PAGE_SIZE、EXTENT_SIZE、CASE_SENSITIVE、CHARSET、BLANK_PAD_MODE、PAGE_CHECK 这些参数建库之后无法直接修改。页大小和簇大小也不是越大越好,要结合行长度、空间利用率评估。
如果实例后面要承接 Oracle 迁移,字符集、标识符大小写、兼容模式都要在建库前定下来。参数选错了,不要在 dm.ini 里随手改个值接着跑;先把要保留的数据备份出来,再评估重建实例。
五、注册服务并验证连接
服务注册用 root 执行。-dm_ini 指向刚建好的 dm.ini,-p 决定服务名后缀:
cd /home/dmdba/dmdbs/script/root
./dm_service_installer.sh -t dmserver
-dm_ini /dmdata/data/DAMENG/dm.ini
-p DMSERVER
systemctl start DmServiceDMSERVER
systemctl status DmServiceDMSERVER --no-pager
注册输出里出现“创建服务(DmServiceDMSERVER)完成”,接着看服务状态:

图2 DmServiceDMSERVER 服务状态(真实实验截图)
服务是 active (running) 后,还要用 SQL 连一次。为了不让密码留在 shell 历史里,直接运行 ./disql,按提示输入连接信息:
su - dmdba
cd /home/dmdba/dmdbs/bin
./disql
连上后执行:
SELECT STATUS$ FROM V$INSTANCE;
SELECT SF_GET_PAGE_SIZE();
SELECT SF_GET_CASE_SENSITIVE_FLAG();
SELECT SF_GET_UNICODE_FLAG();
四项查询结果:实例状态 OPEN、页大小 8192、大小写敏感 1、字符集 1(UTF-8),与建库参数完全一致。

图3 disql 连接验证:实例状态与参数复核(真实实验截图)
最后又执行了一次 systemctl restart DmServiceDMSERVER,重新连接仍返回 OPEN。这一步可以排除“服务暂时能用、配置没落地”的情况。
六、踩坑记录

图4 安装部署高频坑点排查顺序
下面几个问题,有的是这次真实遇到的,有的是部署中常见的。先按现象定位,比反复重装快。
坑点 1:目录是 root 建的,dmdba 写不进去
现象: 安装程序提示目录不可写,或 dminit 在实例目录创建文件失败。
排查: 用 namei -l /dmdata/data 逐段查看路径权限,并确认当前执行用户。
处理: 只改规划目录的属主和属组,不要递归放开整个系统目录的权限。改完切回 dmdba 验证读写。
坑点 2:/tmp 空间不足(这次真实遇到)
现象: 以 dmdba 执行 ./DMInstall.bin -i,选完安装语言程序直接退出,原文如下:
安装程序临时目录(/tmp)可用空间为1457M。
安装程序需要至少2G的临时空间,请调整临时目录的空间或设置环境变量DM_INSTALL_TMPDIR来指定安装程序的临时目录。
排查: 执行 df -h /tmp,可用空间确实不足 2G。
处理: 我没有扩容 /tmp,按提示改用环境变量把临时目录指向空间充足的位置:
mkdir -p /opt/dminstall_tmp
chown dmdba:dinstall /opt/dminstall_tmp
su - dmdba
export DM_INSTALL_TMPDIR=/opt/dminstall_tmp
cd /mnt/cdrom && ./DMInstall.bin -i
设置后安装正常走完。提示语本身给了两条路:扩容 /tmp,或者设置 DM_INSTALL_TMPDIR。生产环境按系统规范选,报错后反复重试同一条命令没有意义。
坑点 3:切换用户后图形界面打不开
现象: DMInstall.bin、dbca.sh 弹不出窗口。
排查: 检查切换用户后 DISPLAY 有没有丢失、图形访问权限是否配置。官方文档给出的本地演示做法是 xhost +、echo $DISPLAY、export DISPLAY=:0.0[2]。
处理: 隔离环境里可以按官方步骤调整;xhost + 会放开图形访问控制,用完记得 xhost - 收回。这次我全程走 ./DMInstall.bin -i 和 dminit,不依赖图形环境,在纯命令行服务器上更好复现。
坑点 4:建完库才发现字符集或大小写敏感不对
现象: 迁移后中文长度异常,或应用访问小写标识符报兼容问题。
排查: 把源库要求和目标实例参数摆在一起比。当前实例的实际值可以查:SELECT SF_GET_UNICODE_FLAG();、SELECT SF_GET_CASE_SENSITIVE_FLAG();(这次返回 1、1,与规划一致)。
处理: 这两个参数没有“热修复”的办法,只能重建实例。趁数据还少时重建,比带着错误基础继续迁移可控。
坑点 5:服务名、dm.ini 路径和实例信息对不上
现象: 服务启动失败,或启动的不是预期实例。
排查: 检查注册命令里的 -dm_ini、-p 与实际目录、库名、实例名是否一致。
处理: 以 dminit 输出为准核对。这次 -p 用 DMSERVER,服务名就是 DmServiceDMSERVER;换 -p 的值,systemctl 操作的服务名也要跟着换,不能直接抄示例。
七、验收清单
每一步做完我都留了一条可查的证据,汇总如下:
表2 部署验收清单
验收项 验证方法 通过标准 实际结果
介质与架构 uname -m、安装包名称 架构和系统匹配 x86_64 与 kylin10_sp3_64 介质匹配
文件句柄 ulimit -n 符合当前版本部署要求 65536
安装脚本 查看安装与 root 脚本输出 无未处理错误 安装完成,root_installer.sh 无警告
实例初始化 核对 dminit 输出 参数与规划一致 create dm database success,参数一致
服务状态 systemctl status 服务正常且路径正确 active (running),命令行路径正确
SQL 连接 查询 V$INSTANCE 返回 OPEN OPEN,参数复核一致
重启复验 重启服务后重新连接 仍可正常访问 重启后仍为 OPEN
实验中遇到其他报错时,记录里补齐六项:报错原文、出现条件、排查命令、根因、修复操作、修复后复验结果。只写问题名字,过段时间自己都看不懂。
八、小结
装 DM8 单机实例,命令本身不多,容易出问题的是几个衔接处:介质和架构是否匹配,用户和目录权限是否够,建库参数定得合不合理,服务注册和 SQL 验证有没有做。这次 /tmp 空间不足就是个例子——报错信息已经把解法写出来了,先读懂提示再动手,比反复重装有效。
参考资料
[1] 达梦技术文档:《安装前准备》。
[2] 达梦技术文档:《数据库安装》。
[3] 达梦技术文档:《配置实例》。