☰
Current Page
Main Menu
Home
Home
Editing
dameng-guide
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
# 达梦数据库(DM8)适配 ## 1. 支持版本 - **支持的版本: DM V8 4.170版本** - 具体的版本号:03134284458-20260126-311526-20178 - --- ## 2. Docker安装 ### 2.1 环境要求 | 软硬件 | 版本要求 | | -------- | ------------------------ | | 架构 | X86-64 | | Docker | 2023年6月版或更新 | | 磁盘空间 | 建议20GB以上(数据目录) | ### 2.2 镜像获取 ```bash # 拉取阿里云镜像 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) ```bash # 创建数据目录(确保有足够磁盘空间) 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 容器管理命令 ```bash # 查看容器状态 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 进入容器并连接 ```bash # 进入容器 docker exec -it dm8_single bash # 加载环境变量(防止中文乱码) source /etc/profile # 使用SYSDBA连接测试 /opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236 ``` ### 3.2 执行测试SQL ```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 一键测试脚本(容器外执行) ```bash # 进入容器并执行测试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: ```bash docker exec -it dm8_single bash 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; -- 授权(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 使用新用户测试连接(容器内) ```bash /opt/dmdbms/bin/disql SNEST_TEST/YOUR_STRONG_PASSWORD@localhost:5236 ``` 测试SQL: ```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 一键创建脚本(容器外执行) ```bash 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. 从[达梦官网](https://eco.dameng.com/download/)下载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依赖 ```xml <dependency> <groupId>com.dameng</groupId> <artifactId>DmJdbcDriver18</artifactId> <version>8.1.3.111</version> </dependency> ``` **注意**:DM8依赖不在Maven中央仓库,需手动安装到本地仓库: ```bash mvn install:install-file \ -Dfile=DmJdbcDriver18.jar \ -DgroupId=com.dameng \ -DartifactId=DmJdbcDriver18 \ -Dversion=8.1.3.111 \ -Dpackaging=jar ``` ### 6.2 数据库连接配置 ```properties ######## 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实现 ```java 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. 参考文档 - [达梦技术文档 - Docker安装](https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html) - [达梦技术文档 - DM管理工具](https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-manager.html) - [达梦产品下载](https://eco.dameng.com/download/) - ## 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; 重启数据库生效 ```
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel