公司动态

达梦数据库从零到一:安装部署、实例管理与运维实战指南

📅 2026/8/5 10:49:05
达梦数据库从零到一:安装部署、实例管理与运维实战指南
1. 项目概述从零上手达梦数据库最近在项目里用上了达梦数据库从安装部署到日常的实例管理、连接操作完整走了一遍。我发现网上虽然资料不少但很多都是官方文档的复刻或者只讲单一环节对于刚接触的朋友来说东一榔头西一棒槌很难形成体系。今天我就把自己这一趟趟踩坑、调试、最终稳定运行的经验从头到尾捋一遍。这不仅仅是安装教程更是一个DBA或者后端开发在真实工作环境中如何系统性地搭建和管理一个达梦数据库服务节点的实操记录。无论你是需要做国产化替代的技术选型评估还是接到了具体的达梦数据库运维任务这篇内容都能给你一个清晰的路线图。达梦数据库作为一款成熟的企业级国产数据库其安装和基础管理的逻辑与Oracle、MySQL等有相似之处但也有其独特的路径和工具。核心流程可以概括为安装软件 - 创建数据库实例 - 配置连接 - 执行基础操作 - 管理实例生命周期。接下来我会在每个环节里不仅告诉你“怎么做”更会重点解释“为什么这么做”以及我在实际操作中遇到的“坑”和解决技巧。2. 达梦数据库安装部署详解安装是万里长征第一步这一步的规范性直接决定了后续所有操作的顺利程度。达梦支持Windows和Linux主流操作系统考虑到企业生产环境以Linux为主这里我以CentOS 7.x为例进行说明Windows安装的图形化步骤会更简单但核心原理一致。2.1 安装前环境检查与准备在上传安装包之前有几项必须的检查工作忽略它们很可能导致安装失败或后续运行不稳定。首先操作系统检查。需要确认系统版本、内核信息。虽然达梦8支持多种Linux发行版但官方对CentOS 7、RedHat 7等有更充分的测试。执行cat /etc/redhat-release和uname -a查看。其次资源检查。数据库是资源消耗大户必须确保内存至少4GB建议8GB以上。可用free -g查看。磁盘空间安装路径至少需要2-3GB数据文件路径根据业务量预留建议50GB起步。用df -h检查。文件句柄与进程数这是Linux下部署数据库的常见瓶颈。需要修改/etc/security/limits.conf文件在末尾为安装用户如dmdba添加配置。这是我的配置dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft nproc 65536 dmdba hard nproc 65536修改后需要重新登录该用户生效可通过ulimit -n和ulimit -u验证。注意很多新手会直接使用root用户安装和运行达梦这存在极大的安全隐患。务必创建独立的操作系统用户和用户组来管理数据库软件和数据。通常创建dinstall组和dmdba用户groupadd dinstall; useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba。后续所有操作非必要不使用root。最后依赖包检查。达梦运行需要一些基础的系统库如glibc、libaio等。对于CentOS 7可以执行yum install -y glibc libaio libnsl来安装常见依赖。使用rpm -qa | grep glibc可以查看是否已安装。2.2 执行安装与目录规划从官网下载对应版本的安装包如dm8_setup_rh7_64_ent_8.1.1.xx.iso将其上传至服务器并挂载或解压。关键步骤一规划目录。这是体现DBA功底的地方。我强烈建议将软件安装目录、数据文件目录、归档日志目录、备份目录分离。例如软件目录/opt/dmdbms(由安装程序创建)数据目录/dmdata(手动创建权限给dmdba:dinstall)归档目录/dmarch(手动创建)备份目录/dmbackup(手动创建)这样做的好处是隔离清晰便于管理、备份和性能优化例如可以将数据目录和归档目录放在不同的物理磁盘上避免I/O竞争。关键步骤二运行安装程序。切换到安装介质所在目录以dmdba用户执行图形化或命令行安装。如果服务器没有图形界面使用命令行安装是关键技能# 切换到dmdba用户 su - dmdba # 进入安装包解压目录 cd /mnt/dm_install # 执行命令行安装指定key文件如有和安装路径 ./DMInstall.bin -i接下来安装程序会以交互式提问以下是我的典型选择是否输入Key文件路径 - 如果有正式授权文件输入路径否则选N试用。选择安装语言 -C(中文) 或E(英文)。选择时区 -21(东八区)。选择安装类型 -1(典型安装)。对于初学者典型安装足够。选择安装目录 -/opt/dmdbms(输入我们规划好的路径)。确认安装信息 -y开始安装。安装过程大约持续几分钟。完成后切记要以root身份执行脚本安装日志末尾会提示你运行一个root脚本例如/opt/dmdbms/script/root/root_installer.sh。这个脚本会创建必要的系统服务DmAPService即达梦辅助进程服务和共享内存等。不执行此脚本数据库实例将无法正常启动。3. 数据库实例的创建与管理安装好达梦软件我们称之为“家目录”就像买了一套空房子。而创建实例就是按照你的户型需求参数配置进行精装修并搬入第一批家具初始化系统数据字典。一个达梦服务上可以创建多个相互独立的实例每个实例拥有自己独立的内存、进程、数据文件和端口。3.1 使用dminit工具初始化实例达梦提供了命令行工具diniit来初始化实例。这是最常用也是最灵活的方式。切换到dmdba用户进入安装目录的bin文件夹下操作。一个完整的初始化命令示例cd /opt/dmdbms/bin ./dminit PATH/dmdata DB_NAMEDAMENG INSTANCE_NAMEDMSERVER PORT_NUM5236这条命令做了以下几件核心事情PATH/dmdata指定数据文件、控制文件、日志文件的存放根目录。这对应我们之前规划的数据目录。DB_NAMEDAMENG数据库名通常与实例名保持一致或相关。INSTANCE_NAMEDMSERVER实例名后续启动服务、客户端连接时会用到。PORT_NUM5236数据库监听端口达梦默认是5236如果冲突可以修改。但这只是最基础的参数。在实际生产中我们需要根据硬件资源进行更细致的调优。例如./dminit PATH/dmdata DB_NAMEPROD_DB INSTANCE_NAMEPROD_SERVER PORT_NUM5237 \ PAGE_SIZE32 EXTENT_SIZE32 CASE_SENSITIVE0 \ CHARSET1 LENGTH_IN_CHAR1 SYSDBA_PWDDameng123 \ LOG_SIZE1024 # 指定重做日志文件大小为1024MBPAGE_SIZE数据页大小可选4、8、16、32KB。页是数据库I/O的基本单位。OLTP联机事务处理系统如订单、交易库通常选16KB平衡性能和内存利用率。OLAP联机分析处理或数据仓库因为处理大量数据可选32KB以减少I/O次数。我的经验是没有特殊需求就用16KB。CASE_SENSITIVE标识符大小写敏感。设置为0不敏感时TableName和tablename被认为是同一个对象这对从MySQL迁移过来的应用更友好。设置为1敏感则更符合Oracle、PostgreSQL的习惯。这个参数在初始化后无法修改必须提前确定我一般选择0减少迁移和开发中的麻烦。SYSDBA_PWD设置系统管理员SYSDBA的密码。生产环境务必设置强密码切忌使用默认密码或弱密码。LOG_SIZE每个重做日志文件的大小。重做日志记录所有数据变更用于故障恢复。大小设置要权衡太小会导致日志切换频繁影响性能太大会延长恢复时间。对于一般业务1GB到4GB是个合理的起点。执行成功后会在指定的PATH如/dmdata下生成DAMENG以DB_NAME命名的目录里面包含了控制文件、数据文件、日志文件等。3.2 注册与启动数据库服务实例初始化后数据文件准备好了但数据库服务进程还没运行。我们需要将其注册为系统服务以便管理开机自启、状态监控等。达梦提供了dm_service_installer.sh脚本。注意这个脚本通常需要root权限执行因为它会操作/etc/systemd/system/下的服务文件。# 切换回root用户 su - # 进入达梦工具目录 cd /opt/dmdbms/script/root # 注册服务 ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/DAMENG/dm.ini -p DMSERVER-t dmserver指定服务类型为数据库实例服务。-dm_ini /dmdata/DAMENG/dm.ini这是最关键参数指向你刚才初始化实例时生成的配置文件dm.ini的绝对路径。服务根据这个文件找到所有数据文件。-p DMSERVER指定服务名后缀最终生成的服务名会是DmServiceDMSERVER。注册成功后就可以用systemctl管理了systemctl start DmServiceDMSERVER # 启动 systemctl status DmServiceDMSERVER # 查看状态 systemctl enable DmServiceDMSERVER # 设置开机自启看到状态为active (running)并且日志文件在数据目录下的DAMENG01.log没有报错说明实例启动成功。实操心得经常有人启动服务失败报“共享内存或信号量”错误。除了前面提到的limits.conf配置还要检查/etc/sysctl.conf中的内核参数如kernel.sem信号量、kernel.shmall共享内存总量等。修改后执行sysctl -p生效。另一个常见坑是dm.ini文件路径不对或权限不对dmdba用户需要可读务必仔细检查。4. 连接数据库与常用工具实战实例跑起来了我们就要连接上去操作。连接的核心是网络配置和客户端工具。4.1 配置监听与网络连接达梦的监听服务由dm.ini中的PORT_NUM参数指定。要确保客户端能连接到服务器需要防火墙开放端口比如我们用的5236端口。firewall-cmd --zonepublic --add-port5236/tcp --permanent firewall-cmd --reload检查监听状态在服务器上使用netstat -tlnp | grep 5236查看是否有dmserver进程在监听该端口。连接字符串的标准格式是主机IP/域名:端口号。例如服务器IP是192.168.1.100端口5236那么连接地址就是192.168.1.100:5236。4.2 使用disql命令行工具连接disql是达梦自带的类似Oraclesqlplus的命令行工具是DBA进行数据库管理、脚本执行的最直接工具。# 在服务器本地使用dmdba用户 cd /opt/dmdbms/bin ./disql SYSDBA/Dameng123localhost:5236或者指定完整连接串./disql SYSDBA/Dameng123192.168.1.100:5236连接成功后会显示达梦的版本信息和SQL提示符SQL。4.3 使用图形化客户端工具连接DBeaver/Navicat对于开发人员和习惯图形界面的DBA图形化工具更友好。DBeaver连接达梦首先需要达梦的JDBC驱动DmJdbcDriver18.jar它位于达梦安装目录的/drivers/jdbc下。在DBeaver中新建连接选择数据库类型时如果没有“达梦”可以选“Generic”或“Oracle”因为协议兼容。在驱动管理里添加新的驱动指定jar包路径。驱动类名填dm.jdbc.driver.DmDriver。JDBC URL格式为jdbc:dm://192.168.1.100:5236?schemaDAMENG其中DAMENG是你的数据库名。输入用户名SYSDBA和密码测试连接。Navicat连接达梦 新版本的Navicat如16.x已内置达梦支持。连接更简单新建连接选择“达梦”。主机填IP端口填5236服务名或数据库名填DAMENG或你的实例名。身份验证选“基本”输入用户名密码即可。避坑指南图形化工具连接失败除了检查网络和防火墙最常见的问题是驱动版本不匹配。务必使用与你达梦数据库版本配套的JDBC驱动。高版本驱动通常兼容低版本数据库反之则可能失败。另一个Navicat特有的问题是有时需要手动在连接属性里指定编码比如encodingGB18030以避免中文乱码。5. 核心SQL操作与运维语句实录连接到数据库后就可以进行各种操作了。达梦的SQL语法高度兼容SQL标准以及Oracle/MySQL的常用语法这里记录一些最核心、最常用的语句和场景。5.1 基础对象管理与数据操作-- 1. 用户与权限管理非常重要不要永远用SYSDBA操作业务 -- 创建业务用户 CREATE USER TEST_USER IDENTIFIED BY Test123456 DEFAULT TABLESPACE MAIN; -- 授予基本权限 GRANT RESOURCE, VTI TO TEST_USER; -- 切换到业务用户进行操作在disql中 CONN TEST_USER/Test123456192.168.1.100:5236 -- 2. 表空间管理规划存储 -- 创建一个新的数据表空间并指定数据文件 CREATE TABLESPACE TS_DATA DATAFILE /dmdata/DAMENG/TS_DATA01.dbf SIZE 1024; -- 创建一个新的索引表空间将索引与数据分离是常见的性能优化手段 CREATE TABLESPACE TS_IDX DATAFILE /dmdata/DAMENG/TS_IDX01.dbf SIZE 512; -- 3. 建表与约束 CREATE TABLE TEST_USER.ORDERS ( ORDER_ID BIGINT IDENTITY(1,1) PRIMARY KEY, -- 自增主键 CUSTOMER_NAME VARCHAR(100) NOT NULL, AMOUNT DECIMAL(15,2) DEFAULT 0, ORDER_DATE DATETIME DEFAULT CURRENT_TIMESTAMP(), STATUS CHAR(1) CHECK (STATUS IN (P, C, D)) -- 检查约束 ) STORAGE (ON TS_DATA); -- 指定存储表空间 CREATE INDEX IDX_ORDERS_DATE ON TEST_USER.ORDERS(ORDER_DATE) STORAGE (ON TS_IDX); -- 4. 基本的DML操作与标准SQL无太大差异 INSERT INTO TEST_USER.ORDERS (CUSTOMER_NAME, AMOUNT, STATUS) VALUES (张三, 199.99, P); UPDATE TEST_USER.ORDERS SET STATUS C WHERE ORDER_ID 1; DELETE FROM TEST_USER.ORDERS WHERE STATUS D; SELECT * FROM TEST_USER.ORDERS WHERE ORDER_DATE DATEADD(day, -7, CURRENT_TIMESTAMP());5.2 系统监控与运维常用查询作为DBA日常监控数据库的健康状态是必修课。-- 1. 查看数据库版本和实例状态 SELECT * FROM V$VERSION; SELECT NAME, STATUS$, START_TIME FROM V$INSTANCE; -- 2. 查看当前会话与连接数 SELECT SESS_ID, SQL_TEXT, STATE, CLNT_IP FROM V$SESSIONS WHERE STATE ACTIVE; SELECT COUNT(*) AS CURRENT_CONNECTIONS FROM V$SESSIONS; -- 3. 查看锁信息排查阻塞的关键 -- 当应用反馈“卡住”时首先查锁 SELECT LH.TRX_ID AS BLOCKING_TRX, WS.SESS_ID AS BLOCKING_SID, WS.SQL_TEXT AS BLOCKING_SQL, LH.TABLE_ID, LH.ROW_ID FROM V$LOCK LOCKHOLDER LH INNER JOIN V$SESSIONS WS ON LH.TRX_ID WS.TRX_ID WHERE LH.BLOCKED 1; -- 4. 查看表空间使用情况避免磁盘爆满 SELECT TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 AS SIZE_MB, (BYTES - USER_BYTES)/1024/1024 AS USED_MB, USER_BYTES/1024/1024 AS FREE_MB FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME; -- 5. 查看TOP SQL性能调优入口 -- 按逻辑读排序找出消耗资源最多的SQL SELECT TOP 10 SQL_TEXT, EXECUTIONS, ROUND(ELAPSED_TIME/1e6, 2) AS ELAPSED_SEC, ROUND(CPU_TIME/1e6, 2) AS CPU_SEC, BUFFER_GETS AS LOGICAL_READS FROM V$SQL_HISTORY ORDER BY BUFFER_GETS DESC;5.3 备份与恢复语句备份是数据库的生命线。达梦支持物理备份和逻辑备份。-- 1. 联机数据库备份需要开启归档 -- 首先确保数据库处于归档模式 ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 执行全量备份备份到我们之前规划的/dmbackup目录 BACKUP DATABASE FULL BACKUPSET /dmbackup/full_bak_20231027; -- 2. 表空间备份 BACKUP TABLESPACE MAIN BACKUPSET /dmbackup/ts_main_bak_20231027; -- 3. 表级逻辑导出使用dexp工具命令行执行 -- 这是逻辑备份用于迁移特定表数据 -- 在操作系统命令行使用dmdba用户 cd /opt/dmdbms/bin ./dexp USERIDTEST_USER/Test123456localhost:5236 FILE/dmbackup/test_user_tables.dmp LOG/dmbackup/dexp.log TABLESORDERS,ORDER_DETAILS -- 4. 恢复演练使用dimp导入逻辑备份 ./dimp USERIDTEST_USER/Test123456localhost:5237 FILE/dmbackup/test_user_tables.dmp LOG/dmbackup/dimp.log TABLE_EXISTS_ACTIONreplace重要提示物理备份BACKUP DATABASE必须在数据库开启归档模式后进行并且备份前建议执行CHECKPOINT。逻辑备份dexp/dimp适用于小规模数据迁移或跨版本迁移但对于大规模全库恢复物理备份更快更可靠。生产环境一定要制定并测试备份恢复策略。6. 实例的删除与完整清理当我们不需要某个测试实例或者需要重建实例时需要彻底删除它。这是一个危险操作务必谨慎并提前确认已备份重要数据删除实例不是简单删除文件而是需要停止服务 - 注销服务 - 删除数据文件三步走。步骤一停止数据库实例服务systemctl stop DmServiceDMSERVER systemctl status DmServiceDMSERVER # 确认状态为 inactive (dead)步骤二注销系统服务如果不注销服务下次启动系统时可能会尝试启动一个不存在的实例导致报错。cd /opt/dmdbms/script/root ./dm_service_uninstaller.sh -n DmServiceDMSERVER执行后会提示服务已被移除。步骤三删除数据库实例的所有数据文件这是物理删除一旦删除不可恢复。# 确认当前用户有权限通常用root或dmdba rm -rf /dmdata/DAMENG这里删除的是初始化实例时PATH参数指定的目录本例中是/dmdata/DAMENG。步骤四可选清理残留环境变量或配置如果你在~/.bash_profile或系统profile中为这个实例配置过环境变量如DM_HOME,DM_DATA也需要将其移除或注释掉。终极检查清单在执行rm -rf之前请再次确认服务是否已停止systemctl status确认是否有其他应用或会话连接着这个实例用netstat -anp | grep 端口号检查备份是否已经完成并验证有效你当前所在的目录是不是你要删除的目录pwd命令确认避免误删7. 常见问题排查与实战心得把流程走通只是开始在实际运维中你会遇到各种各样的问题。我把几个最典型的问题和排查思路整理如下这比官方文档更“接地气”。问题一安装时提示“空间不足”或“权限不足”排查df -h看磁盘空间ls -ld /opt /dmdata看目录权限和所有者。确保安装用户dmdba对安装目录和数据目录有读写权限。心得权限问题在Linux下极其常见。牢记“软件目录/opt/dmdbms的安装需要执行权限数据目录/dmdata的读写需要dmdba用户权限”。问题二数据库服务启动失败日志报“共享内存创建失败”排查检查limits.conf配置是否生效重新登录dmdba后执行ulimit -a。检查/etc/sysctl.conf中kernel.shmall、kernel.shmmax、kernel.sem的值是否足够大。可以参考以下生产环境设置kernel.shmall 4294967296 kernel.shmmax 68719476736 kernel.sem 5010 641280 5010 256执行sysctl -p加载配置并ipcs -l查看当前限制。心得对于物理内存较大的服务器如128GB以上默认的共享内存参数往往不够必须手动调整。这是部署高配置数据库服务器的必调项。问题三客户端无法连接报“网络错误”或“连接超时”排查四步法服务器本地能连吗在服务器上用disql连接localhost排除数据库本身问题。端口通吗在客户端用telnet 服务器IP 5236测试。不通则检查服务器防火墙和云服务商的安全组规则。监听在跑吗在服务器上执行netstat -tlnp | grep 5236确认dmserver进程在监听正确IP0.0.0.0表示监听所有IP。连接字符串对吗检查IP、端口、服务名或数据库名是否拼写错误。心得网络问题排查要由近及远从服务器本地到客户端逐层排除。telnet命令是测试网络连通性的利器。问题四执行SQL特别慢或应用反馈“锁表”了排查立即登录数据库执行SELECT * FROM V$LOCK;和查询V$SESSIONS中状态为ACTIVE的会话查看是否有阻塞链。找到阻塞的会话IDSESS_ID分析其正在执行的SQLSQL_TEXT。如果确认是异常锁可以使用SP_CLOSE_SESSION(SESS_ID);命令强制结束该会话谨慎操作。心得锁的根源往往是长事务或未提交的事务。在应用开发中要确保事务尽量短小操作完成后及时提交或回滚。监控慢SQLV$SQL_HISTORY是预防性能问题的关键。问题五磁盘空间告警表空间不足排查使用DBA_DATA_FILES视图查询表空间使用率。解决扩容数据文件ALTER TABLESPACE TS_DATA RESIZE DATAFILE /dmdata/DAMENG/TS_DATA01.dbf TO 2048;扩大到2GB新增数据文件ALTER TABLESPACE TS_DATA ADD DATAFILE /dmdata/DAMENG/TS_DATA02.dbf SIZE 1024;心得不要等到空间用尽才处理。建立日常监控当使用率超过80%时就要计划扩容。对于主要业务表空间开启数据文件的“自动扩展”属性是个好习惯ALTER TABLESPACE TS_DATA DATAFILE /dmdata/...dbf AUTOEXTEND ON NEXT 100 MAXSIZE 10000;。走完这一整套流程从裸机到一个可稳定运行、可连接、可管理、可备份的达梦数据库实例才算真正完成了基础部署。每个环节的参数选择、路径规划、问题排查都蕴含着对数据库系统运行机制的理解。我的体会是国产数据库的使用在基础操作层面已经非常成熟和标准化难点和价值在于如何根据具体的业务负载进行深度的参数调优、架构设计和故障预案这需要持续的实践和经验积累。刚开始的时候建议严格按照文档和最佳实践来操作等熟悉之后再尝试根据监控指标进行个性化的调整。