
1. 项目概述DM8是国产关系型数据库中的主力产品之一在政务、金融、能源等行业的信创项目中广泛使用。我这次要分享的是如何在没有任何图形界面的Linux服务器上从头到尾完成DM8的安装、实例初始化、服务启动和基础使用。这几乎是每个刚接触国产数据库的运维都会碰到的场景因为生产服务器为了安全性和资源占用绝大多数都是最小化安装不带桌面环境装数据库全靠命令行。这个标题里有两个关键点需要展开理解。第一是“无图形界面”意味着你不能指望双击安装包、点几个Next按钮完成安装必须走命令行模式也就是静默安装第二是“使用”说明安装只是第一步后面还要解决数据库能不能正常连上、能不能创建业务表、怎么启动服务、遇到问题怎么排查这一整条链路的问题。适合谁来参考主要三类人刚转国产数据库的DBA、做系统集成的实施工程师、还有需要在本地搞一套DM8做适配测试的开发者。如果你已经有Oracle或MySQL的使用基础这篇内容消化起来会非常快因为数据库的很多概念是相通的但DM8有自己的命令行工具体系和参数体系这些是最需要适应的地方。我把整个实操过程按顺序拆成几个阶段安装前的环境准备、安装介质的准备与校验、命令行安装执行、实例初始化建库、服务管理与启动、命令行登录与基础SQL操作、常见问题处理。每个阶段我都会给出实际操作中验证过的做法并解释为什么这么干而不是只给一串命令让人盲目复制。2. 环境准备与检查清单2.1 操作系统与资源规划DM8官方支持的操作系统范围很广主流的Linux发行版基本都在列包括常用的CentOS系、openEuler、麒麟、统信UOS这些国产系统以及常见的Unix类系统。我这次用的是x86架构的Linux服务器内核和系统版本先不用太纠结只要不是特别老的发行版安装过程基本一致。资源规划这块有几个容易被忽略的地方。第一是内存官方要求最低1GB但这只是能跑起来的门槛实际使用中建议至少分配4GB如果你的服务器内存充足多给一些没有坏处因为数据库的缓冲区、会话连接都吃内存。第二是磁盘空间安装DM8数据库软件本身大概需要2GB左右的空间但建议预留20GB以上因为数据文件、归档日志、备份文件都会快速增长。第三是swap分区对于数据库服务器建议至少跟物理内存同等大小防止某些极端情况下系统内存不足导致进程被系统杀掉。还有一点对生产环境很重要数据库最好安装在单独挂载的磁盘分区上不要跟系统盘挤在一起。原因有两个一个是系统盘如果因为日志写满或者其他原因空间占满可能导致整个系统异常另一个是单独的数据盘在后续扩容、备份时操作空间更灵活。数据文件默认放在安装路径的data目录下这一点在规划路径时要提前想清楚。2.2 创建专用系统账号安装DM8不允许直接用root用户操作必须创建一个专门的系统账号用于安装和运行数据库。这是一条安全基线也是DM8安装包在预检查阶段就会检查的条件。很多第一次接触的人在这里直接绕过去用root硬装结果装到一半报错回头还得清理重来。创建账号的命令比较简单但有几个参数要配合好。建议把账号的主组设置成同名组并指定用户的home目录方便后续配置环境变量groupadd dinstall useradd -g dinstall -m -d /home/dinstall -s /bin/bash dinstall passwd dinstall这里要解释几个细节。第一为什么不能叫dba或者admin这种名字其实名字本身无所谓DM8官方文档里默认使用dinstall用户和dinstall组我用这个是为了跟文档示例保持一致减少后续理解成本。第二home目录最好单独指定因为后面很多配置文件、脚本的默认路径会引用这个目录如果系统给的默认home路径不符合预期环境变量配置容易乱。第三数据库的运行用户一定不能是root这是因为数据库进程在root权限下运行一旦数据库存在漏洞被利用攻击者直接就拿到了系统最高权限这是安全上绝对不能接受的。2.3 内核参数与资源限制调整装数据库操作系统内核参数要调这一步很多人容易忘。DM8对系统资源有两项硬性要求进程能打开的最大文件数nofile和线程数上限这个不调后续数据库并发上来后会频繁出现“too many open files”这类错误恢复起来很麻烦。修改方式是通过编辑limits.conf文件实现vim /etc/security/limits.conf在文件末尾追加以下内容dinstall soft nofile 65536 dinstall hard nofile 65536 dinstall soft nproc 20480 dinstall hard nproc 20480注意这里是直接指定了dinstall用户而不是用通配符。用通配符容易把其他进程的资源限制也改了范围过大不利于问题排查精确到用户配置出问题的时候定位会更快。这里有一个常见的坑修改完limits.conf文件后要让配置生效光注销重进是不行的需要完整退出当前连接会话再重新登录这种配置在系统初始化阶段加载登录会话继承。如果之后用ulimit -n检查还是显示1024就说明会话没重建重开一个终端再看。3. 安装介质准备与校验3.1 获取安装包并确认版本DM8的安装包从正式渠道可以获得通常是一个ISO镜像文件或者一个包含二进制文件的压缩包。文件名里一般会带上版本号和操作系统类型标识比如带x86_64字样的说明是64位x86架构版本带arm标识的是ARM架构版本。这里一定要确认架构匹配在ARM服务器上装x86版本的安装包是跑不起来的反过来也一样。安装包拿到后建议先做一次合法性校验。做法是先记录官方发布处公布的校验值然后在本地执行校验命令对比确认文件完整无损再开始安装md5sum 安装包文件名称.iso sha256sum 安装包文件名称.iso我见过有人跳过这一步直接挂载安装结果安装到一半出现文件解压错误浪费了半小时排查后来发现是下载过程丢包导致ISO文件损坏。网络传输越不稳定下载的数据量越大校验这一步越不能省。3.2 挂载镜像与解压准备ISO镜像文件的处理有两种思路取决于你是准备在本地直接装还是想通过网络传给其他机器再装。如果就在本机安装直接挂载到某个目录即可mount -o loop dm8_setup_x86.iso /mnt/dm8 ls /mnt/dm8挂载成功后目录里一般能看到类似DMInstall.bin的执行文件。如果你的安装介质本身是个tar包那就直接解压到目标目录tar -xzvf dm8_setup_x86.tar.gz -C /opt/这里有一个经验要点不管是ISO解压出来的还是tar解压出来的安装文件建议拷到本地磁盘的某个目录下再执行安装不要在挂载的只读文件系统里直接执行。原因很简单安装过程会读取大量文件从只读挂载路径执行偶尔会因权限或IO问题卡住而本地磁盘执行最稳妥。我还遇到过需要给DMInstall.bin加执行权限才能跑的情况解压后文件权限被重置先执行下面这步chmod x DMInstall.bin准备好之后切换到你刚创建的dinstall用户去执行不要再留在root环境。4. 命令行安装的完整流程4.1 图形安装与静默安装的取舍考量DM8的安装包默认在图形环境下会弹出图形安装向导很方便但问题是服务器根本没有图形环境强制走命令行模式。命令行安装方式有两种一种是通过带参数的命令行安装另一种是生成配置文件后采用静默安装。带参数安装的方式适合只需要快速装个软件、后续用命令行工具手动初始化的场景静默安装方式适合需要批量部署多台服务器、或者需要把安装步骤固化到自动化脚本里的场景。我这次分享的是静默安装方式因为用配置文件把安装路径、组件选择这些参数固定下来可重复性最强操作上也最不容易出错。4.2 生成并理解安装响应文件静默安装的核心在于XML格式的响应文件。这个文件里定义了安装类型、安装路径、组件选择等关键参数。官方安装包默认自带一个响应文件模板我的做法是先拷贝一份出来再编辑不要直接改原始模板保留一个干净版本备查。cp /mnt/dm8/install.xml /home/dinstall/install_response.xml响应文件里重点需要确认的参数大概这几个安装路径InstallPath换成你规划的数据目录所在分区的路径比如/opt/dmdbms安装类型选择服务器端完整安装Server这个会包含数据库服务端和命令行工具是否初始化数据库建议选否后面单独用dminit工具初始化这样每个步骤都能单独控制出问题好定位响应文件里有些字段涉及交互式应答静默安装场景下这些字段不能留空或者依赖交互否则安装程序会卡住等待输入自动部署就变成了半自动部署。4.3 执行安装并解读输出日志切换到dinstall用户执行安装命令并指定响应文件cd /home/dinstall ./DMInstall.bin -q install_response.xml-q参数的含义就是静默模式--quiet。执行过程中终端会输出安装进度的关键节点信息比如正在解压文件、正在复制二进制、正在配置组件这些阶段。整体安装耗时跟服务器磁盘性能强相关普通机械硬盘可能需要三到五分钟固态硬盘会快很多一分钟左右就能跑完。如果安装过程出现报错第一反应不要反复重跑安装命令先去看安装目录下生成的日志文件tail -200 /home/dinstall/dmdbms/log/install_xxx.log日志里记录的报错信息比终端输出详细得多像磁盘空间不足、依赖库缺失、文件权限不对这类问题都会直接写明白。我遇到过最典型的错误是安装目录的父级目录属主不对导致安装进程没有写权限当时日志里明确提示的是“Permission denied”排查后确认是创建目录时用了root账号dinstall用户根本没有目录的写权限。解决办法也很干净把目录属主改一下就行chown -R dinstall:dinstall /opt/dmdbms安装完成之后官方会建议你以root身份执行一个脚本用于注册服务这个脚本一般叫root_installer.sh。生产环境建议执行因为注册服务之后可以用系统服务命令来管理启停比手动启停进程要规范很多。执行完这个脚本安装阶段的工作就算正式结束。5. 初始化数据库实例5.1 dminit工具的参数选择逻辑数据库软件装好后还需要初始化一个可用的数据库实例这个步骤使用的工具是dminit。初次接触的人容易混淆软件安装和实例创建这两个概念软件安装只是把数据库的程序文件放到硬盘上相当于盖好了一个可以生产的工厂实例创建才是真正把数据库的内存结构和磁盘数据文件建立起来产生了一个能存数据的“库”。dminit工具的参数比较多但只要理解了参数的含义选起来并不难。最关键的有五个参数PAGE_SIZE数据页大小单位是K可选4K、8K、16K、32K。这个参数影响单行数据的最大长度和数据文件的IO效率一旦建库确定后续基本不建议修改所以建库前确认好。业务以小字段为主选8K没问题如果有大字段或者需要存储较长文本的场景建议直接上16K。CHARSET字符集一般选UTF-8。CASE_SENSITIVE标识符大小写是否敏感默认是Y也就是区分大小写。这个要看应用侧的规范如果应用里到处用的是大写表名那保持默认Y就行不会出问题如果应用风格是混合大小写且依赖不敏感匹配那就要设成N。关键在于这个参数必须在建库时定死后面改不了改的代价大到等于重建库。DB_NAME数据库名字默认是DAMENG。PATH数据文件存储路径指定到专门的数据目录。5.2 一个实际可用的建库示例我准备把实例初始化到一个独立数据目录路径规划层面的思路是软件目录和数据目录分开软件出问题不影响数据备份恢复时数据目录可以直接单独操作。mkdir -p /data/dmdata chown -R dinstall:dinstall /data/dmdata su - dinstall cd /opt/dmdbms/bin ./dminit PATH/data/dmdata DB_NAMEDMDB INSTANCE_NAMEDMSERVER \ PAGE_SIZE16 CHARSET1 CASE_SENSITIVEY \ SYSDBA_PWDSynDB2024这里把参数拆开说一下PAGE_SIZE建库时是16K我选的这个值是基于实际业务里面有长文本字段的场景考虑。如果你全是数值型和短字符串8K是通用稳妥的选择。CHARSET1代表UTF-8这个不用犹豫绝大多数现代应用都需要UTF-8支持多语言。SYSDBA_PWD是系统管理员DBA账号的密码这个密码建议设置得足够复杂因为SYSDBA在数据库里拥有最高权限密码泄密相当于数据库完全裸奔。执行完成后终端会输出初始化成功的提示信息并且给出几个关键路径控制文件路径、数据文件路径、日志文件路径。同时会生成一个dm.ini文件这是实例的核心配置文件所有实例级参数都在里面。理论上建库这件事到这儿就已完成大半函数返回前它还会输出一串欢迎信息明确提示你下一步要启动数据库服务。5.3 关键参数确认与调整建库完成后还有两个参数建议在启动前确认。第一个是归档模式生产数据库建议开启归档因为归档日志是数据恢复的重要基础没有归档日志做物理备份和恢复到任意时间点都是空谈。第二个是兼容性参数COMPATIBLE_MODE根据你的业务之前用什么数据库保持默认基础模式即可设置不当反而会带来SQL行为差异的麻烦。查看当前参数值的方式是在后续的disql命令行里执行SELECT * FROM V$PARAMETER WHERE NAME LIKE %ARCH%;我个人的习惯是建库之后先把归档参数配置好再启动业务接入因为归档功能开启需要重启实例生效后续业务已经跑起来再重启就多了一次停机窗口。6. 服务启动、停止与开机自启6.1 前台启动与后台服务管理初始化完成之后可以启动数据库了。DM8提供了两种启动方式。一种是在终端直接启动前台进程这种模式适合第一次启动时需要紧盯着日志输出看状态的情况su - dinstall cd /opt/dmdbms/bin ./dmserver /data/dmdata/DMDB/dm.ini前台启动的优点很直观日志会实时打到终端上出现任何问题比如数据文件损坏、参数配置错误都能立刻看到错误信息。但点也很明显终端一关进程就跟着退出数据库就停了所以这种方式只适合临时调试场景。实际上生产环境用的是另一种方式把数据库注册成系统服务用service命令管理。安装完成时以root身份执行的root_installer.sh脚本已经帮我们把服务注册好了。注册的服务名一般叫DmService后面跟实例名比如实例名叫DMSERVER服务名就是DmServiceDMSERVER。服务管理的标准操作是这样# 启动服务 systemctl start DmServiceDMSERVER # 查看服务状态 systemctl status DmServiceDMSERVER # 停止服务 systemctl stop DmServiceDMSERVER # 配置开机自动启动 systemctl enable DmServiceDMSERVER服务方式管理进程的好处是分布式运维接管起来容易状态可查询、错误有记录、开机自启可控。设置完enable之后建议再执行一次reboot验证开机自启是否正常我在实际项目中遇到过enable成功但重启后服务没起来的情况原因多半是服务脚本里依赖的某个路径在启动时序里还没挂载好不实测一次根本发现不了。6.2 端口监听与连接状态检查数据库默认监听端口是5236这个端口是DM8客户端连接的服务端口跟Oracle的1521、MySQL的3306是一个性质。启动之后建议立刻确认监听是否正常ss -lnt | grep 5236如果STATUS显示LISTEN就说明监听正常。如果这里什么都没有不用急着怀疑防火墙先回去看服务状态很大概率是实例启动过程中因为某个参数异常退出了。还有一种情况是服务器上应用了安全加固策略比如配置了SELinux或者防火墙策略限制了非标准端口的对外监听这类问题处理时先明确端口会有多大影响再决定是放行还是临时关闭策略测试。7. 客户端工具连接与基础SQL操作7.1 认识disql并完成首次连接数据库起来了下一步就是连进去干活。DM8自带的命令行客户端工具叫disql功能跟Oracle的sqlplus对标位置在安装目录的bin子目录下。首次连接的命令是最基础的cd /opt/dmdbms/bin ./disql SYSDBA/SynDB2024localhost:5236这个连接串的表达方式需要理解一下斜杠前面是用户名斜杠后面是密码后面对应连接地址和端口。如果你的DM8是装在远程服务器上把localhost换成那个服务器的IP地址就能连上。如果连接过程中报错说找不到disql这个命令大概率是环境变量没配好。在dinstall用户的环境配置文件里加上DM8的相关路径是治本的办法vim ~/.bash_profile export DM_HOME/opt/dmdbms export PATH$DM_HOME/bin:$PATH export LD_LIBRARY_PATH$DM_HOME/bin:$LD_LIBRARY_PATH配好之后执行source ~/.bash_profile刷新环境再敲disql就能直接用了。关于这个库连接有一点容易让从MySQL转过来的人不习惯DM8默认的SYSDBA登录没有权限限制是超级管理员相当于Oracle的SYS和MySQL的root。但日常业务建议单独建应用账号专号专用权限最小化不要所有应用都用SYSDBA跑。这一点回头在项目交付时也很重要等保测评对账号权限这块是有明确要求的。7.2 建表、插入与查询的SQL验证连上disql之后整个界面是命令行交互式的跟sqlplus的体验很相似。可以先用一条简单的SQL验证一下连接是否正常SELECT SYSDATE;能返回当前时间说明链路是通的。接下来可以走一遍最基础的建表和数据操作感受一下跟其他数据库的差异。我的习惯是建一张简单的业务表来做验证CREATE TABLE T_USER ( ID INT PRIMARY KEY, NAME VARCHAR(64), CREATE_TIME DATETIME ); INSERT INTO T_USER VALUES (1, 测试用户, SYSDATE); INSERT INTO T_USER VALUES (2, 张三, SYSDATE); SELECT * FROM T_USER; SELECT COUNT(*) FROM T_USER WHERE ID 0;这些SQL语法上跟Oracle高度接近跟MySQL也基本兼容所以有Oracle或者MySQL基础的人上手非常快。需要注意的一点是事务提交行为disql默认是手动提交模式也就是说INSERT之后如果不显式执行COMMIT数据并没有真正落库这也跟Oracle的习惯一致。经常有从MySQL转过来的人在这里踩坑执行完INSERT直接查是能查到因为当前会话自己能看到自己未提交的数据但换一个新的连接去查就查不到了这个就是没提交导致的。习惯用法是在每条写操作后面跟上COMMITCOMMIT;7.3 常用管理命令速查建好库能连上能查数据这个阶段目标算是达成了但有几个管理命令值得提前记下来后面日常维护几乎必用查看所有数据库实例SELECT * FROM V$INSTANCE;查看当前数据库参数SELECT * FROM V$PARAMETER;查看数据库文件路径SELECT * FROM V$DATAFILE;查看用户当前连接会话SELECT * FROM V$SESSIONS;这些视图和Oracle的动态性能视图在命名风格上很接近也是V$开头理解成本很低。日常巡检时我习惯先查实例状态、再查数据文件使用率、最后看会话数这三个维度基本能覆盖“数据库是否健康”的判断。数据文件使用率的查询语句SELECT TABLESPACE_NAME, TOTAL_SIZE, FREE_SIZE FROM V$TABLESPACE;如果发现某个表空间FREE_SIZE明显偏低就该考虑扩容或者清理历史数据了。8. 常见问题与排查技巧8.1 安装与启动阶段的常见报错找不到libdmxxx.so动态库这个报错很经典常见于环境变量PATH配置正确但动态库路径没配置的场景。DM8运行时依赖自己自带的动态库必须通过LD_LIBRARY_PATH指定到bin目录才能正常加载。前面配置环境变量时把LD_LIBRARY_PATH写上就是为这个。dminit建库时报创建文件失败先别怀疑语法错误大概率是目标目录没有权限或者父级目录还没创建。我遇到过几次都是直接mkdir建目录时用了root身份导致dinstall没有写入权限然后建库就失败了。检查目录属主并重新chown到dinstall用户即可。顺带一提挂载点如果开启了noexec选项执行dminit会直接报权限错误这个更隐蔽要用mount命令确认挂载参数。启动实例时报参数非法一般是dm.ini配置文件被手工改坏了。我的建议是有需要调参的地方优先用ALTER SYSTEM语句去调整让系统自己维护配置文件如果必须手工修改修改前先备份dm.ini文件修改后用差值对比的方式反复检查改动项避免手滑多改一个字符导致实例起不来。服务启动后客户端连接不上这个大概率是防火墙拦截或者服务没有真实监听。连接不上时不要盲目重启数据库先检查两点一是监听状态ss -lnt确认5236端口处在LISTEN状态二是防火墙规则firewall-cmd --list-all确认端口被放行。另外还有一种场景是服务器上有两个网卡数据库默认监听在了某个网卡地址上客户端走另一个网卡地址就连不上这种就要检查dm.ini里的监听地址配置确保监听在0.0.0.0或者正确的业务网卡地址上。8.2 使用阶段的体验与常见误区为什么执行了COMMIT还感觉数据丢了出现这个场景先冷静确认是不是查错库了。DM8支持在同一套数据库软件上创建多个实例每个实例的数据文件是独立的。如果机器上曾经初始化过多个实例服务当前启动的是A实例而你disql连接的字符串可能指向了B实例那数据当然不在同一个地方。排查时用V$INSTANCE视图确认当前连接的是哪个实例再把连接串里的实例名端口对清楚就能解决。内存设置为什么没有生效BUFFER_POOL大小这类内存参数有些是静态参数修改后必须重启实例才能生效有些是动态参数可以用ALTER SYSTEM语句在线调整。所以修改前先看参数的类型属性SELECT NAME, TYPE, VALUE FROM V$PARAMETER WHERE NAME BUFFER_POOL_SIZE;TYPE为SYS则表示需要重启为DYNAMIC才支持在线修改。从运维角度讲内存参数建议在业务低峰期统一调整并重启一次不要在线频繁改动调参之后观察一个完整业务周期再决定下一步。导入大量数据时速度很慢这个问题一般在刚部署完做数据迁移的阶段出现。常见原因是没有开启归档或没有用批量提交方式。如果用disql的脚本方式导入可以在脚本里加上SET LONG_RUN_TIMEOUT调整超时限制同时使用批量INSERT方式替代单条提交性能会有大幅提升。如果数据导入量是百万级以上建议直接用自带的DTS数据迁移工具或者导出导入工具DMP不要自己写SQL循环插入效率差距很大。8.3 一条实用的排查路径讲了这么多单个问题最后分享一个通用的排查顺序这个顺序帮我在多个项目里快速定位过问题已经固化成习惯。无论遇到什么异常按这个顺序走先查系统资源内存是否充足磁盘空间是否满了CPU使用率是否异常。再看服务状态服务是否在跑端口是否在监听进程日志最近有没有新增报错。查数据库自身日志DM8的日志文件默认在安装目录的log目录下里面的内容比终端报错详实得多。最关键的一步复现问题并记录当时的所有输出和报错信息而不是只记住一个模糊的现象描述。很多人排查问题慢不是能力问题而是拿到现象就直接登录数据库东看西看没有按顺序走信息散了一大堆反而理不出头绪。按这个路径走每一步都是在收敛范围从系统到服务到数据库一个链路查下来大部分问题都能定位到根因。9. 实际使用中的体会建议从零开始装完一套DM8并让它正常跑起来整个流程拆开来看其实不复杂但这中间隐藏的细节非常多。我实际用了几个月之后有几个比较深的体会想分享出来。第一个是环境准备阶段宁可多花十分钟也不要跳过检查和校验。前面说过的架构匹配、校验和、目录属主、系统资源限制每一个都是几行命令就能完成的事情但漏掉任何一个后面都有可能在某个奇怪的时间点变成大坑。尤其是磁盘空间和文件描述符限制这两个出问题的时间往往不是安装当时而是在数据库跑了几天、并发上来之后才逐步暴露这时候再排查代价就完全不一样了。第二个是建库参数一定要在初始化之前想清楚。页大小、字符集、大小写敏感性这几个核心参数一旦建库完成就是整个数据库生命周期内无法低成本变更的参数。业务阶段发现选错了唯一的路径就是重建库再迁移数据这个成本对于生产系统来说往往是灾难级别。所以建库之前花时间跟业务侧把数据特征摸清楚比什么技术选型都重要。第三个是养成连接串和路径随手校验的习惯。DM8支持多实例服务器上同时存在多套配置文件、多个服务名的情况并不罕见。每次连接之前确认端口、服务名、数据路径这几个关键信息是对的能避免大量“连错库”导致的数据不一致问题。我吃过一次亏之后现在执行任何操作前都会先跑一句SELECT * FROM V$INSTANCE确认我碰的是哪个实例这个习惯再也没有丢过。最后说一点关于文档习惯的建议。DM8的安装目录下带有一份比较完整的产品手册包含安装部署、开发指南、管理员手册好几个分册。遇到过不去的坎先翻翻手册里对应章节往往比自己乱试要高效得多。这套文档是真的能用的体系值得在动手之前花一点时间把目录结构过一遍后面使用时你的效率会明显不一样。