news 2026/9/19 16:52:43

达梦数据库实战指南:从安装部署到数据迁移与常见问题排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
达梦数据库实战指南:从安装部署到数据迁移与常见问题排查

1. 达梦数据库能干什么,为什么要写这份指南

达梦数据库是国内少有的、从底层内核自主研发的关系型数据库管理系统,它在政府、金融、电力、电信这些对数据安全要求极高的行业里,使用频率相当高。简单说,它就是Oracle、SQL Server、MySQL这些国外数据库的国产替代方案,SQL语法高度兼容Oracle风格,很多在Oracle上跑得好好的业务系统,迁到达梦之后改动量极小。

这两年国产化改造的节奏明显加快,越来越多的开发者和 DBA 开始接触达梦。但网上关于达梦的教程要么太零散,要么停留在“装个软件、建个表”的层面,一旦真到了数据迁移、字符集对齐、工具连接、批量导入这种实战环节,很多人就开始踩坑了。我自己在几个项目里完整走过达梦的安装、部署、迁移、调优整个流程,踩过的坑不少,这次干脆把这些经验整理成一份能直接照着做的操作指南。

这份指南适合谁看?三类人。第一类是刚接触达梦、准备在项目里试用的开发人员,你需要知道怎么装、怎么连、怎么建库建表;第二类是手里有存量数据要从Oracle或MySQL迁过来的运维和DBA,你需要搞清楚迁移工具怎么用、编码不对怎么处理、先删后插入到底是什么意思;第三类是已经在用达梦、但遇到了一些奇怪问题(比如Navidat连不上、导入报编码错误)的人,你可以直接翻到对应章节找排查方法。

我会尽量按一个项目的完整生命周期来讲:从环境准备和安装开始,到客户端连接、基础操作,再到数据迁移和常见问题排查。每个环节都会给出我实测过的操作方式和参数,不会只讲理论。

2. 安装部署:从下载到初始化实例的全过程

2.1 环境准备与版本选择

达梦数据库分为开发版、标准版、企业版和安全版。开发版功能上跟企业版基本一致,只是限制了并发数和一些高级特性,用来学习和做功能验证完全够用。官网会提供试用版下载,个人学习直接用开发版就行。

硬件方面,达梦对配置的要求不算苛刻,最低2核CPU、4GB内存就能跑起来。但如果你要在上面做数据迁移或者跑一些并发查询,建议CPU至少4核、内存8GB以上。磁盘方面,达梦安装目录、数据文件目录、归档日志目录最好分开规划,避免数据盘被日志写满。操作系统这边,达梦对主流的Linux发行版(麒麟、统信UOS、CentOS、Ubuntu)和Windows Server都有适配,Linux环境下生产部署最常见,下面我就以Linux环境为例来讲。

下载安装包的时候注意区分架构,x86_64和ARM(如鲲鹏、飞腾)的安装包不通用。我见过有人在ARM机器上拿了x86的包去装,结果初始化的时候直接报非法指令错误,后来重新下载对应架构的安装包才解决。

2.2 安装步骤与初始化实例

安装达梦有一个很省心的点:它提供了图形化安装向导,也有命令行静默安装方式。生产环境没有图形界面的话,用命令行安装反而效率更高。

安装完之后先建一个专用的系统用户,不要用root直接跑数据库。虽然达梦安装包允许你用root装,但后续启动实例、管理数据文件的时候会有权限上面的别扭。我习惯这样操作:

# 创建用户组和用户 groupadd dinstall useradd -g dinstall -m -d /home/dmdba dmdba # 设置密码 passwd dmdba # 给安装目录授权 chown -R dmdba:dinstall /dm8

接下来把安装包解压,执行安装脚本。以命令行静默安装为例:

./DMInstall.bin -q

-q参数表示静默安装,它会使用默认配置。如果你想自定义安装路径、组件,可以先用./DMInstall.bin -i进入交互式命令行安装,根据提示一步步选。装完之后会有个提示,让你用root执行一条脚本,那个是注册系统服务用的,照着提示跑一遍即可。

初始化实例这一步很多人会忽略,装了数据库软件不初始化实例,服务根本起不来。达梦提供了一个图形化工具叫“数据库配置助手”(DBCA,Database Configuration Assistant),命令行下可以用dminit工具初始化。

