dameng-guide.md
... ...
@@ -2,43 +2,41 @@
2 2
3 3
## 1. 支持版本
4 4
5
-- DM8
5
+- **DM8**(dm8_20230808_rev197096_x86_rh6_64)
6 6
7
-## 2. Docker安装
8
-
9
-### 参考文档
10
-
11
-[Docker安装 | [达梦技术文档](https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html)]
12
-
13
-### 安装前准备
14
-
15
-| 软硬件 | 版本要求 |
16
-| ------ | ----------------- |
17
-| 终端 | X86-64 架构 |
18
-| Docker | 2023年6月版或更新 |
7
+---
19 8
20
-### 安装步骤
9
+## 2. Docker安装
21 10
22
-#### 1. 下载Docker安装包
11
+### 2.1 环境要求
23 12
24
-访问达梦官网下载:[产品下载 | [达梦数据库](https://eco.dameng.com/download/)]
13
+| 软硬件 | 版本要求 |
14
+| -------- | ------------------------ |
15
+| 架构 | X86-64 |
16
+| Docker | 2023年6月版或更新 |
17
+| 磁盘空间 | 建议20GB以上(数据目录) |
25 18
26
-#### 2. 导入安装包
19
+### 2.2 镜像获取
27 20
28 21
```bash
29
-# 拷贝安装包到/opt目录下
30
-docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar
22
+# 拉取阿里云镜像
23
+docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64
31 24
32
-# 查看导入的镜像
33
-docker images
25
+# 重命名镜像(可选,方便后续使用)
26
+docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64 dm8_single:latest
34 27
```
35 28
36
-#### 3. 启动容器
29
+### 2.3 快速启动(Docker Run)
37 30
38 31
```bash
39
-docker run -d -p 30236:5236 \
32
+# 创建数据目录(确保有足够磁盘空间)
33
+mkdir -p /data/dm8_data
34
+
35
+# 启动容器
36
+docker run -d \
37
+ -p 30236:5236 \
38
+ --name dm8_single \
40 39
--restart=always \
41
- --name dm8_test \
42 40
--privileged=true \
43 41
-e PAGE_SIZE=16 \
44 42
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
... ...
@@ -47,87 +45,233 @@ docker run -d -p 30236:5236 \
47 45
-e LOG_SIZE=1024 \
48 46
-e UNICODE_FLAG=1 \
49 47
-e LENGTH_IN_CHAR=1 \
50
- -e INSTANCE_NAME=dm8_test \
51
- -v /data/dm8_test:/opt/dmdbms/data \
52
- dm8_single:dm8_20230808_rev197096_x86_rh6_64
48
+ -e INSTANCE_NAME=DMSERVER \
49
+ -v /data/dm8_data:/opt/dmdbms/data \
50
+ dm8_single:latest
53 51
```
54 52
55
-**注意**:挂载目录 `/data/dm8_test` 需要足够大的磁盘空间。
53
+###
54
+
55
+### 2.5 环境变量说明
56 56
57
-#### 4. 检查容器状态
57
+| 变量名 | 默认值 | 说明 |
58
+| ---------------- | -------- | -------------------------------- |
59
+| `PAGE_SIZE` | 16 | 数据页大小(MB),影响性能和存储 |
60
+| `EXTENT_SIZE` | 32 | 簇大小,影响空间分配 |
61
+| `BLANK_PAD_MODE` | 1 | 字符串比较时空格处理模式 |
62
+| `UNICODE_FLAG` | 1 | 1=UTF-8,0=GB18030 |
63
+| `LENGTH_IN_CHAR` | 1 | VARCHAR按字符计长度 |
64
+| `LOG_SIZE` | 1024 | 联机日志大小(MB) |
65
+| `INSTANCE_NAME` | DMSERVER | 数据库实例名 |
66
+
67
+### 2.6 容器管理命令
58 68
59 69
```bash
60
-# 查看容器运行状态
70
+# 查看容器状态
61 71
docker ps
62 72
63 73
# 查看启动日志
64
-docker logs -f dm8_test
65
-# 或
66
-docker logs -f [容器ID]
67
-```
74
+docker logs -f dm8_single
68 75
69
-#### 5. 容器管理命令
70
-
71
-```bash
72 76
# 停止数据库
73
-docker stop dm8_test
77
+docker stop dm8_single
74 78
75 79
# 启动数据库
76
-docker start dm8_test
80
+docker start dm8_single
77 81
78 82
# 重启数据库
79
-docker restart dm8_test
83
+docker restart dm8_single
84
+
85
+# 进入容器内部
86
+docker exec -it dm8_single bash
80 87
```
81 88
82 89
**重要提示**:
83 90
84
-1. 在容器内使用disql时,先执行 `source /etc/profile` 防止中文乱码
85
-2. 默认用户名/密码:SYSDBA/SYSDBA001
91
+1. 挂载目录 `/data/dm8_data` 需要足够大的磁盘空间
92
+2. 在容器内使用disql时,先执行 `source /etc/profile` 防止中文乱码
93
+3. 默认用户名/密码:**SYSDBA/SYSDBA001**
94
+
95
+---
96
+
97
+## 3. 进入容器测试连接
98
+
99
+### 3.1 进入容器并连接
100
+
101
+```bash
102
+# 进入容器
103
+docker exec -it dm8_single bash
104
+
105
+# 加载环境变量(防止中文乱码)
106
+source /etc/profile
107
+
108
+# 使用SYSDBA连接测试
109
+/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236
110
+```
111
+
112
+### 3.2 执行测试SQL
113
+
114
+```sql
115
+-- 查看数据库版本
116
+SELECT * FROM v$version;
117
+
118
+-- 查看实例状态
119
+SELECT instance_name, status$ FROM v$instance;
120
+
121
+-- 查看数据库信息
122
+SELECT name, create_time FROM v$database;
123
+
124
+-- 查看当前用户
125
+SELECT user;
126
+
127
+-- 测试简单查询
128
+SELECT 1+1 FROM dual;
129
+
130
+-- 退出disql
131
+EXIT
132
+```
133
+
134
+### 3.3 一键测试脚本(容器外执行)
86 135
87
-## 3. 测试环境信息
136
+```bash
137
+# 进入容器并执行测试SQL
138
+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;'"
139
+```
140
+
141
+---
88 142
89
-- **服务器**:192.168.175.xxx
143
+## 4. 创建数据库和用户
90 144
91
-- **Docker镜像**:dm8_test
145
+### 4.1 创建表空间和用户
92 146
93
-- **端口**:30236(映射到容器5236端口)
147
+进入容器并连接SYSDBA:
148
+
149
+```bash
150
+docker exec -it dm8_single bash
151
+source /etc/profile
152
+/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236
153
+```
94 154
95
- <img src="./uploads/dameng-guide/dameng-2.png" alt="img" style="zoom:67%;" />
155
+执行创建脚本:
96 156
97
-## 4. 安装DM管理工具(Windows)
157
+```sql
158
+-- 创建表空间(数据文件路径为容器内路径)
159
+CREATE TABLESPACE SNEST_TEST DATAFILE '/opt/dmdbms/data/SNEST_TEST.dbf' SIZE 128 AUTOEXTEND ON NEXT 64 MAXSIZE 1024;
98 160
99
-### 参考文档
161
+-- 创建用户并指定默认表空间
162
+CREATE USER SNEST_TEST IDENTIFIED BY "YOUR_STRONG_PASSWORD" DEFAULT TABLESPACE SNEST_TEST;
100 163
101
-[DM管理工具 | [达梦技术文档](https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-manager.html)]
164
+-- 授权(DBA权限用于开发测试,生产环境建议细化权限)
165
+GRANT DBA TO SNEST_TEST;
166
+GRANT RESOURCE TO SNEST_TEST;
167
+GRANT PUBLIC TO SNEST_TEST;
168
+GRANT SOI TO SNEST_TEST; -- 查询系统表权限
102 169
103
-### 安装步骤
170
+-- 验证用户创建成功
171
+SELECT username, account_status FROM dba_users WHERE username = 'SNEST_TEST';
104 172
105
-1. 从官网下载Windows版DM8安装包
106
-2. 安装时只勾选"DM管理工具"(不安装数据库)
173
+-- 退出
174
+EXIT
175
+```
107 176
108
-<img src="/uploads/dameng-guide/dameng-1.png" alt="img" style="zoom: 67%;" />
177
+### 4.2 使用新用户测试连接(容器内)
109 178
110
-## 5. 连接DM数据库
179
+```bash
180
+/opt/dmdbms/bin/disql SNEST_TEST/YOUR_STRONG_PASSWORD@localhost:5236
181
+```
111 182
112
-### 连接信息
183
+测试SQL:
113 184
114
-- **地址**:192.168.175.XXX:30236
115
-- **用户名**:SYSDBA
116
-- **密码**:SYSDBA001
185
+```sql
186
+-- 查看当前用户
187
+SELECT user;
117 188
118
-### 使用DM管理工具连接
189
+-- 查看默认表空间
190
+SELECT username, default_tablespace FROM user_users;
119 191
120
-1. 打开DM管理工具
192
+-- 创建测试表
193
+CREATE TABLE test_table (
194
+ id INT PRIMARY KEY,
195
+ name VARCHAR2(50),
196
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
197
+);
121 198
122
-2. 新建连接
199
+-- 插入测试数据
200
+INSERT INTO test_table(id, name) VALUES(1, 'DM8测试');
123 201
124
-3. 填写上述连接信息
202
+-- 查询
203
+SELECT * FROM test_table;
125 204
126
- ![img](./uploads/dameng-guide/dameng-3.png)
205
+-- 清理
206
+DROP TABLE test_table;
207
+
208
+-- 退出
209
+EXIT
210
+```
211
+
212
+### 4.3 一键创建脚本(容器外执行)
213
+
214
+```bash
215
+docker exec -i dm8_single bash << 'EOF'
216
+source /etc/profile
217
+/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@localhost:5236 << 'SQL'
218
+CREATE TABLESPACE SNEST_TEST DATAFILE '/opt/dmdbms/data/SNEST_TEST.dbf' SIZE 128 AUTOEXTEND ON NEXT 64 MAXSIZE 1024;
219
+CREATE USER SNEST_TEST IDENTIFIED BY "YOUR_STRONG_PASSWORD" DEFAULT TABLESPACE SNEST_TEST;
220
+GRANT DBA TO SNEST_TEST;
221
+GRANT RESOURCE TO SNEST_TEST;
222
+GRANT PUBLIC TO SNEST_TEST;
223
+GRANT SOI TO SNEST_TEST;
224
+SQL
225
+EOF
226
+```
227
+
228
+---
229
+
230
+## 5. 工具连接
231
+
232
+### 5.1 DM管理工具(Windows)
233
+
234
+1. 从[达梦官网](https://eco.dameng.com/download/)下载Windows版DM8安装包
235
+2. 安装时只勾选"**DM管理工具**"(不安装数据库)
236
+3. 打开DM管理工具,新建连接:
237
+
238
+| 配置项 | 值 |
239
+| ------ | ---------------------- |
240
+| 主机名 | `127.0.0.1` 或服务器IP |
241
+| 端口 | `30236` |
242
+| 用户名 | `SNEST_TEST` |
243
+| 密码 | `YOUR_STRONG_PASSWORD` |
244
+
245
+### 5.2 DBeaver连接
246
+
247
+1. 新建连接 → 选择 **Dameng**(如没有则选择"通用 JDBC")
248
+
249
+2. 配置连接参数:
250
+
251
+ - **JDBC URL**: `jdbc:dm://127.0.0.1:30236`
252
+ - **用户名**: `SNEST_TEST`
253
+ - **密码**: `YOUR_STRONG_PASSWORD`
254
+ - **驱动类**: `dm.jdbc.driver.DmDriver`
255
+
256
+3. 如使用通用JDBC,URL模板:
257
+
258
+ ```
259
+ jdbc:dm://{host::127.0.0.1}?[:{port::5236}][/DataBaseName?schema={database}]
260
+ ```
261
+
262
+### 5.3 DataGrip连接
263
+
264
+1. 下载达梦JDBC驱动:`DmJdbcDriver18.jar`
265
+2. 配置驱动:
266
+ - **Driver Class**: `dm.jdbc.driver.DmDriver`
267
+ - **URL Template**: `jdbc:dm://{host::127.0.0.1}:{port::5236}`
268
+3. 新建连接填写上述配置信息
269
+
270
+---
127 271
128 272
## 6. Java项目集成
129 273
130
-### Maven依赖
274
+### 6.1 Maven依赖
131 275
132 276
```xml
133 277
<dependency>
... ...
@@ -137,47 +281,41 @@ docker restart dm8_test
137 281
</dependency>
138 282
```
139 283
140
-### 数据库连接配置(dbcp.properties)
284
+**注意**:DM8依赖不在Maven中央仓库,需手动安装到本地仓库:
141 285
142
-```properties
143
-########dameng##########
144
-driverClassName=dm.jdbc.driver.DmDriver
145
-url=jdbc:dm://192.168.175.XXX:30236/IIDP_DEMO
146
-username=SYSDBA
147
-password=SYSDBA001
286
+```bash
287
+mvn install:install-file \
288
+ -Dfile=DmJdbcDriver18.jar \
289
+ -DgroupId=com.dameng \
290
+ -DartifactId=DmJdbcDriver18 \
291
+ -Dversion=8.1.3.111 \
292
+ -Dpackaging=jar
148 293
```
149 294
150
-## 7. DM数据库兼容性测试
151
-
152
-### 测试连接配置
295
+### 6.2 数据库连接配置
153 296
154 297
```properties
155
-########dameng##########
156
-driverClassName=dm.jdbc.driver.DmDriver
157
-url=jdbc:dm://192.168.175.XXX:30236/SNEST_TEST
298
+######## Dameng ##########
299
+driverClassName=dm.jdbc.driver.DmDriver
300
+url=jdbc:dm://127.0.0.1:30236/SNEST_TEST
158 301
username=SNEST_TEST
159 302
password=******
303
+initialSize=20
304
+maxActive=200
305
+minIdle=5
306
+maxWait=6000
307
+filters=stat
308
+timeBetweenEvictionRunsMillis=60000
309
+minEvictableIdleTimeMillis=300000
310
+testOnBorrow=false
311
+testOnReturn=false
312
+testWhileIdle=true
313
+poolPreparedStatements: true
314
+maxOpenPreparedStatements: 20
315
+connectionProperties:druid.stat.sql.MaxSize=50;
160 316
```
161 317
162
-### 使用DBeaver连接
163
-
164
-1. **连接方式**:选择ODBC
165
-2. **编辑ODBC模板**:
166
- - JDBC驱动类:`dm.jdbc.driver.DmDriver`
167
- - JDBC URL:`jdbc:dm://192.168.175.XXX:30236/SNEST_TEST`
168
-3. **添加驱动**:`DmJdbcDriver18-8.1.3.62.jar`
169
-
170
-<img src="./uploads/dameng-guide/dameng-4.png" alt="img" style="zoom: 67%;" />
171
-
172
-<img src="./uploads/dameng-guide/dameng-5.png" alt="img" style="zoom:67%;" />
173
-
174
-
175
-
176
-## 9.DamengProvider介绍
177
-
178
-`DamengProvider` 是一个专为达梦数据库(DM8)设计的Java JDBC提供者实现类。它继承自 `OracleProvider`,提供了达梦数据库特有的数据类型映射、SQL语法转换和连接处理功能。
179
-
180
-由于DM数据库兼容Oracle语法,测试用例和测试应用程序可以与Oracle保持一致。
318
+### 6.4 DamengProvider实现
181 319
182 320
```java
183 321
public class DamengProvider extends OracleProvider {
... ...
@@ -188,11 +326,39 @@ public class DamengProvider extends OracleProvider {
188 326
}
189 327
```
190 328
329
+**特点**:
330
+
331
+- 继承`OracleProvider`,兼容Oracle语法
332
+- 提供达梦特有的数据类型映射
333
+- 支持SQL语法转换和连接处理
334
+
335
+---
336
+
337
+## 7. 权限说明
338
+
339
+| 权限/角色 | 说明 |
340
+| ------------ | -------------------------------------------------------- |
341
+| **DBA** | 系统管理员角色,拥有除审计和强制访问控制外的几乎所有权限 |
342
+| **RESOURCE** | 拥有创建表、索引、视图等对象定义权限,以及DML操作权限 |
343
+| **PUBLIC** | 拥有数据操作权限(增删改查),无创建对象权限 |
344
+| **SOI** | 查询系统表(以SYS开头)的权限 |
345
+| **VTI** | 查询动态视图(以v$开头)的权限 |
346
+
347
+---
348
+
349
+## 8. 注意事项
350
+
351
+1. **磁盘空间**:确保挂载的数据目录有足够空间,避免数据库异常
352
+2. **字符编码**:容器内使用disql前执行 `source /etc/profile` 防止中文乱码
353
+3. **密码复杂度**:达梦默认要求密码包含字母+数字+特殊字符
354
+4. **用户与Schema**:DM8中用户即Schema,创建用户时自动创建同名Schema
355
+5. **表空间路径**:必须在容器内存在,建议使用 `/opt/dmdbms/data/`
356
+6. **生产环境**:避免使用DBA角色,按需授予CREATE TABLE/INDEX等细粒度权限
191 357
358
+---
192 359
193
-## 10.注意事项
360
+## 9. 参考文档
194 361
195
-1. 确保挂载的磁盘空间足够
196
-2. 容器内使用disql时注意编码设置
197
-3. 根据实际需求调整容器启动参数
198
-4. 生产环境建议使用更复杂的配置和安全设置
... ...
\ No newline at end of file
0
+- [达梦技术文档 - Docker安装](https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html)
1
+- [达梦技术文档 - DM管理工具](https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-manager.html)
2
+- [达梦产品下载](https://eco.dameng.com/download/)
... ...
\ No newline at end of file