达梦数据库(DM8)适配
1. 支持版本
- DM8(dm8_20230808_rev197096_x86_rh6_64)
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
重要提示:
- 挂载目录
/data/dm8_data需要足够大的磁盘空间 - 在容器内使用disql时,先执行
source /etc/profile防止中文乱码 - 默认用户名/密码: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)
- 从达梦官网下载Windows版DM8安装包
- 安装时只勾选"DM管理工具"(不安装数据库)
- 打开DM管理工具,新建连接:
| 配置项 | 值 |
|---|---|
| 主机名 |
127.0.0.1 或服务器IP |
| 端口 | 30236 |
| 用户名 | SNEST_TEST |
| 密码 | YOUR_STRONG_PASSWORD |
5.2 DBeaver连接
-
新建连接 → 选择 Dameng(如没有则选择"通用 JDBC")
-
配置连接参数:
-
JDBC URL:
jdbc:dm://127.0.0.1:30236 -
用户名:
SNEST_TEST -
密码:
YOUR_STRONG_PASSWORD -
驱动类:
dm.jdbc.driver.DmDriver
-
JDBC URL:
-
如使用通用JDBC,URL模板:
jdbc:dm://{host::127.0.0.1}?[:{port::5236}][/DataBaseName?schema={database}]
5.3 DataGrip连接
- 下载达梦JDBC驱动:
DmJdbcDriver18.jar - 配置驱动:
-
Driver Class:
dm.jdbc.driver.DmDriver -
URL Template:
jdbc:dm://{host::127.0.0.1}:{port::5236}
-
Driver Class:
- 新建连接填写上述配置信息
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. 注意事项
- 磁盘空间:确保挂载的数据目录有足够空间,避免数据库异常
-
字符编码:容器内使用disql前执行
source /etc/profile防止中文乱码 - 密码复杂度:达梦默认要求密码包含字母+数字+特殊字符
- 用户与Schema:DM8中用户即Schema,创建用户时自动创建同名Schema
-
表空间路径:必须在容器内存在,建议使用
/opt/dmdbms/data/ - 生产环境:避免使用DBA角色,按需授予CREATE TABLE/INDEX等细粒度权限