# 切换到dmdba用户 su - dmdba # 进入达梦的bin目录 cd /dm8/bin # 创建初始化参数文件 ./dminit PATH=/dm8/data DB_NAME=DMDB INSTANCE_NAME=DMSERVER PORT_NUM=5236

这些参数里面,PATH是数据文件存放目录,DB_NAME是数据库名,INSTANCE_NAME是实例名,PORT_NUM是数据库服务端口,默认就是5236。初始化成功之后,在/data目录下会生成一堆文件,其中dm.ini是实例的核心参数文件,后面调优改参数基本就是改它。

最后把数据库注册成服务,这样开机就能自动启动:

cd /dm8/script/root ./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/data/DMDB/dm.ini

启动服务:

systemctl start DmServiceDMSERVER

提示:初始化实例时还经常遇到一个选项叫“页大小”(page size),默认是8KB。这个参数建库后基本不能改,如果后续要存大数据量或者做数据仓库类应用,建议一开始就设成16KB甚至32KB。我吃过这个亏,一开始图省事用了默认8K,后来一张表行数过亿,查询性能怎么调都上不去,最后只能重建库。

2.3 初始化后第一件事:改密码和开归档

达梦安装完成后默认有一个SYSDBA用户,初始密码是SYSDBA(注意区分大小写)。第一次登录进去,第一件事就是改密码,这一步别偷懒。生产环境密码强度不够,等被扫到就晚了。

改密码和开归档都可以用disql命令行工具来做。disql是达梦自带的命令行客户端,类似Oracle的sqlplus。

cd /dm8/bin ./disql SYSDBA/SYSDBA@localhost:5236

进去之后:

-- 修改SYSDBA密码 ALTER USER SYSDBA IDENTIFIED BY "新密码"; -- 开启归档(归档是备份恢复的基础) ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/arch/TYPE=LOCAL FILE_SIZE=512 SPACE_LIMIT=0'; ALTER DATABASE OPEN;

归档目录这块,建议单独用一个分区或者大容量磁盘。空间上限(SPACE_LIMIT)设成0表示不限制,但生产环境建议设一个合理值防止磁盘写满,比如SPACE_LIMIT=10240表示占用上限10GB,具体多少看你的业务量和备份策略。

3. 工具链盘点:Navicat、disql、DM管理工具怎么选、怎么连

3.1 达梦自带的工具矩阵

装完达梦,它自带了几款管理工具,很多新手一进bin目录直接懵,不知道用哪个。我梳理一下:

  • disql:命令行工具,适合写脚本、跑批、运维操作。DBA用这个最多。
  • DM管理工具(manager,旧版叫manager.exe或者DM8 Manager):图形化工具,类似Oracle的PL/SQL Developer,日常查数据、建表、看执行计划都很方便。
  • DM数据迁移工具(dts,Data Transfer Service):专门用来把Oracle、MySQL、SQL Server、PostgreSQL等数据源的数据迁到达梦,也可以反向迁出。后面第5章详细讲。
  • DM控制台工具(console):用来做备份还原、归档配置、性能监控的。
  • DM性能监控工具(monitor):图形化监控数据库运行状态。

如果你之前用惯了Navicat,会发现DM管理工具的界面交互差一些,但功能层面该有的都有,执行计划、会话管理、表空间管理、用户权限管理都能在图形界面里完成。

3.2 用Navicat连接达梦数据库的实操步骤

Navicat从16.x版本开始正式加入了达梦数据库的连接支持。这确实是个好消息,因为Navicat的界面和操作习惯已经被大量开发人员用得很熟了,能直接用它连达梦,迁移团队很多人的学习成本都能降下来。

步骤很简单:

  1. 打开Navicat,点击左上角“连接”,在下拉列表里找到“达梦数据库”。如果找不到,说明你的Navicat版本太旧,需要升级到16.2以上(每个大版本对达梦的支持情况不太一样,尽量用最新版)。
  2. 填写连接信息:
  • 连接名:随便起个,比如“本地达梦测试”
  • 主机:数据库服务器IP,本机就填localhost或127.0.0.1
  • 端口:默认5236,如果是自定义端口就写自定义的
  • 用户名:SYSDBA
  • 密码:初始化时或修改后的SYSDBA密码
  1. 点击“测试连接”,看到“连接成功”就保存。

