达梦数据库DM8全面教程:从入门到实战问题解决

2024-06-21 李腾 236 次阅读 0 次点赞
本文全面介绍武汉达梦公司开发的国产数据库DM8,重点分享在实际项目中使用达梦数据库的实战经验。内容包括达梦官方资源导航、CentOS安装教程、Java连接示例、可重复执行的表创建和字段添加SQL脚本,以及TEXT字段超长报错、模式名无效、表视图名错误、密码记忆和实例创建等5个典型问题的解决方案,为Oracle项目国产化改造提供实用参考。

达梦数据库是国内武汉达梦数据库股份有限公司开发的一款完全独立自主的国产数据库,其SQL语句语句几乎跟Oracle完全兼容,非常便于国内基于Oracle数据库的项目进行国产化改造,推进国内信创工作。本文介绍了达梦数据库相关的网站、本人在使用达梦数据库过程中遇到的问题、常用的创建表及给数据库添加字段的SQL语句以及使用达梦数据库过程中遇到的常见问题,以供适配达梦数据库相关人员参考。

常用网站

官网:https://www.dameng.com/

下载:https://eco.dameng.com/download/

数据库管理系统DM8:https://eco.dameng.com/info/products/dm8

在线服务平台:https://eco.dameng.com/

技术文档:https://eco.dameng.com/document/dm/zh-cn/start/index.html

应用开发指南:https://eco.dameng.com/document/dm/zh-cn/app-dev/

社区问答:https://eco.dameng.com/community/question/

达梦仓库:https://central.sonatype.com/search?q=com.dameng

注册服务:注册服务 ~| 达梦技术文档 (dameng.com)

启动、停止数据库:启动、停止数据库 ~| 达梦技术文档 (dameng.com)

使用教程

CentOS安装达梦数据库

Java连接达梦数据库示例

Windows卸载达梦客户端找不到文件javaw.exe的解决方案

客户端

DM管理工具

常用命令

1、创建表。(可以重复执行)

DECLARE
  num NUMBER;
BEGIN
  SELECT COUNT(1) INTO num from user_tab_columns where table_name = upper('GIS_ASSETS_CONFIG');
  IF num = 0 THEN
    EXECUTE IMMEDIATE 'CREATE TABLE GIS_ASSETS_CONFIG
    (
      ID          NUMBER(20,0) NOT NULL PRIMARY KEY,
      TENANT_ID   VARCHAR2(12),
      DEPT_ID     NUMBER(20,0),
      DEPT_CODE   VARCHAR2(100),
      DEPT_NAME   VARCHAR2(45),
      MATERIAL    VARCHAR2(100),
      DIAMETER    VARCHAR2(100),
      PRICE       NUMBER(12,7),
      CREATE_USER NUMBER(20,0),
      UPDATE_USER NUMBER(20,0),
      CREATE_TIME DATE,
      UPDATE_TIME DATE,
      IS_DELETED  NUMBER DEFAULT 0
    )';
    EXECUTE IMMEDIATE 'COMMENT ON TABLE GIS_ASSETS_CONFIG IS ''资产报表配置''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.ID IS ''主键''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.TENANT_ID IS ''租户ID''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.DEPT_ID IS ''机构ID''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.DEPT_CODE IS ''机构编码''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.DEPT_NAME IS ''机构名称''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.MATERIAL IS ''材质''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.DIAMETER IS ''管径''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.PRICE IS ''价格''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.CREATE_USER IS ''创建用户''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.UPDATE_USER IS ''更新用户''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.CREATE_TIME IS ''创建时间''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.UPDATE_TIME IS ''更新时间''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN GIS_ASSETS_CONFIG.IS_DELETED IS ''是否删除''';
  END IF;
END;

2、给数据表添加字段。(可以重复执行)

DECLARE
  num NUMBER;
BEGIN
  SELECT COUNT(1) INTO num from user_tab_columns where table_name = upper('GIS_LAYER_DATA') and column_name = upper('DISPLAY_FIELD');
  IF num = 0 THEN
    execute immediate 'ALTER TABLE IES_POMP_MASTER.GIS_LAYER_DATA ADD (DISPLAY_FIELD VARCHAR2(255))'; 
    execute immediate 'COMMENT ON COLUMN IES_POMP_MASTER.GIS_LAYER_DATA.DISPLAY_FIELD IS ''展示字段''';
  execute immediate 'UPDATE IES_POMP_MASTER.GIS_LAYER_DATA SET DISPLAY_FIELD = '''''; 
  END IF;
END;

常见问题

1、TEXT或CLOB类型字段存超长文本Java驱动获取数据报错:index out of range。

不同版本的Dm8JdbcDriver会报不同的错误,改驱动版本为8.1.2.141即可。

8.1.1.193:正常
8.1.2.79:index out of range
8.1.2.141:正常
8.1.2.192:网络通信异常,Cannot assign requested address: connect
8.1.3.62:无效的模式名[ies_pomp_master_v2]
<!-- https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18 -->
<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver18</artifactId>
    <version>8.1.2.141</version>
</dependency>

2、启动微服务报错:dm.jdbc.driver.DMException: 第1 行附近出现错误,无效的模式名[INFORMATION_SCHEMA]。

在项目中添加包:DmDialect-for-hibernate5.4,然后修改spring.jpa.database-platform为org.hibernate.dialect.DmDialect即可。

<!-- https://central.sonatype.com/artifact/com.dameng/DmDialect-for-hibernate5.4 -->
<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmDialect-for-hibernate5.4</artifactId>
    <version>8.1.3.62</version>
</dependency>
spring:
  jpa:
    database-platform: org.hibernate.dialect.DmDialect

3、错误号: -2106,无效的表或视图名[V$HUGE_TABLESPACE_PATH]。

4、DM管理工具无法记住密码。

点击对象导航右侧工具栏上的注册连接,填写主机名、端口、用户名、口令,一定要勾选 保存口令 和 添加到连接组,点击确定即可。

5、在data文件夹中没有DAMENG文件夹。

使用以下命令创建达梦实例。

./dminit PATH=/dm/data/  PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=N CHARSET=0 LENGTH_IN_CHAR=Y DB_NAME=DAMENG LOG_SIZE=2048 INSTANCE_NAME=DMSERVER PORT_NUM=5236
本文由人工编写,AI优化,转载请注明原文地址: 达梦数据库DM8使用指南:常用命令与常见问题解决方案

评论 (3)

登录后发表评论
陈小咪2025-11-27 19:02:35
感谢作者整理的实用指南!特别是常用命令和问题解决方案,对我们做Oracle迁移帮助很大。请问文档后续会更新更多性能优化相关的内容吗?
托尼陈2025-11-16 14:49:38
非常实用的指南!整理的常用命令和问题解决方案,对我们做Oracle迁移项目帮助很大。感谢作者分享!
小草莓2025-11-09 18:07:28
感谢作者整理,最近正好在做Oracle到DM8的迁移,这份指南里的命令和问题解决方案帮了大忙!