转 达梦的版本迷宫 和 达梦TPCC 测试和 达梦TPCH 测试案例
###sample 1
达梦的版本迷宫:你以为装的是同一个数据库,其实每次都不一样
一个 JDBC 驱动名字的变更,揭开的是国产数据库版本管理的"薛定谔"困局。
一、从一个驱动名字说起
最近在排查一个达梦数据库的兼容性问题,翻遍日志、查遍配置,最后发现问题居然出在一个 JDBC 驱动上——不是驱动有 Bug,是驱动改了名。
如果你在项目里用的是 DmJdbcDriver18.jar,突然某天升级之后找不着了,别慌,它改名叫 DmJdbcDriver8.jar 了。对,你没看错,就是把 18 变成了 8,去掉了前面那个 1。
这就像你叫了十几年的"张三丰",某天街道办通知你改叫"张三"——因为名字太长了,精简一下。
驱动命名的前世今生
2024年第三季度之前,达梦的 JDBC 驱动长这样:
| 旧命名 | 适配 JDK |
|---|---|
| DmJdbcDriver16.jar | JDK 1.6 |
| DmJdbcDriver17.jar | JDK 1.7 |
| DmJdbcDriver18.jar | JDK 1.8 |
2024年第三季度及之后,画风突变:
| 新命名 | 适配 JDK | 备注 |
|---|---|---|
| DmJdbcDriver6.jar | JDK 1.6 | 原 16 改名 |
| DmJdbcDriver7.jar | JDK 1.7 | 原 17 改名 |
| DmJdbcDriver8.jar | JDK 1.8 | 原 18 改名,已验证 JDK 8/11/17 |
| DmJdbcDriver11.jar | JDK 11+ | 新增,部分实现 JDBC 4.3,已验证 JDK 11/17/21 |
注意看,DmJdbcDriver8 的说明从"对应 JDK 1.8 及以上"变成了"实现 JDBC 4.2 标准接口,已在 JDK8、JDK11、JDK17 上验证"。措辞变了,内涵也变了——以前是"能用",现在是"验证过"。
这事儿说明什么?光看 jar 包名字是没用的,你得看 readme。然而更扎心的是,早期的版本连 readme 都没有。
二、同一个"达梦8",不同的灵魂
这才是问题的核心:驱动版本和数据库版本是两码事。
你用的是 2019 年的达梦数据库,配上 2024 年新驱动,可能啥事没有;你用的是 2026 年最新的达梦数据库,配上 2019 年的旧驱动,对不起,该报的错一个都不会少。
换句话说:就算换成最新版本的达梦数据库,用旧驱动也发现不了新问题。当然了,新数据库会给你贡献各种崭新的 Bug,那又是另一个故事了。
我来列举几个我们实际遇到的版本:
| 环境 | 数据库版本 | 驱动情况 | 备注 |
|---|---|---|---|
| 最低版本(仅安装) | V8.1.0.147-Build(2019.03.27) | 无 JDBC readme | 2019 年发行版,文档极其精简 |
| 中间版本(10.110.80.116) | 1-1-190-21.03.26-137190-ENT Pack2 | 旧命名(DmJdbcDriver18) | readme 三行完事 |
| 华泰版本(最新) | DM Database Server 64 V8, DB Version: 0x7000d | 新命名(DmJdbcDriver8/11) | readme 终于详细了 |
看到了吗?同样是"达梦8",同样叫 V8,底层差异天翻地覆。从 0x7000a 到 0x7000d,光这个 DB Version 编号就跳了好几代。
三、达梦版本发布——薛定谔的发版周期
达梦数据库的版本发布频率,用官方的话说叫"小版本持续更新,大版本按需迭代"。用大白话翻译就是:想发就发,没有固定周期。
根据达梦数据(688692)在投资者关系平台上的官方说法,更新分两类:
- 小版本更新:常规维护,合同期内免费。什么时候发?随缘。
- 大版本迭代:架构级变更,需要另行购买。什么时候发?更随缘。
据社区经验观察,达梦的发版节奏大致是季度级别,但并不严格。有时候一个季度两个小版本,有时候半年没动静。这种"薛定谔的发布周期"对用户来说意味着——你永远不知道下一个版本会在什么时候冒出来,也不知道它会带来惊喜还是惊吓。
达梦 DM8 主要版本演进一览
| 版本 | 大致时间 | DB Version | 重大变更 | 升级方式 |
|---|---|---|---|---|
| V8.1.0.147 | 2019年3月 | 0x7000a | DM8 首个正式发行版;DSC 分布式集群架构;DDFS 分布式文件系统;AWR 报表工具 | 停库替换 Bin |
| V8.1.1.x | 2020年 | 0x7000a | DSC 集群稳定性增强;DDFS 高并发死锁修复;归档性能优化 | 停库替换 Bin |
| V8.1.2.38 | 2021年8月 | 0x7000b | DSC Plus 远程高可用镜像;多租户隔离机制;K8s Operator 云原生部署;在线弹性伸缩 | 支持在线扩缩 |
| V8.1.3.x | 2022年 | 0x7000c | 行列融合 2.0 HTAP 提升;向量化引擎加速 BI 查询;安全版功能(B1 强制访问控制) | 可滚动升级 |
| V8.1.3.100+ | 2023年4月 | 0x7000c | 安全版全面升级:多因子认证、细粒度审计、数据脱敏;KMIP 密钥管理;金融/政务合规 | 在线补丁/离线 |
| V8.1.3.x (2024Q3) | 2024年第三季度 | 0x7000c | JDBC 驱动重命名(DmJdbcDriver18→8);新增 DmJdbcDriver11 适配 JDK11+;JDBC readme 文档完善 | 停库替换 Bin |
| V8.1.3.26 | 2025年初 | 0x7000d | JSON 原生数据类型;GIS 空间索引;跨 AZ/跨 Region 同步复制;AIOps 自动化运维 | 滚动更新 |
| V8 (2026版) | 2026年1月 | 0x7000d | 最新发行版;DB Version 升至 0x7000d;Msg Version | 滚动更新 |
⚠️ 上表信息综合自社区及文档,达梦官方并未集中公布完整的 Release Notes,部分版本信息存在争议,仅供参考。
四、查版本这件事本身,都变了三回
说到版本兼容性的噩梦,连查个数据库版本号的 SQL 都能变,你敢信?
- DM7 时期:
SELECT * FROM V$VERSION;一把梭,版本号、编译日期、类型全给你,清清楚楚。 - DM8 早期:
V$VERSION只显示DM Database Server 64 V8,具体版本号没了。你得再用SELECT ID_CODE();才能查到详细构建版本。两步操作,缺一不可。 - DM8 最新版:又多了
SELECT BUILD_VERSION FROM V$INSTANCE;,返回类似1-3-100-2024.01.15-215128-20081-ENT这样的字符串。字段含义呢?官方文档没有明确说明,你只能猜。
从一行 SQL 到两行 SQL 再到需要"解密"一串神秘代码,查询版本这件事的复杂度跟达梦的版本号一样——只增不减。
而且 ID_CODE() 的输出格式也在变。早期的输出是 1-1-190-21.03.26-137190-ENT,最新版变成了 03134284404-20260122-311071-20164 这种风格。你看,连版本号的长相都不一样了,更别提兼容性。
五、给达梦用户的生存建议
-
永远记住你的精确版本号。不是"达梦8",而是
V8.1.3.100-Build(2024.01.15)-ENT这种完整信息。查版本的时候,V$VERSION和ID_CODE()都要跑一遍。 -
驱动版本和数据库版本要配套。新数据库配新驱动,旧数据库用旧驱动。不要混搭,混搭出 Bug 自己哭。
-
升级前全量备份,升级后全面测试。达梦的版本之间没有向后兼容的承诺,小版本升级也可能引入行为变更。
CHECK_SVR_VERSION参数了解一下,关键时刻能救命。 -
关注 JDBC 驱动的 readme 文件。2024 年第三季度之后的驱动才有详细说明,早期的驱动 readme 只有几行字。如果你的驱动目录里没有 readme,赶紧去官网下载最新的。
-
建立内部版本兼容性矩阵。把每个项目用到的达梦版本、驱动版本、JDK 版本记录下来,形成对照表。下次出问题,三秒钟定位是哪个环节的锅。
达梦的版本迷宫,每一个转弯都可能是一个坑。但至少现在,你知道坑在哪里了。

浙公网安备 33010602011771号