这里有个比较容易踩的坑:如果服务器上配了防火墙,即便账号密码都对,测试连接也会卡住或者报“无法连接”。Linux上检查一下:

# 查看5236端口是否在监听 ss -tlnp | grep 5236 # 如果开启了firewalld,放行端口 firewall-cmd --zone=public --add-port=5236/tcp --permanent firewall-cmd --reload

还有一点,达梦默认开的是TCP连接,如果连接特别慢,检查一下达梦服务器端是否开启了SQL日志或者审计功能,高负载下这俩功能会影响响应速度。

3.3 disql命令行:DBA的“肌肉记忆”

图形化工具虽好用,但真到了批量操作、脚本化运维的时候,命令行才是效率王者。disql的语法和Oracle的sqlplus非常像,如果你写过sqlplus脚本,上手disql基本没有压力。

常用操作示例:

# 登录(不显示SQL语句回显,适合跑批) ./disql -S SYSDBA/password@localhost:5236 # 查看当前数据库版本 SELECT * FROM v$version; # 切换模式(schema) SET SCHEMA TEST_SCHEMA; # 查看所有表 SELECT TABLE_NAME FROM USER_TABLES; # 查看表结构描述 DESC TEST_SCHEMA.EMPLOYEE;

写Shell脚本跑批的时候,还可以通过环境变量传入密码,避免在命令行明文暴露:

export DM_PASSWORD='yourpass' ./disql SYSDBA/$DM_PASSWORD@localhost:5236 -e "SELECT COUNT(*) FROM TEST_SCHEMA.EMPLOYEE;"

注意:disql的-e参数后面只能执行一条SQL,多条SQL得写成SQL文件然后用START 文件名.sql来执行,或者输入重定向。我见过有同事试图在-e后面塞一整个脚本,结果报语法错误,其实用./disql SYSDBA/pwd@localhost:5236 < script.sql就行。

4. 基础操作与核心概念:模式、表空间、DMW和DSC到底怎么回事

4.1 模式(Schema)、表空间和用户的关系

达梦里的“模式”“用户”“表空间”这三个概念,建议把关系理清,否则后面建表、授权、迁移的时候特别容易绕晕。

在达梦里,用户和模式是一一对应的。创建一个用户时,系统会自动生成一个同名的模式(Schema),用户默认操作的就是自己的模式下的表。这和Oracle的规则一样,和MySQL的“库”概念有区别。

表空间是存储数据的物理逻辑容器。数据库初始化时默认有几个表空间,比如SYSTEM(系统表空间)、ROLL(回滚表空间)、MAIN(用户默认表空间)、TEMP(临时表空间)。你建用户的时候可以指定默认表空间,也可以专门为某个业务系统建一个表空间。

-- 建一个表空间,数据文件放到/data/dmdbsp目录下 CREATE TABLESPACE APP_TS DATAFILE '/dm8/data/DMDB/APP_TS01.DBF' SIZE 1024 AUTOEXTEND ON NEXT 128 MAXSIZE 32768; -- 建用户并指定默认表空间 CREATE USER APP_USER IDENTIFIED BY "App@123456" DEFAULT TABLESPACE APP_TS; -- 给用户授权 GRANT DBA TO APP_USER;

把不同业务的数据放在不同的表空间里,一个很大的好处是备份粒度可以细化。比如只备份某个业务系统的数据文件,而不用全库备份。

4.2 DMW和DSC的区别:别再傻傻分不清

在达梦的文档和社区里,经常能看到DMW和DSC这两个缩写,很多刚接触的人搞混了。这里说清楚。

DMW(DM Warehouse),指的是达梦数据仓库,和Oracle的Oracle Warehouse Builder(OWB)、一体机的思路有点类似,专门用于OLAP场景,做数据的抽取、转换、加载(ETL)和仓库建模。在企业里它通常作为独立的数据分析平台,面向报表、BI分析这种场景。

DSC(DM Shared Cluster,共享集群),这是达梦的集群方案,对标Oracle RAC。它的核心特点是多个数据库实例共享一套存储(通常是SAN或分布式存储),任何一个实例宕机,其他实例继续提供服务,实现高可用和负载均衡。DSC适合对连续性要求极高的核心交易系统。

