1. 支持版本

  • 支持的版本: DM V8 4.170版本
  • 具体的版本号:03134284458-20260126-311526-20178

2. Docker安装

2.1 环境要求

软硬件 版本要求
架构 X86-64
Docker 2023年6月版或更新
磁盘空间 建议20GB以上(数据目录)

2.2 镜像获取

# 拉取阿里云镜像
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64

# 重命名镜像(可选,方便后续使用)
docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64 dm8_single:latest

2.3 快速启动(Docker Run)

# 创建数据目录(确保有足够磁盘空间)
mkdir -p /data/dm8_data

# 启动容器
docker run -d \
  -p 30236:5236 \
  --name dm8_single \
  --restart=always \
  --privileged=true \
  -e PAGE_SIZE=16 \
  -e LD_LIBRARY_PATH=/opt/dmdbms/bin \
  -e EXTENT_SIZE=32 \
  -e BLANK_PAD_MODE=1 \
  -e LOG_SIZE=1024 \
  -e UNICODE_FLAG=1 \
  -e LENGTH_IN_CHAR=1 \
  -e INSTANCE_NAME=DMSERVER \
  -v /data/dm8_data:/opt/dmdbms/data \
  dm8_single:latest

2.5 环境变量说明

变量名 默认值 说明
PAGE_SIZE 16 数据页大小(MB),影响性能和存储
EXTENT_SIZE 32 簇大小,影响空间分配
BLANK_PAD_MODE 1 字符串比较时空格处理模式
UNICODE_FLAG 1 1=UTF-8,0=GB18030
LENGTH_IN_CHAR 1 VARCHAR按字符计长度
LOG_SIZE 1024 联机日志大小(MB)
INSTANCE_NAME DMSERVER 数据库实例名

2.6 容器管理命令

# 查看容器状态
docker ps

# 查看启动日志
docker logs -f dm8_single

# 停止数据库
docker stop dm8_single

# 启动数据库
docker start dm8_single

# 重启数据库
docker restart dm8_single

# 进入容器内部
docker exec -it dm8_single bash

重要提示

  1. 挂载目录 /data/dm8_data 需要足够大的磁盘空间
  2. 在容器内使用disql时,先执行 source /etc/profile 防止中文乱码
  3. 默认用户名/密码:SYSDBA/SYSDBA001

3. 进入容器测试连接

3.1 进入容器并连接

# 进入容器
docker exec -it dm8_single bash

# 加载环境变量(防止中文乱码)
source /etc/profile

# 使用SYSDBA连接测试
/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236

3.2 执行测试SQL

-- 查看数据库版本
SELECT * FROM v$version;

-- 查看实例状态
SELECT instance_name, status$ FROM v$instance;

-- 查看数据库信息
SELECT name, create_time FROM v$database;

-- 查看当前用户
SELECT user;

-- 测试简单查询
SELECT 1+1 FROM dual;

-- 退出disql
EXIT

3.3 一键测试脚本(容器外执行)

# 进入容器并执行测试SQL
docker exec -it dm8_single bash -c "source /etc/profile && /opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236 -e 'SELECT instance_name, status\$ FROM v\$instance;'"

4. 创建数据库和用户

4.1 创建表空间和用户

进入容器并连接SYSDBA:

docker exec -it dm8_single bash
source /etc/profile
/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236

执行创建脚本:

-- 创建表空间(数据文件路径为容器内路径)
CREATE TABLESPACE SNEST_TEST DATAFILE '/opt/dmdbms/data/SNEST_TEST.dbf' SIZE 128 AUTOEXTEND ON NEXT 64 MAXSIZE 1024;

-- 创建用户并指定默认表空间
CREATE USER SNEST_TEST IDENTIFIED BY "YOUR_STRONG_PASSWORD" DEFAULT TABLESPACE SNEST_TEST;

-- 授权(DBA权限用于开发测试,生产环境建议细化权限)
GRANT DBA TO SNEST_TEST;
GRANT RESOURCE TO SNEST_TEST;
GRANT PUBLIC TO SNEST_TEST;
GRANT SOI TO SNEST_TEST;  -- 查询系统表权限

-- 验证用户创建成功
SELECT username, account_status FROM dba_users WHERE username = 'SNEST_TEST';

-- 退出
EXIT

4.2 使用新用户测试连接(容器内)

/opt/dmdbms/bin/disql SNEST_TEST/YOUR_STRONG_PASSWORD@localhost:5236

测试SQL:

-- 查看当前用户
SELECT user;

-- 查看默认表空间
SELECT username, default_tablespace FROM user_users;

