
本文先介绍 DMDIS 的产品定位、主要作用和典型使用场景再基于已完成的 DMDIS V5.2.0.1 实验环境说明安装准备、服务验证、数据源配置、数据清洗、增量同步、作业调度和结果核验。1. DMDIS 概述1.1 DMDIS定义DMDIS 是达梦提供的专业实时数据集成软件集数据迁移、数据同步、清洗转换和数据整合于一体。它通过可视化方式连接数据库、文件及其他数据源将数据抽取、传输、处理和装载组织成可执行的转换与作业。1.2 DMDIS 作用•数据迁移将源系统中的存量数据批量迁移到目标系统。•数据同步按全量、增量或周期方式保持源端与目标端数据一致。•数据清洗处理空值、格式不统一、字段映射和编码转换等问题。•数据整合汇总不同来源的数据为数据仓库、数据中心和报表系统提供统一数据。•作业调度按照时间或周期自动执行转换、脚本和统计任务并记录运行状态。1.3 常见使用场景DMDIS 常用于数据库升级替代、异构数据同步、数据仓库或数据中心建设、周期性报表数据准备以及需要集中编排和监控的数据处理任务。单机模式适合学习和小型项目规模更大或可靠性要求更高时可根据实际产品版本规划集群部署。1.4 本文实践内容本次示例以 DM8 的 HOTEL.PERSON_INFO 为源表将数据清洗后写入 HOTEL.旅客信息一览表并生成总人数、男性人数和女性人数统计。转换链覆盖增量读取、姓名繁简转换、年龄计算、联系方式空值处理、性别标准化、增量装载和周期调度。2. 本次实践架构与实现结果DMDIS 用于连接不同数据源并通过可视化转换和作业完成数据抽取、清洗、映射、装载与调度。本次采用单机部署数据流为“DM8 源表 → 增量读取 → 清洗与列转换 → 增量装载 → 统计作业”。项目本次配置验收标准DMDISV5.2.0.1 单机模式管理端口 8800Web 页面可访问服务进程正常源端192.168.80.21:5236HOTEL.PERSON_INFO源表可读取增量字段可识别目标端DM8 目标库HOTEL.旅客信息一览表姓名、年龄、联系方式、性别清洗正确调度作业绑定 perMinute 周期调度执行历史连续成功验证后可停用统计HOTEL.旅客信息统计表总人数 4、男性 2、女性 23. 实验环境与安装准备3.1 账号、目录与安装包安装前先确认 CPU 架构、安装介质和校验文件再准备 dinstall 用户组、dmdis 用户及独立软件目录。安装、运行和后续维护尽量统一使用 dmdis避免目录属主混乱。lscpu | grep -E ^CPU\(s\)|^Architecture|^Model namegetent group dinstall# root 执行useradd -g dinstall -m -d /home/dmdis -s /bin/bash dmdispasswd dmdismkdir -p /home/dmdis/software /home/dmdis/tmpchown -R dmdis:dinstall /home/dmdischmod 755 /home/dmdis /home/dmdis/software# 将安装包及校验文件放入 /home/dmdis/software 后核验cd /home/dmdis/softwaresha256sum dmdis_rev226131_x86_linux_64_20260703.bin图 1 CPU、安装包、用户组、dmdis 用户和目录准备记录3.2 执行单机安装切换到 dmdis 用户以字符方式启动安装程序。本次选择单机模式使用随安装包提供的运行环境并将管理端口设置为 8800。安装结束后应记录实际生成的版本目录后续启停脚本以该目录为准。su - dmdiscd /home/dmdis/softwarechmod x dmdis_rev226131_x86_linux_64_20260703.bin./dmdis_rev226131_x86_linux_64_20260703.bin -i# 本次实际版本目录/home/dmdis/dmdis5/20260804094943527000安装向导中的目录、端口和元数据库选项应以当前介质与现场规划为准不要在旧版本目录上直接覆盖安装。3.3 启动与端口验证服务启动后从进程、监听端口和 HTTP 响应三个角度验证。HTTP 302 跳转到登录页说明 Web 服务已正常响应不属于错误。ps -ef | grep /home/dmdis/dmdis5/20260804094943527000 | grep -v grepss -lntp | grep :8800 curl -I http://127.0.0.1:8800/# 维护时使用实际安装目录下的脚本/home/dmdis/dmdis5/20260804094943527000/standalone/standalone_service_stop.sh图 2 DMDIS 服务进程及 8800 端口 HTTP 响应验证4. 源端与目标端数据准备4.1 准备基础测试表先用结构简单的部门表验证源库、目标库的连通性和装载方向。源端写入 10、20、30 三条部门数据目标端保持空表便于观察首次装载结果。图 3 源端 DMDIS_DEPT_DEMO 测试数据图 4 源端数据与目标端空表结构检查4.2 配置 DM8 数据源在“数据源”中新增 DM8 连接填写服务器地址、端口、用户名和密码。测试连接成功后展开模式和表确认 DMDIS 能读取列定义。源端连接命名为 DM_SRC_DRSSRC目标端另建独立连接避免转换中选错方向。图 5 DM_SRC_DRSSRC 数据源及表字段读取结果5. 工程与增量转换配置5.1 创建工程创建工程 DMDIS_DM_SYNC用于集中保存数据源、函数、转换、作业和调度。工程描述写明同步方向便于后续检查和交接。图 6 DMDIS_DM_SYNC 工程及同步方向说明5.2 增量读取源表在转换中加入增量表组件选择源端 PERSON_INFO。除业务字段外保留 CDC_ID 和 CDC_OPT用于标识增量顺序和变更类型。首次运行前应确认源表主键、增量影子表或变更捕获状态正常。图 7 增量表组件的 CDC 字段和业务字段字段用途处理方式CDC_ID增量记录顺序只用于增量控制不写入目标业务列CDC_OPT变更操作类型由增量组件传递给装载端ID身份证号/业务标识映射为“身份证号”NAME姓名繁体转简体后写入“姓名”AGE原始年龄作为函数兜底参数输出计算后的“年龄”PHONE联系方式空值统一处理GENDER性别英文值转换为男/女5.3 自定义身份证年龄函数创建 inferAgeFromID 函数身份证号满足 18 位规则时从出生年份计算年龄格式不满足时返回原 AGE。保存函数后先执行解析检查再在列转换中调用。function inferAgeFromID(id, fallbackAge) {if (id null) return fallbackAge;var text String(id);if (text.length ! 18) return fallbackAge;var birthYear parseInt(text.substring(6, 10));if (isNaN(birthYear)) return fallbackAge;return new Date().getFullYear() - birthYear;}图 8 inferAgeFromID 自定义函数解析成功5.4 数据清洗规则清洗组件处理三类数据姓名繁体转简体联系方式为空时统一保留为空或替换为约定值性别从 female/male 转为女/男。字符串替换按顺序执行因此必须先处理 female再处理 male。图 9 姓名、联系方式和性别清洗规则风险提示如果先将 male 替换为“男”female 会被部分匹配为“fe男”。更稳妥的做法是先处理 female或改用完整值匹配。5.5 列转换与目标映射列转换中将英文列名映射为中文列名。年龄列使用表达式 inferAgeFromID(身份证号, 年龄)输出类型设为 Integer。CDC_ID、CDC_OPT 继续传给增量装载组件但不映射到目标业务字段。图 10 列转换中的字段类型、中文名和年龄表达式6. 作业与周期调度6.1 组装作业链作业“作业-旅客信息更新与统计”由三个步骤组成先执行 PERSON_INFO 清洗转换再设置 guestCountTotal、guestCountMale、guestCountFemale 三个变量最后执行 SQL 脚本刷新统计表。步骤之间使用成功连线任一步失败时停止后续统计。图 11 转换、变量设置和 SQL 脚本组成的作业链TRUNCATE TABLE HOTEL.旅客信息统计表;INSERT INTO HOTEL.旅客信息统计表(统计项目, 统计值)VALUES (1、总人数, ${guestCountTotal});INSERT INTO HOTEL.旅客信息统计表(统计项目, 统计值)VALUES (2、男性人数, ${guestCountMale});INSERT INTO HOTEL.旅客信息统计表(统计项目, 统计值)VALUES (3、女性人数, ${guestCountFemale});6.2 创建并绑定调度创建 perMinute 周期调度用于快速观察增量同步。随后在作业调度页将该调度绑定到“作业-旅客信息更新与统计”保存并启用。图 12 perMinute 周期调度配置图 13 作业与 perMinute 调度绑定风险提示每分钟调度仅用于实验验证。确认功能后应禁用调度避免持续产生无意义的执行记录和日志。7. 运行监控与结果验证7.1 手工启动和执行历史先手工运行作业并观察当前状态确认转换和统计步骤均成功再启用周期调度。运行历史中应连续出现成功记录失败时先打开该次日志定位到具体步骤。图 14 作业进入运行状态图 15 每分钟作业执行历史连续成功7.2 数据库侧核验最终验收不能只看 DMDIS 页面“成功”还要回到数据库比对源表、目标表和统计表。源端 4 条记录经过转换后目标姓名为简体年龄由身份证年份重新计算空联系方式保持一致性别为男/女统计表结果为 4、2、2。SELECT ID, NAME, AGE, NVL(PHONE, NULL) AS PHONE, GENDERFROM HOTEL.PERSON_INFO ORDER BY ID;SELECT 身份证号, 姓名, 年龄, NVL(联系方式, NULL) AS 联系方式, 性别FROM HOTEL.旅客信息一览表 ORDER BY 身份证号;SELECT 统计项目, 统计值FROM HOTEL.旅客信息统计表 ORDER BY 统计项目;图 16 源表、清洗目标表和统计表最终一致性验证8. 典型问题处理8.1 性别出现“fe男”图 17 错误替换顺序导致 female 被转换为 fe男环节处理记录现象女性数据写入目标表后变为“fe男”女性统计为 0。原因先执行 male→男female 中包含 male发生部分字符串替换。验证直接查询目标表和统计表确认异常集中在 female 数据。解决将 female→女 放在 male→男 之前或使用完整值匹配保存后重新触发真实增量。风险仅在源表把 female 更新为相同的 female 不会产生新的 CDC 差异修正规则后可能看不到重跑效果。复盘字符串规则应检查包含关系、大小写和空值修改规则后必须设计可识别的增量测试。8.2 年龄表达式提示未定义变量环节处理记录现象列转换保存或运行时提示“未定义的变量年龄”。原因表达式引用了当前步骤中不存在的中文名或 AGE 在前一步被删除。验证从上游组件重新加载列信息检查 AGE/年龄是否仍在输入列中。解决保留 AGE 作为中间列并在列转换中使用 inferAgeFromID(身份证号, 年龄)输出类型设为 Integer。风险直接删除原 AGE 会失去身份证号异常时的兜底值。复盘自定义函数的参数名、输入列名和目标列名要分层检查不混用源字段与中文别名。9. 参考资料达梦在线服务平台《达梦数据集成软件DMDIS》网址达梦数据集成软件 | 达梦数据库达梦技术社区《搭建 DMDIS并完成数据迁移》网址搭建DMDIS,并完成数据迁移 | 达梦技术社区THE END达梦社区地址https://eco.dameng.com