对比一下:

维度DMWDSC
全称DM WarehouseDM Shared Cluster
定位数据仓库/OLAP高可用集群/OLTP
对标产品Oracle ODI/OWBOracle RAC
核心场景数据分析、ETL、报表核心交易系统、连续性保障
存储方式普通存储共享存储

一句话总结:如果业务是重查询、重报表、数据量大,考虑DMW;如果业务是交易型、7x24小时不能断,考虑DSC。实际项目中,两者结合使用的也有,比如OLTP系统跑在DSC上,再把数据同步到DMW做分析。

4.3 达梦的SQL特性与Oracle兼容性

达梦在SQL语法上做了大量Oracle兼容工作,这也是它能在国产数据库里被大量接纳的重要原因。很多从Oracle迁移过来的存储过程、函数、触发器,几乎不用改就能跑。

基本写法对比如下:

-- Oracle分页 SELECT * FROM (SELECT t.*, ROWNUM rn FROM EMPLOYEE t WHERE ROWNUM <= 30) WHERE rn > 20; -- DM也支持同样的写法,同时也可以用LIMIT SELECT * FROM EMPLOYEE LIMIT 20, 10;

达梦还支持序列(Sequence)、同义词(Synonym)、物化视图(Materialized View)这些Oracle特色功能。如果你是从Oracle转过来,大可以把达梦当成“一个去掉了很多Oracle商业套件的简化版Oracle”来用。

数据类型上要留意:达梦有VARCHAR2VARCHAR,但默认不带长度语义,不像Oracle里VARCHAR2(10)默认是字节计数。如果字段要存中文,建议用VARCHAR(50 CHAR)这样的显式写法,避免长度不够导致插入失败。

5. 数据迁移实战:导入导出、工具选型、编码问题和“先删后插入”

5.1 三种迁移路径怎么选

数据迁移是达梦项目里最磨人的环节,没有之一。我常用的迁移方式有三种,各有适用场景。

第一种:DM数据迁移工具(DTS)图形化迁移。这是最省事的方式,适合中小数据量(几十GB以内),支持从Oracle、MySQL、SQL Server、PostgreSQL、DB2等主流数据库迁入。启动方式是进入安装目录的tools目录,运行dts命令。界面是向导式的,选择源库、目标库、要迁移的对象(表、视图、存储过程等),一路点下去就行。

第二种:命令行导入导出(dexp/dimp)。这对命令跟Oracle的exp/imp相似,dexp负责导出,dimp负责导入。适合达梦库之间的数据搬迁,或者要定时做逻辑备份的场景。导出文件是dmp格式,可以按用户、按模式、按表粒度导出。

第三种:高速批量导入工具dmfldr。dmfldr是达梦的数据快速装载工具,它跟Oracle的SQL*Loader类似,直接读取csv或文本文件快速写入数据库。在大批量初始化数据的时候,dmfldr的速度比insert语句快一个量级。

我的建议是:从Oracle迁过来用DTS最稳;两个达梦库之间同步用dexp/dimp;有几百万行以上的文本数据要灌库,优先用dmfldr。

5.2 迁移表设置“先删后插入”到底什么意思

在DTS迁移工具里,迁移表数据时有一个选项叫“先删后插入”,英文是Delete First。这个选项的默认状态往往是关闭的,但实际使用中我强烈建议针对目标表开启。

它的含义是:在往目标表写入数据前,先执行DELETE操作,把目标表已有的数据清空,然后再执行INSERT写入新数据。这样做可以保证数据的一致性——每次迁移完,目标表的数据就是源表的完整快照,不会出现“源表有1000行,目标表因为之前残留数据变成1200行”这种问题。

为什么DTS默认不开启?因为如果目标表是大表,DELETE会记录大量redo日志,同时也会锁表,对在线业务有影响;而且如果目标表里有不想删除的数据,开启这个选项会误删。所以在生产环境中,如果你确定目标表数据可以覆盖,就开启“先删后插入”,如果你只是想增量追加,就保持关闭。