-- 创建测试表
CREATE TABLE test_table (
    id INT PRIMARY KEY,
    name VARCHAR2(50),
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入测试数据
INSERT INTO test_table(id, name) VALUES(1, 'DM8测试');

-- 查询
SELECT * FROM test_table;

-- 清理
DROP TABLE test_table;

-- 退出
EXIT

4.3 一键创建脚本(容器外执行)

docker exec -i dm8_single bash << 'EOF'
source /etc/profile
/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236 << 'SQL'
CREATE TABLESPACE SNEST_TEST DATAFILE '/opt/dmdbms/data/SNEST_TEST.dbf' SIZE 128 AUTOEXTEND ON NEXT 64 MAXSIZE 1024;
CREATE USER SNEST_TEST IDENTIFIED BY "YOUR_STRONG_PASSWORD" DEFAULT TABLESPACE SNEST_TEST;
GRANT DBA TO SNEST_TEST;
GRANT RESOURCE TO SNEST_TEST;
GRANT PUBLIC TO SNEST_TEST;
GRANT SOI TO SNEST_TEST;
SQL
EOF

5. 工具连接

5.1 DM管理工具(Windows)

  1. 达梦官网下载Windows版DM8安装包
  2. 安装时只勾选"DM管理工具"(不安装数据库)
  3. 打开DM管理工具,新建连接:
配置项
主机名 127.0.0.1 或服务器IP
端口 30236
用户名 SNEST_TEST
密码 YOUR_STRONG_PASSWORD

5.2 DBeaver连接

  1. 新建连接 → 选择 Dameng(如没有则选择"通用 JDBC")

  2. 配置连接参数:

    • JDBC URL: jdbc:dm://127.0.0.1:30236
    • 用户名: SNEST_TEST
    • 密码: YOUR_STRONG_PASSWORD
    • 驱动类: dm.jdbc.driver.DmDriver
  3. 如使用通用JDBC,URL模板:

    jdbc:dm://{host::127.0.0.1}?[:{port::5236}][/DataBaseName?schema={database}]

5.3 DataGrip连接

  1. 下载达梦JDBC驱动:DmJdbcDriver18.jar
  2. 配置驱动:
    • Driver Class: dm.jdbc.driver.DmDriver
    • URL Template: jdbc:dm://{host::127.0.0.1}:{port::5236}
  3. 新建连接填写上述配置信息

6. Java项目集成

6.1 Maven依赖

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver18</artifactId>
    <version>8.1.3.111</version>
</dependency>

注意:DM8依赖不在Maven中央仓库,需手动安装到本地仓库:

mvn install:install-file \
  -Dfile=DmJdbcDriver18.jar \
  -DgroupId=com.dameng \
  -DartifactId=DmJdbcDriver18 \
  -Dversion=8.1.3.111 \
  -Dpackaging=jar

6.2 数据库连接配置

######## Dameng ##########
driverClassName=dm.jdbc.driver.DmDriver
url=jdbc:dm://127.0.0.1:30236/SNEST_TEST
username=SNEST_TEST
password=******
initialSize=20
maxActive=200
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements: true
maxOpenPreparedStatements: 20
connectionProperties:druid.stat.sql.MaxSize=50;

6.4 DamengProvider实现

public class DamengProvider extends OracleProvider {
    @Override
    public String getDBType() {
        return DBType.Dameng.getName();
    }
}

特点

  • 继承OracleProvider,兼容Oracle语法
  • 提供达梦特有的数据类型映射
  • 支持SQL语法转换和连接处理

7. 权限说明

权限/角色 说明
DBA 系统管理员角色,拥有除审计和强制访问控制外的几乎所有权限
RESOURCE 拥有创建表、索引、视图等对象定义权限,以及DML操作权限
PUBLIC 拥有数据操作权限(增删改查),无创建对象权限
SOI 查询系统表(以SYS开头)的权限
VTI 查询动态视图(以v$开头)的权限

8. 注意事项

  1. 磁盘空间:确保挂载的数据目录有足够空间,避免数据库异常
  2. 字符编码:容器内使用disql前执行 source /etc/profile 防止中文乱码
  3. 密码复杂度:达梦默认要求密码包含字母+数字+特殊字符
  4. 用户与Schema:DM8中用户即Schema,创建用户时自动创建同名Schema
  5. 表空间路径:必须在容器内存在,建议使用 /opt/dmdbms/data/
  6. 生产环境:避免使用DBA角色,按需授予CREATE TABLE/INDEX等细粒度权限

9. 参考文档

10. 常见问题

  1. 查看数据库的版本: SELECT * FROM V$VERSION;

    SQL> SELECT * FROM V$VERSION;
    行号       BANNER                           
    ---------- ---------------------------------
    1          DM Database Server 64 V8
    2          DB Version: 0x7000d
    3          03134284458-20260126-311526-20178
    4          Msg Version: 1
    5          Gsu level(5) cnt: 102”
    ------
  2. 如果版本大于2025,需要参考文档屏蔽:'MODEL'关键字: https://eco.dameng.com/community/question/9c3680f01213696898a881ddcd83347f

    alter system set 'EXCLUDE_RESERVED_WORDS' = 'MODEL' spfile;
    重启数据库生效