尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Navicat连接达梦数据库:数据字典自动生成与迁移实战

发布时间:2026/9/28 14:39:47

资讯中心
01
ARTICLE

Navicat连接达梦数据库:数据字典自动生成与迁移实战

Navicat连接达梦数据库:数据字典自动生成与迁移实战
上个月我在做一套业务系统的国产化数据库替换第一阶段不是写代码而是先把手头上百张表搞清楚。当时团队里有人习惯用命令行有人用达梦自带的图形工具但到了最后一统计大家不约而同又装回了Navicat。原因很简单多数据源管理、拖拽建模、文档导出这些活儿用Navicat确实顺手尤其是对接达梦数据库时它天然支持达梦方言配合数据字典生成简直是把交付文档这件事从两三天压缩到两小时。这篇内容不聊那些官网手册里已经写烂的界面说明而是把我在实际项目中踩过的坑、验证过的方案、以及一套可直接照抄的数据字典生成流程梳理出来。如果你是正在做国产数据库迁移、需要给甲方交付库表文档、或者刚把达梦接到Navicat还没摸清门道的工程师这篇应该能帮你省不少时间。1. 为什么是Navicat和达梦这对组合1.1 先搞懂达梦的“方言”很多人第一次连达梦数据库会以为它跟MySQL差不多。实际用下来达梦更像一个“可切换方言”的数据库。初始化实例时可以选择兼容模式最常见的是Oracle模式其次是MySQL模式还有PG模式。生产环境里我见到的大多数项目都跑在Oracle兼容模式下所以你会看到USER_TABLES、DBA_SEQUENCES这些Oracle风味的系统视图函数也支持NVL、DECODE这类写法。模式SCHEMA是达梦里特别容易绕晕的概念。在达梦中一个登录用户通常对应一个同名模式表、视图、序列这些对象归属在模式下面。用SYSDBA登录默认进的就是SYSDBA模式管理员创建一个业务账号TEST那TEST账号下的对象通常都在TEST模式里。这个设计跟MySQL的database不一样更接近Oracle的schema概念。Navicat连接达梦之后左侧对象栏默认展示当前用户可见的模式如果看不到某张表先别急着怀疑权限多半是模式下拉框没切对。1.2 什么场景下这套组合最值钱我的判断是至少有三种人会觉得Navicat加达梦很香。第一种是从Oracle或MySQL往达梦迁移的项目组成员。原来习惯用Navicat管Oracle和MySQL换到达梦之后不想再学一套新命令恰好Navicat Premium内置达梦连接类型迁移过程中可以用数据传输功能对比两张库的表结构也能在两个库之间快速搬数据。第二种是要频繁输出文档的人。交付时甲方要数据字典内部评审要表结构说明运维要库表清单。这些文档不能靠截图拼用Navicat看结构、用系统视图查元数据、再用脚本生成格式化文档能形成一套可复用的流程。第三种是日常查数和临时排查问题的人。生产故障时要快速看某张表的索引、某个存储过程的定义用Navicat图形界面点几下就能定位比敲一堆命令高效得多。2. 前期准备版本、驱动与连接参数2.1 Navicat版本选择和驱动准备先说版本。达梦支持不是所有Navicat都有的我用的是Navicat Premium 16.1之后的版本已经内置了达梦数据库连接类型如果是老版本或单独的MySQL版、Oracle版可能看不到达梦选项。建议直接上Navicat Premium 17安装后新建连接时数据库类型列表里能找到“达梦数据库”。这里有必要多说一句网上搜Navicat经常跳出各种“密钥”“破解版”的帖子我不建议碰。数据库管理工具天天要连生产环境装来路不明的破解包等于把密码和连接信息交给别人这是给自己埋雷。官方试用版或者免费的Premium Lite版本已经完全够用来评估连通性项目上需要长期使用就按正规渠道获取授权这个账算下来比什么都值。驱动方面Navicat内置了对达梦JDBC驱动的支持正常情况下不需要手工配驱动。但如果你的连接面板里找不到达梦类型就需要手动给Navicat添加达梦的JDBC驱动。驱动文件在达梦安装目录的drivers/jdbc下文件名通常是DmJdbcDriver18.jar在Navicat的“工具 - 选项 - 数据库 - 驱动”里注册即可。如果没有现成的安装目录去达梦官网技术社区下载对应版本的JDBC驱动包也行。2.2 连接参数与测试连接新建连接的填法很简单但每个字段背后都有讲究。主机填达梦服务器IP端口默认5236这是我见过最一致的默认端口基本不用改。用户名和密码对应达梦实例里创建的账号默认的SYSDBA账号密码是安装时设置的如果交给你的文档里没写通常就是SYSDBA/SYSDBA但这种情况强烈建议第一时间改掉生产库的密码风险太大。填完之后别急着点确定先在“高级”或者“连接属性”里找一下模式相关配置。Navicat连接达梦时会让你选一个默认模式比如TEST。这个模式决定了你打开对象列表后第一眼看到的是哪些表。如果源库的表分布在多个模式下连接属性里只写一个模式也没关系对象列表还是能通过模式下拉框切换。点“测试连接”时最常看到的报错就是开头那句[HY000]用户名或密码错误(-2501)。先别怀疑驱动绝大多数情况是账号密码本身的问题下面第5章我会专门讲排查路径。2.3 IDEA和DBeaver的替补打法看完这篇的人肯定不只有Navicat一个习惯我在团队里也常被问到IDEA和DBeaver怎么连达梦这里顺带补两句。IDEA里连达梦需要先在Database面板新建数据源驱动类选择默认的Dm driver或者手动加载DmJdbcDriver18.jar连接URL格式是jdbc:dm://IP:5236用户密码照填。IDEA对达梦的语法提示不如Navicat完整但跑查询和看结果集没问题。DBeaver也一样在新建连接向导里搜索“达梦”选DAMENG类型然后把达梦JDBC驱动挂到驱动管理器里。社区版DBeaver的驱动配置有时要手动指定驱动类dm.jdbc.driver.DmDriver填完URL和账号就能连。DBeaver的好处是开源免费适合临时环境Navicat的优势是开箱即用和数据传输、模型这些集成能力看团队习惯二选一即可。3. 连接之后的实操对象浏览、迁移与SQL调试3.1 对象浏览器里能做哪些事连上达梦后左侧的树形结构会展示模式、表、视图、存储过程、函数、序列这些节点。双击一张表能看到字段、索引、约束、外键和触发器等多个页签。这里提一个很多人不知道的技巧在表的设计页签里字段名旁边会列出类型、长度、是否为空、默认值和注释这些信息直接就是数据字典的底稿复制出来稍加整理就是一份字段清单。右键表还有一个“对象信息”功能可以一次性看到DDL定义包括建表语句、索引语句、注释信息。做结构评审时把DDL复制到文档里贴上比一张张截图规范得多。对于存储过程或函数双击就能看到源码排查逻辑问题的时候搜索起来很方便不用再去命令行里用disql导出。3.2 用数据传输做MySQL到达梦的迁移把MySQL库迁到达梦是热词里出现频率极高的事。Navicat的“数据传输”工具支持跨数据库类型导数据我拿它做过几次MySQL到达梦的迁移。操作路径是工具 - 数据传输源连接选MySQL目标连接选达梦勾选需要迁移的表执行向导即可。但直接一把梭大概率会出问题我吃过的亏集中在三个地方。一是类型映射。MySQL的datetime到达梦的DATE或TIMESTAMP会出现精度差异tinyint(1)经常映射成达梦的SMALLINT而不是布尔类型text映射成CLOB后个别查询语句要改。二是自增主键。MySQL的auto_increment到达梦需要用IDENTITY(1,1)来定义如果建表语句没有自动带上插入数据时就要手动补主键。三是编码。MySQL侧用utf8mb4达梦侧初始化字符集不是UTF-8的话中文注释和内容都会乱码建议迁移前先统一字符集。务实做法是先迁移一张小表试全流程确认类型映射和目标端DDL符合预期再放开全量迁移。别一上来就同步几百张表中途报错找断点很痛苦。3.3 SQL编写和调试的几个技巧达梦在Oracle兼容模式下写SQL时的习惯可以基本沿用Oracle的写法。比如字符串拼接用||空值判断用NVL分页可以用ROWNUM或者兼容的FETCH FIRST语法。如果在MySQL模式下limit、auto_increment这些又都成立。所以先搞清楚当前库是什么兼容模式比硬背语法重要。Navicat的查询编辑器连达梦时语法高亮和自动补全对常用语句是有效的。写完SQL先跑一次发现性能不行就用查询工具栏里的“解释”按钮看执行计划。达梦的执行计划展示方式跟Oracle比较像关注TABLE ACCESS方式和索引使用情况。我在项目里排查过一条报表SQL原来就是因为某个关联字段上缺索引全表扫描把查询拖到三秒补上索引后掉到几十毫秒。查询编辑器还有一个实用功能是把结果集导出为其他格式。查询数据字典时我会把结果集直接导出成CSV或者Excel再拿去做文档底稿这个环节是数据字典自动化的重要一环。4. 数据字典制作全流程4.1 先想清楚数据字典要交付什么数据字典不是简单把表结构导出来就行。一份能真正帮到开发和运维的字典至少要包含四部分库表清单、字段清单、索引与约束、业务说明。库表清单解决“系统有哪些表”的问题最好带表注释字段清单解决“这张表有哪些列、什么类型、能否为空、列注释是什么”的问题索引与约束解决“哪些字段有唯一性、哪些查询可以走索引”的问题业务说明则是靠注释和有经验的人补充的这部分最费时间但最值钱。交付形式上给甲方通常是Word或PDF给开发团队通常是Markdown或Excel。Navicat本身不直接导出Word数据字典但它能把底稿准备好剩下的格式转换用脚本或工具完成。下面两条路线我都跑通过按你的交付要求选。4.2 路线一Navicat原生功能拼底稿最快拿到基础结构的方法是右键点数据库或模式选择“导出数据库”勾选“仅结构”导出成SQL脚本。这个脚本里有全部建表语句、索引、约束和注释适合存档和评审。如果字典文档要用表格展示字段更推荐从系统视图查。在Oracle兼容模式下达梦提供了USER_TAB_COLUMNS、USER_TAB_COMMENTS、USER_COL_COMMENTS这组视图可以把表信息、表注释、字段信息、字段注释关联起来SELECT t.TABLE_NAME AS 表名, tc.COMMENTS AS 表注释, c.COLUMN_NAME AS 字段名, c.DATA_TYPE AS 数据类型, c.DATA_LENGTH AS 长度, CASE WHEN c.NULLABLE Y THEN 是 ELSE 否 END AS 是否为空, c.DATA_DEFAULT AS 默认值, cc.COMMENTS AS 字段注释 FROM USER_TABLES t LEFT JOIN USER_TAB_COMMENTS tc ON t.TABLE_NAME tc.TABLE_NAME LEFT JOIN USER_TAB_COLUMNS c ON t.TABLE_NAME c.TABLE_NAME LEFT JOIN USER_COL_COMMENTS cc ON c.TABLE_NAME cc.TABLE_NAME AND c.COLUMN_NAME cc.COLUMN_NAME WHERE t.TABLE_NAME YOUR_TABLE ORDER BY c.COLUMN_ID;把这个语句在Navicat查询窗口里跑出来结果集就是一张字段清单表。再配合Navicat的“复制为”功能可以把结果集粘贴到Excel里按列整理成字典文档。注释缺失的字段先回源库补COMMENT ON语句导出文档才有意义。4.3 路线二用SQL直接拼Markdown表格如果你跟我一样最终要产出Markdown数据字典可以跳过人工粘贴直接用SQL拼出管道格式的行。思路是让查询结果集的每个字段就是一行Markdown表格内容SELECT | || c.COLUMN_NAME || | || INITCAP(c.DATA_TYPE) || ( || c.DATA_LENGTH || ) | || CASE WHEN c.NULLABLE Y THEN 是 ELSE 否 END || | || NVL(cc.COMMENTS, ) || | FROM USER_TAB_COLUMNS c LEFT JOIN USER_COL_COMMENTS cc ON c.TABLE_NAME cc.TABLE_NAME AND c.COLUMN_NAME cc.COLUMN_NAME WHERE c.TABLE_NAME YOUR_TABLE ORDER BY c.COLUMN_ID;执行后把结果集复制出来前面手动补一行表头字段名、类型、是否为空、说明一份Markdown字典就成型了。表很多的时候可以写一个存储过程或者用一张驱动表循环生成把所有表拼接成一个大结果集一次性导出。我是在做代码审查时发现这个技巧的当时要出四十多张表的字典手动整理肯定要加班用SQL拼接后十分钟搞定。这个方案的好处是只要SQL不变以后每次库结构变更重新执行一遍就能刷新文档真正做到“字典跟着库走”。4.4 工程化方案Python脚本生成Excel字典如果交付要求是Excel且表数量达到几十上百张我推荐用Python脚本配合JDBC来生成。需要准备的组件是达梦JDBC驱动DmJdbcDriver18.jar、Python环境和jaydebeapi库。核心连接代码大致是import jaydebeapi import pandas as pd conn jaydebeapi.connect( dm.jdbc.driver.DmDriver, jdbc:dm://127.0.0.1:5236, [SYSDBA, 你的密码], /path/to/DmJdbcDriver18.jar ) sql SELECT t.TABLE_NAME, tc.COMMENTS AS TABLE_COMMENT, c.COLUMN_NAME, c.DATA_TYPE, c.DATA_LENGTH, c.NULLABLE, cc.COMMENTS AS COLUMN_COMMENT FROM USER_TABLES t LEFT JOIN USER_TAB_COMMENTS tc ON t.TABLE_NAME tc.TABLE_NAME LEFT JOIN USER_TAB_COLUMNS c ON t.TABLE_NAME c.TABLE_NAME LEFT JOIN USER_COL_COMMENTS cc ON c.TABLE_NAME cc.TABLE_NAME AND c.COLUMN_NAME cc.COLUMN_NAME ORDER BY t.TABLE_NAME, c.COLUMN_ID df pd.read_sql(sql, conn) df.to_excel(达梦数据字典.xlsx, indexFalse)注意Jaydebeapi找驱动类时会用DmJdbcDriver18.jar的类路径如果报找不到类多半是JDK版本和驱动版本不匹配换达梦官网对应Java版本的驱动包即可。生成Excel后再用openpyxl把注释里提取出的中文说明整理成单独的sheet交付时就很体面了。5. 常见问题与排查实录5.1 用户名或密码错误(-2501)的完整排查路径这个报错是Navicat连达梦时出现率最高的错误特征就是[HY000]用户名或密码错误(-2501)。我第一次遇到时以为是驱动没装好折腾了半天驱动结果只是密码大小写问题。排查顺序应该是先确认达梦实例账号密码是否真的正确。用达梦自带的disql命令行工具在服务器本机执行disql SYSDBA/密码IP:5236如果命令行能登录说明账号没问题问题在Navicat端配置。接着检查连接属性里是否填了正确的用户名和模式。达梦的密码是区分大小写的复制粘贴时很容易混入空格我见过有人密码前多了一个空格导致连不上的。还有一种情况是账号被锁定。达梦有登录失败次数限制连续输错几次后账号会被锁即使密码正确也报同样的错误。处理办法是用有管理员权限的账号登录执行ALTER USER SYSDBA ACCOUNT UNLOCK解锁同时修改密码ALTER USER SYSDBA IDENTIFIED BY 新密码然后回Navicat重新测连接。5.2 连接成功但看不到我要的表这个问题八成出在模式选择上。达梦的模式和用户绑定Navicat连接配置如果指定了一个模式左侧默认显示的是该模式的对象。如果业务表的实际归属模式跟连接设置不一致列表里自然看不到。排查方法很简单左侧对象树顶部有模式下拉框逐个切换看看目标表在哪个模式或者直接执行SELECT * FROM ALL_TABLES WHERE OWNER 目标模式通过SQL确认表是否真实存在。再不行就看权限非SYSDBA用户要对其他模式的表有访问权限才能看到元数据让DBA给账号授个SELECT权限即可。5.3 中文注释和内容乱码字典交付最怕乱码。乱码分两种情况一种是Navicat客户端显示乱码一种是迁移或导出到文件后乱码。客户端乱码通常是Navicat连接属性里的编码跟达梦实例字符集不一致把连接编码设成UTF-8或与实例一致的编码基本能解决。迁移过程中的乱码更麻烦根源一般在目标库建库时选了跟源库不同的字符集。MySQL源库是utf8mb4如果达梦实例用GBK初始化中文内容存储就会出现转换问题。稳妥做法是确认达梦实例字符集后再开始迁移异构数据库迁移前先做字符集一致性检查而不是等到交付文档里出现问号才回头查。5.4 顺手记录的其他坑除了Navicat本身中间件接达梦也是团队里经常踩坑的点。比如Nacos配置达梦数据源时driverClassName要改成dm.jdbc.driver.DmDriverURL要用jdbc:dm://前缀Dify这类开源应用默认没有达梦方言适配直接改配置往往起不来要有额外的SQL方言处理。这些我都遇到过一句话总结就是数据库客户端能通只是第一步应用程序接达梦必须确认连接池、驱动和方言三层都对得上。另外热词里还有“达梦切pgsql使用dbeaver”这个方向其实是在说PG模式部署。如果达梦实例初始化时选了PG兼容模式在DBeaver里用PostgreSQL连接类型能比较顺畅地访问但要注意PG模式和Oracle模式下系统视图并不完全一致SQL写法也是两套不要混用。6. 最后说点实在的折腾完这个项目我最大的体会是工具链不值钱值钱的是把工具链变成一套固定流程。现阶段我每次接到达梦库第一件事就是跑一遍第4章里的数据字典SQL让结构文档先落地然后才是建连接、导数据、调SQL。这样下来后面所有人拿到手的都是同一份格式的字典字段有没有注释、索引是否齐全一眼就能看出来。再分享一个小习惯我会把生成数据字典的SQL单独存成一个.sql文件下次换库只用改表名和模式名。如果后续还有精力可以考虑把Python脚本加上定时任务每次库结构变更后自动刷新Excel字典连手动跑SQL都省了。这套方法陪我扛过了好几个紧交付的项目希望也能帮你省下几个加班的晚上。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。