这里有一个衍生问题:如果目标表数据量特别大,DELETE+INSERT会不会比TRUNCATE+INSERT慢很多?答案是肯定的。DELETE是逐行删除,TRUNCATE是直接截断表,速度天差地别。但DTS里一般没有TRUNCATE选项,只给“先删后插入”,原因可能是TRUNCATE无法回滚,误操作风险太大。如果你特别在意迁移耗时,可以先把表手工TRUNCATE,再把DTS的“先删后插入”关掉,这样迁移工具只做插入,速度会快不少。注意顺序:先TRUNCATE,再关闭“先删后插入”去执行迁移。

5.3 编码错误“本地编码:pg_gbk, 导入文件编码:pg_utf8”怎么解决

这是达梦社区里出现频率极高的一个报错。完整报错类似:

本地编码:pg_gbk, 导入文件编码:pg_utf8, 请确认导入文件的编码是否是pg_gbk格式

出现这个报错的场景一般是用DM管理工具或者DTS往达梦导入数据时,导入文件的字符编码跟客户端/数据库的字符集对不上。

先说清楚背后的逻辑。数据库有个字符集,客户端工具也有一个编码环境,而导入文件本身的编码又是另一个样子。三者不一致时,工具就会提示这种编码不匹配错误。pg_gbk这里的“pg”应该是语言环境里对字符集的某种简写标记,GBK和UTF-8之间的转换如果没有显式指定,就会触发这个报错。

解决办法有几种:

方法一:改数据库字符集。如果你新建的库还没放什么数据,可以重新初始化,把字符集设为UTF-8。达梦支持GBK、UTF-8、GB18030等字符集,初始化时用dminit参数CHARSET=1(1代表UTF-8,0代表GBK)。如果库已经建好了,字符集不能直接改,只能拆库重建。

方法二:转换导入文件编码。如果数据库是GBK的(所以本地编码显示pg_gbk),那就把导入的UTF-8文件转成GBK再导。Linux下直接用iconv转换:

iconv -f UTF-8 -t GBK input.csv > output_gbk.csv

方法三:工具里手动指定编码。DTS里有一个“高级选项”或者“源定义”的配置,可以手动指定源文件编码。找到对应字段,把UTF-8改成GBK再试。不同的达梦版本界面略不一样,但基本上都在“源/目标”配置页面能找到。

方法四:检查客户端工具的编码设置。很多人忽略,你是用什么工具去连数据库的?如果工具终端是UTF-8环境,但你数据库是GBK,需要在客户端的连接参数上显式指定。比如在Navicat里找到“编码”选项,设置成跟数据库一致。

提示:我踩过的一个典型坑是:文件本身看起来是中文正常显示的,用file命令看编码也没问题,但导入就报错。后来发现是文件里混入了BOM头(UTF-8 with BOM),达梦在解析时把BOM头当成了一个字符,导致整个文件编码判断错乱。解决办法是用sed -i '1s/^\xEF\xBB\xBF//' input.csv把BOM头去掉再导。这也是为什么我后来导入任何数据文件前都先跑一下file 文件名看一眼编码信息。

5.4 dmfldr批量导入的完整示例

dmfldr是命令行工具,它的控制文件是txt格式,里面写上导入参数。我以一个实际的例子来演示。

场景:有一份CSV文件,路径/opt/data/employee.csv,内容大约200万行,需要导入到达梦的APP_USER.EMPLOYEE表。

CSV文件格式:

1001,张三,男,28 1002,李四,女,32

控制文件ctl.txt:

LOAD DATA INFILE '/opt/data/employee.csv' INTO TABLE APP_USER.EMPLOYEE FIELDS TERMINATED BY ',' (EMP_ID, EMP_NAME, EMP_GENDER, EMP_AGE)

执行导入:

cd /dm8/bin ./dmfldr SYSDBA/password@localhost:5236 APP_USER control='/opt/data/ctl.txt'

如果表结构字段正好跟文件对应,不用写字段列表也行。导入完会输出统计信息:成功导入多少行、失败多少行、耗时多少秒。

dmfldr的导入速度非常快,200万行数据通常十几秒就能完成,比一条条insert快得多。它支持批量提交,内部会做分批事务处理,不会因为一条数据错误导致整个文件导入失败。错误行会写到bad文件里,方便事后排查。

5.5 dexp/dimp全库备份和迁移示例

