# 数据资产部署至达梦数据库环境相关问题排查指南
# 排查指南详细说明
通用前置检查:
- 确认版本:首先明确是
7.3 GA还是7.3.1版本,不同版本的补丁不通用。 - 确认达梦版本:确认达梦数据库版本(DM7/DM8),不同版本可能有不同的驱动要求。
- 查阅补丁列表:在寻求复杂解决方案前,强烈建议先检索是否有官方发布的补丁。您可以通过以下链接访问官方补丁列表:
- DAMP 7.3.1 补丁列表: DAMP7.3.1补丁列表 (opens new window)
- DAMP 7.3 GA 补丁列表: DAMP7.3GA补丁列表 (opens new window)
# 场景一:平台安装/启动问题
问题现象:
- 执行达梦脚本
dam-all.sql时在disql执行失败。 - 平台启动时报表不存在。
- 启动时报权限错误。
- 执行达梦脚本
排查步骤:
第一步:检查脚本执行。
- 操作:确认数据库脚本是否正确执行。
- 排查项:
- dam-all.sql执行时是否有语法错误。
- dam-bps.sql是否需要单独处理。
- disql执行脚本时是否需要输入参数。
- 解决方案:
- 脚本有问题时,联系技术支持获取修改后的
dam-all.sql。 - dam-bps不执行,参考文档通过导入par包方式导入流程。
- 使用disql执行时,确保使用正确的用户登录。
- 脚本有问题时,联系技术支持获取修改后的
第二步:检查表空间和用户。
操作:确认数据库表空间和用户创建正确。
排查项:
- 表空间是否已创建且有足够空间。
- 数据库用户是否有DBA权限或足够权限。
- 用户默认表空间是否正确。
解决方案:
-- 创建表空间 CREATE TABLESPACE DAMP DATAFILE 'DAMP.DBF' SIZE 1024M; -- 创建用户并指定表空间 CREATE USER DAMP IDENTIFIED BY password DEFAULT TABLESPACE DAMP; -- 授予权限 GRANT DBA TO DAMP; GRANT RESOURCE TO DAMP; GRANT CONNECT TO DAMP;
第三步:检查字符集。
操作:确认数据库字符集为UTF-8。
排查项:达梦数据库字符集要求一般为UTF-8。
解决方案:
-- 查询字符集 SELECT * FROM V$NLS_PARAMETERS; -- 创建数据库时指定字符集 -- 安装达梦时选择UTF-8字符集
# 场景二:数据源连接/配置问题
问题现象:
- 在DAMP中添加达梦数据源时连接测试失败。
- 保存数据源后无法正常使用。
- 数据源连接报错“No suitable driver”。
排查步骤:
第一步:排除产品BUG。
- 操作:在官方补丁列表中,搜索关键词
达梦、数据源。 - 相关补丁:
- DAMP 7.3.1:
DAMP_7.3.1_SERVER_20250516_P1(解决密码超长问题) - DAMP 7.3.1:
DAMP_7.3.1_SERVER_20250610_P1(解决海量数据库适配)
- DAMP 7.3.1:
- 解决方案:若找到描述匹配的补丁,则申请并应用。
- 操作:在官方补丁列表中,搜索关键词
第二步:检查JDBC驱动。
- 操作:确认使用了正确的达梦JDBC驱动。
- 排查项:
- DAMP 7.3内置了达梦8驱动(
DmJdbcDriver18.jar)。 - 如果连接DM7,可能需要替换驱动。
- 驱动文件是否完整,是否存在多个版本冲突。
- DAMP 7.3内置了达梦8驱动(
- 解决方案:
- 从达梦安装目录的
drivers目录下获取匹配的驱动。 - 将驱动放入DAMP服务的
lib目录,移除旧版本。 - 重启服务后测试。
- 从达梦安装目录的
第三步:检查JDBC URL格式。
操作:核对JDBC URL是否正确。
正确格式:
jdbc:dm://IP:端口/数据库名?参数1=值1&参数2=值2常用参数:
columnNameUpperCase=false:解决大小写敏感问题schema=用户名:指定默认SchemacharacterEncoding=UTF-8:指定字符编码loginTimeout=30:登录超时时间
第四步:测试网络连通性。
- 操作:测试DAMP服务器到数据库服务器的网络。
- 命令:
telnet 数据库IP 5236 - 解决方案:确保防火墙开放5236端口。
# 场景三:功能模块使用异常
问题现象:
- 资产编目:提交失败,找不到表。
- 标准管理:标准导入报错,代码map取值失败。
- 模型开发:点击数据源展开无子项,无法逆向生成模型。
- 数据服务:服务测试报错,TEXT字段问题。
- 系统管理:导出excel内容为空。
排查步骤:
子场景3.1:资产编目问题
- 现象:基于元数据编目无法提交。
- 排查:大小写敏感导致表名不匹配。
- 解决方案:
- JDBC URL添加
columnNameUpperCase=false - 统一使用大写表名
- JDBC URL添加
子场景3.2:标准管理问题
- 现象:标准导入报错,代码标准导入失败。
- 排查:达梦大小写敏感导致。
- 解决方案:
- 申请补丁
DAMP_7.3.1_SERVER_20240731_P2 - JDBC URL添加
columnNameUpperCase=false
- 申请补丁
子场景3.3:模型开发问题
现象:点击项目数据源展开无子项。
排查:
dm_db_vendor表中配置错误。解决方案:
-- 修改数据库供应商配置 UPDATE dm_db_vendor SET name = 'dm' WHERE name = 'dameng8'; UPDATE dm_db_type SET name = 'dm' WHERE name = 'dameng'; -- 修改后重启服务
子场景3.4:数据服务问题
- 现象:TEXT字段测试报错。
- 解决方案:
- 申请补丁
DAMP_7.3.1_DATAENGINE_20250730_P1 - 临时方案:SQL中CAST为VARCHAR
- 申请补丁
子场景3.5:系统管理问题
- 现象:导出的excel内容是空的。
- 排查:达梦驱动问题。
- 解决方案:
- 更换达梦数据库驱动
- JDBC URL添加必要参数
# 场景四:SQL执行/语法错误
问题现象:
- 执行SQL报“表或视图不存在”。
- 报“字段不在查询表中”。
- 报语法错误,如“near 'xxx'”。
- 分页查询报错或不生效。
排查步骤:
第一步:在disql中验证SQL。
- 操作:将SQL复制到disql中执行。
- 目的:确认是SQL本身问题还是DAMP处理问题。
第二步:检查分页语法。
解决方案:
-- 达梦分页语法 -- 方式1:LIMIT OFFSET(推荐) SELECT * FROM table LIMIT 10 OFFSET 20; -- 方式2:ROWNUM SELECT * FROM ( SELECT t.*, ROWNUM rn FROM ( SELECT * FROM table ORDER BY id ) t WHERE ROWNUM <= 30 ) WHERE rn > 20;
第三步:检查日期函数。
解决方案:
-- MySQL风格 vs 达梦风格 -- CURDATE() -> CURRENT_DATE SELECT CURRENT_DATE FROM DUAL; -- NOW() -> SYSDATE SELECT SYSDATE FROM DUAL; -- DATE_FORMAT() -> TO_CHAR() SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;
第四步:检查字符串函数。
解决方案:
-- CONCAT支持 SELECT CONCAT('A', 'B') FROM DUAL; -- 正则表达式使用REGEXP_LIKE SELECT * FROM table WHERE REGEXP_LIKE(column, '^[0-9]+$');
# 场景五:大小写敏感相关问题
问题现象:
- DAMP各功能模块频繁报“表或视图不存在”。
- 明明表存在,但查询不到。
- 导入数据时匹配失败。
排查步骤:
第一步:确认达梦大小写敏感配置。
- 操作:查询达梦数据库配置。
SELECT * FROM V$DM_INI WHERE PARA_NAME = 'CASE_SENSITIVE'; -- 1: 大小写敏感 -- 0: 大小写不敏感第二步:针对大小写敏感模式的解决方案。
方案A:修改JDBC URL(推荐)
在所有达梦数据源的JDBC URL中添加参数:
jdbc:dm://127.0.0.1:5236/数据库名?columnNameUpperCase=false影响范围:所有通过该数据源的查询。
方案B:SQL中使用双引号
在SQL中用小写表名/字段名时,必须加双引号:
SELECT "columnName" FROM "tableName" WHERE "columnName" = 'value';
方案C:统一使用大写
- 创建表时统一使用大写表名和字段名。
- 所有SQL中使用大写。
第三步:针对大小写不敏感模式的说明。
- 无需特殊处理。
- 但建议统一使用大写或小写,保持一致性。
# 场景六:数据迁移/初始化问题
问题现象:
- 从其他数据库迁移到达梦后功能异常。
- 重新初始化数据库后平台启动失败。
- 数据导入导出乱码。
排查步骤:
第一步:检查字符集。
- 操作:确认数据库字符集为UTF-8。
- 排查项:字符集不一致可能导致乱码和排序问题。
- 解决方案:
- 创建数据库时选择UTF-8字符集。
- 已创建的数据库无法修改字符集,需重建。
第二步:检查表空间。
操作:确认表空间创建正确且有足够空间。
解决方案:
-- 查看表空间使用情况 SELECT tablespace_name, total_space/1024/1024 total_mb, free_space/1024/1024 free_mb FROM ( SELECT tablespace_name, SUM(bytes) total_space, SUM(DECODE(autoextensible, 'YES', maxbytes, bytes)) max_space, SUM(bytes - blocks*8192) free_space FROM dba_data_files GROUP BY tablespace_name ); -- 扩展表空间 ALTER TABLESPACE DAMP ADD DATAFILE 'DAMP02.DBF' SIZE 1024M;
第三步:检查用户权限。
操作:确认DAMP数据库用户有足够权限。
解决方案:
-- 授予必要权限 GRANT CONNECT, RESOURCE TO DAMP_USER; GRANT CREATE TABLE TO DAMP_USER; GRANT CREATE VIEW TO DAMP_USER; GRANT CREATE PROCEDURE TO DAMP_USER; GRANT CREATE SEQUENCE TO DAMP_USER; GRANT CREATE TRIGGER TO DAMP_USER;
第四步:数据迁移注意事项。
- 从Oracle迁移:
- 注意
rownum、sysdate等函数的差异。 - 注意
VARCHAR2与VARCHAR的差异。
- 注意
- 从MySQL迁移:
- 注意
LIMIT语法的兼容性。 - 注意
AUTO_INCREMENT与IDENTITY的差异。
- 注意
- 从SQL Server迁移:
- 注意
TOP语法的兼容性。 - 注意
GETDATE()与SYSDATE的差异。
- 注意
- 从Oracle迁移:
← 数据资产编目问题 元数据采集与同步问题 →