dexp的用法和Oracle的exp基本一个套路:

# 按用户导出 ./dexp SYSDBA/password@localhost:5236 FILE=/opt/backup/app_user.dmp OWNER=APP_USER # 按表导出 ./dexp SYSDBA/password@localhost:5236 FILE=/opt/backup/emp_table.dmp TABLES=APP_USER.EMPLOYEE

dimp是导入:

# 导入用户 ./dimp SYSDBA/password@localhost:5236 FILE=/opt/backup/app_user.dmp FROMUSER=APP_USER TOUSER=APP_USER # 如果要把数据导入到另一个库的另一个用户 ./dimp SYSDBA/password@localhost:5236 FILE=/opt/backup/app_user.dmp FROMUSER=APP_USER TOUSER=NEW_APP

注意:dexp导出时,如果目标库和目标用户已经存在同名表,默认会报错或者覆盖,具体行为取决于参数。dimp有一个IGNORE=Y的参数,导入时忽略表已存在的错误,相当于把数据追加进去。做数据同步的时候纠结要不要加IGNORE,得先确认目标表里的数据是否冗余。

6. 常见问题排查与运维避坑

6.1 实例服务启动失败

症状:执行systemctl start DmServiceDMSERVER后,服务状态一直是activating,没过几秒变成failed。

排查思路逐步来:

  1. 看错误日志。达梦的日志文件在数据目录下的log子文件夹里,主要有dm_DMSERVER_YYYYMM.log(实例日志)、dm_DMSERVER_trace_YYYYMM.log(跟踪日志)。
  2. 最常见的坑是端口被占用。5236端口被别的进程占用时,实例启动会报“端口已被占用”。用ss -tlnp | grep 5236确认。
  3. 内存不足也可能导致启动失败,尤其是堆内存参数设置得太大,物理内存不够分配。去dm.ini里把MEMORY_POOL调小一点再试。
  4. 数据文件权限不对。如果用root启动过实例,数据文件的所有者可能变成了root,dmdba用户再启动就没有权限。执行chown -R dmdba:dinstall /dm8/data改回来。

6.2 Navicat连接成功但看不到表

Navicat连上达梦之后,有时发现左侧列表里没有显示任何表,或者只显示了极少数的表。

原因多半是当前连接的用户权限不够,或者选错了模式。达梦里每个用户默认看到的是自己同名模式下的表。如果你用SYSDBA连接,看到的系统表比较多;用APP_USER连接,看到的就是APP_USER模式下的表。

如果确实有表存在但没显示,在Navicat里检查一下连接属性里的“模式”选项,选择对应的模式刷新看看。还有一点,达梦的管理视图里表信息有延迟或缓存,刷新一下目录树一般能解决。

6.3 字符集不一致导致中文乱码

数据库字符集是UTF-8,客户端终端是GBK,SELECT出来的中文显示乱码,这种问题基本都出在客户端编码设置上。

Linux终端下,可以在disql登录前先设置环境变量:

export LANG=zh_CN.UTF-8 ./disql SYSDBA/password@localhost:5236

Windows下的DM管理工具则可以在“工具-选项”里找到字符集设置,改成和数据库一致。

如果数据本身已经乱码了(源头导入时编码就错了),那就不是改客户端设置能解决的。通常只能把数据导出,转码后重新导入。

6.4 达梦数据库备份还原的简单方案

备份这事越早规划越好,库小的时候觉得没必要,等数据量上来了再补功课,真要恢复的时候才难受。

达梦支持物理备份(备份数据文件)和逻辑备份(dexp)。最常用的物理备份工具是DMRMAN,它的命令行类似Oracle的RMAN。

# 全库备份 ./dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DMDB/dm.ini' FULL BACKUPSET '/dm8/backup/full_bak'"

备份集路径不要放在数据文件所在磁盘上,这是基本常识。恢复的话:

./dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/backup/full_bak'" ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/backup/full_bak'"

如果开了归档,还能做时间点恢复。不过DMRMAN的语法比较严格,路径写错一点就报错,建议在测试环境先演练两遍,别等出事再试。

6.5 性能排查的思路

达梦性能排查整体思路跟Oracle很像。首查等待事件、慢SQL、锁等待,再看实例参数。

查看当前正在执行的SQL和会话状态:

SELECT SESS_ID, SQL_TEXT, STATE, CREATE_TIME FROM V$SESSIONS WHERE STATE = 'ACTIVE';

查看锁等待:

SELECT * FROM V$LOCK WHERE BLOCKED = 1;

如果发现某个SQL跑得慢,最简单的办法是看它的执行计划:

EXPLAIN SELECT * FROM APP_USER.EMPLOYEE WHERE EMP_ID = 1001;

看执行计划里是否走了全表扫描,缺索引就建索引。达梦创建索引的语法和Oracle一样:

CREATE INDEX IDX_EMP_NAME ON APP_USER.EMPLOYEE(EMP_NAME);

索引不是越多越好,尤其是数据仓库大表,索引过多会导致加载数据变慢。在迁移和加载频繁的库里,我一般会先建表导数据,最后再统一建索引,这样整个导入过程会快很多。

7. 一点实操心得

达梦数据库上手门槛不高,尤其是对玩过Oracle的人,几乎可以无缝切换。但它的资料确实不如MySQL、PostgreSQL那么丰富,遇到问题经常要自己翻官方文档或者泡论坛,这点需要心理准备。

我在实际项目中感受最深的是三件事。第一,字符集和大小写敏感这类基础设置,一定要在初始化实例前就想清楚,后期改动的成本非常高,甚至要重建库。第二,迁移数据时,先小批量验证再全量执行,别一上来就灌几百万行,一旦编码不对或者字段映射错了,中途停也不是、继续也不是,非常被动。第三,工具链要趁早统一,团队里有人用Navicat、有人用DM管理工具、有人喜欢disql,这不是问题,但前提是大家对达梦的“模式”“表空间”“用户”这些概念的理解一致,否则出了问题各说各话,排查起来效率极低。

如果你正在做国产化替代或者新项目选型,建议先拿一套真实的业务数据在达梦上跑一遍全流程:安装、初始化、迁移、查询、备份、恢复。把这条链路走通了,心里就有底了。最后分享一个小技巧:达梦安装目录下的samples和doc文件夹里,藏着很多官方示例脚本和参数说明,遇到问题先翻这两个目录,往往比在网上搜一圈更直接有效。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 16:51:25

Bilibili-Evolved 夜间模式计划时段:时间调度机制与源码实现解析

Bilibili-Evolved 夜间模式计划时段&#xff1a;时间调度机制与源码实现解析 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved Bilibili-Evolved 是一款开源的哔哩哔哩增强脚本&#xff0c;其中…

作者头像 李华
网站建设 2026/9/19 16:51:19

第一性原理:技术架构决策与性能调优的底层思维

简介&#xff1a;《第一性原理思维模型与应用思考》是一份系统讲解第一性原理思维方法的 Word 文档&#xff0c;适合互联网从业者、产品经理、技术管理者&#xff0c;以及渴望突破传统思维框架的学习者。内容从量子力学与亚里士多德的原始定义出发&#xff0c;清晰对比演绎法与…

作者头像 李华
网站建设 2026/9/19 16:50:23

C语言循环结构调试与优化实战指南

简介&#xff1a;本资源是一份面向C语言初学者与编程入门学习者的循环结构专项训练题集&#xff0c;聚焦for、while、do...while三大循环语句的综合应用与典型场景实战。文档系统梳理10道经典编程题&#xff0c;涵盖奇数求和、阶乘计算、字符统计、闰年判断、乘法表打印、等腰三…

作者头像 李华
网站建设 2026/9/19 16:50:19

如何快速构建qmcdump解密工具:makefile与make install编译完整教程

如何快速构建qmcdump解密工具&#xff1a;makefile与make install编译完整教程 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdum…

作者头像 李华
网站建设 2026/9/19 16:43:59

微信小程序接入TDesign:解决NPM packages not found报错全指南

说实话&#xff0c;我第一次在小程序项目里接入 TDesign 时&#xff0c;对着控制台里这行NPM packages not found愣是折腾了一整晚。工具是最新版&#xff0c;npm install也显示装好了&#xff0c;node_modules里明明躺着tdesign-miniprogram的目录&#xff0c;可编译跑起来就是…

作者头像 李华