参考

快速上手 | 达梦技术文档 (dameng.com)

函数 | 达梦技术文档 (dameng.com)

DMGEO 包 | 达梦技术文档 (dameng.com)

创建表空间 | 达梦技术文档 (dameng.com)

DM8达梦数据库版本区别:开发版、标准版、企业版、安全版 - 墨天轮 (modb.pro)

附录 | 达梦技术文档 (dameng.com)

下载

产品下载-达梦数据 (dameng.com)

概述

  • DM数据库
  • 试用期限1年

安装数据库

Windows

包含服务器、客户端等组件,可选择安装

  1. 解压,选择文件 dm8_setup_win64_ent_8.1.1.45_20191121.iso 右键,安装
  2. 选择语言与时区
  3. 下一步
  4. 指定 key 文件
  5. 选择组件,例如客户端安装
  6. 选择安装位置
  7. 安装

麒麟操作系统

银河麒麟V10安装达梦数据库DM8 - 古道轻风 - 博客园 (cnblogs.com)

创建数据库实例

使用 DM 数据库配置助手

数据页大小:默认
数据簇大小:默认
字符集类型:默认 GB18030
VARCHAR长度是否以字符为单位:是
大小写敏感:是

EvDbum
    <img src="http://wangqinpei.oss-cn-qingdao.aliyuncs.com/uPic/ASo6yE.png" alt="ASo6yE" style="zoom:50%;" />

启动数据库

方式一

1
service DmServiceDMSERVER start

方式二

1
2
在终端进入 DM 安装目录下的 bin 目录,执行
./dmserver /home/dmdba/dmdbms/DAMENG/dm.ini &

查看进程

1
2
3
4
5
ps axu|grep dmserver

netstat -lnp|grep 5236

dmdba 18337 0.2 6.9 2092592 558124 ? Sl 15:45 0:05 ./dmserver ../DAMENG/dm.ini

数据库配置

创建表空间

使用可视化客户端工具,例如达梦自带「DM管理工具」或者使用 DataGrip 通过 SYSDBA 管理员登录

1
2
3
4
5
6
7
8
9
10
create tablespace SGP datafile '/home/dmdba/dmdbms/DAMENG/SGP.DBF' SIZE 128;
create tablespace SCM datafile '/home/dmdba/dmdbms/DAMENG/SCM.DBF' SIZE 128;

alter tablespace SGP datafile '/home/dmdba/dmdbms/DAMENG/SGP.DBF' autoextend on;
alter tablespace SCM datafile '/home/dmdba/dmdbms/DAMENG/SCM.DBF' autoextend on;

create tablespace SGP datafile 'E:\dm8\data\DAMENG\SGP.DBF' SIZE 128;
create tablespace SCM datafile 'E:\dm8\data\DAMENG\SCM.DBF' SIZE 128;
alter tablespace SGP datafile 'E:\dm8\data\DAMENG\SGP.DBF' autoextend on;
alter tablespace SCM datafile 'E:\dm8\data\DAMENG\SCM.DBF' autoextend on;

创建用户并授权

1
2
3
4
5
6
7
8
9
10
create user sgp identified by sgp123456 default tablespace SGP;
create user scm identified by scm123456 default tablespace SCM;
create user gms9x identified by gms9x123456 default tablespace SGP;

create user "SCM_LINZE" identified by "Root@123456" default tablespace "SCM";
grant public, resource, dba to "SCM_LINZE";

grant public, resource, dba to sgp;
grant public, resource, dba to scm;
grant public, resource, dba to gms9x;

数据库迁移

DM数据迁移工具 功能

image-20200926115149554

可视化客户端工具

DataGrip 或 IDEA Database 工具使用

  1. 创建 DM 数据库驱动 —— 选择驱动文件「Custom JARS…」,Class 会自动加载出来

    YO9xjo
  2. 创建 DM 数据库连接

    jdbc:dm://ip:5236/DMSERVER?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8

    opa4Tv

项目调整

工程配置

  1. 项目pom.xml 引入 达梦数据库驱动

    1
    2
    3
    4
    5
    6
    <!-- 达梦jdbc驱动-->
    <dependency>
    <groupId>com.dameng</groupId>
    <artifactId>Dm8JdbcDriver18</artifactId>
    <version>8.1.1.49</version>
    </dependency>
  2. 新增 jdbc_dmdb.properties 配置文件

    1
    2
    3
    4
    5
    6
    db.driverClassName=dm.jdbc.driver.DmDriver
    db.validationQuery=SELECT 1 FROM DUAL
    db.jdbc_url=jdbc:dm://ip:5236/DMSERVER?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
    db.jdbc_username=sgp
    db.publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALlz/vMS4EeJf2SIPm+7WyZYz9kBB7x2oKa06xm3pw9pnNKioVqFBNsNH8+s+r+Zc8G/oM9MFcjGeOuXegVbpCkCAwEAAQ\=\=
    db.jdbc_password=LGXikmXhCxNrjN6RBf0R4IyFzCytJLk90h2bod4T/F2/Fy9qXaDEKhC184vOwxFA0sjLy4neCPjRKrUicg0gdg\=\=
  3. spring-mybatis.xml 中 dataSource 配置中 oracle 改为 db

函数

ctrl + shift + R 全局替换

Oracle DM 说明
NLS_UPPER UCASE 转换为大写

数据库厂商标识

  1. spring-mybatis.xml 新增及修改配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <!-- myBatis文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
    <property name="mapperLocations" value="classpath:mapping/*.xml" />
    <property name="databaseIdProvider" ref="databaseIdProvider" />
    </bean>

    <!-- 多数据库支持-->
    <bean id="vendorProperties"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
    <props>
    <prop key="Oracle">oracle</prop>
    <prop key="Dm">dm</prop>
    </props>
    </property>
    </bean>

    <bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider">
    <property name="properties" ref="vendorProperties" />
    </bean>
  2. ***Dao.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <choose>
    <when test="_databaseId == 'oracle'">
    NLS_UPPER(LOGINNAME) &lt;&gt; 'ROOT'
    </when>
    <otherwise>
    UCASE(LOGINNAME) &lt;&gt; 'ROOT'
    </otherwise>
    </choose>

    <choose>
    <when test="_databaseId == 'oracle'">
    NLS_UPPER(u.LOGINNAME) &lt;&gt; 'ROOT' and NLS_UPPER(u.LOGINNAME) &lt;&gt; 'ADMIN'
    </when>
    <otherwise>
    UCASE(u.LOGINNAME) &lt;&gt; 'ROOT' and UCASE(u.LOGINNAME) &lt;&gt; 'ADMIN'
    </otherwise>
    </choose>

DM 中关键字

数据库 138 sgp 和 达梦数据库 sgp

  1. *PERCENT —— 获取用户下所有表字段(percent字段)

    select * from user_tab_columns where nls_upper(COLUMN_NAME)=’PERCENT’

select * from user_tab_columns where UCASE(COLUMN_NAME)=’PERCENT’

sgp_eventconfig percent 字段改为 perc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  drop table SGP_EVENTCONFIG;
create table SGP_EVENTCONFIG
(
ECID VARCHAR2(16) not null,
TARGETFLAG CHAR(1),
ASSESSTYPE CHAR(1),
PERC NUMBER(2),
PERIODUNIT VARCHAR2(10),
COMPONENTSWITCH CHAR(1),
constraint PK_SGP_EVENTCONFIG primary key(ECID)
);

drop table SCM_EVENTCONFIG;
create table SCM_EVENTCONFIG
(
ECID VARCHAR2(16) not null,
TARGETFLAG CHAR(1),
ASSESSTYPE CHAR(1),
PERC NUMBER(2),
PERIODUNIT VARCHAR2(10),
COMPONENTSWITCH CHAR(1),
constraint PK_SCM_EVENTCONFIG primary key(ECID)
);

DMDB 数据库备份恢复

https://www.modb.pro/db/23507

与MySQL 数据库 SQL 中差异

geo

  • geo 类型由 point 改为 st_point(max)

FIND_IN_SET

自建 FIND_IN_SET()函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
CREATE OR REPLACE FUNCTION FIND_IN_SET
(
piv_str1 varchar2,
piv_str2 varchar2,
p_sep varchar2 := ',')
RETURN NUMBER
IS
l_idx number:=0; -- 用于计算piv_str2中分隔符的位置
str varchar2(500); -- 根据分隔符截取的子字符串
piv_str varchar2(500) := piv_str2; -- 将piv_str2赋值给piv_str
res number :=0; -- 返回结果
loopIndex number :=0;
BEGIN
-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1
IF instr(piv_str, p_sep, 1) = 0 THEN
IF piv_str = piv_str1 THEN
res := 1;
END IF;
ELSE
-- 循环按分隔符截取piv_str
LOOP
l_idx := instr(piv_str, p_sep);
loopIndex:=loopIndex+1;
-- 当piv_str中还有分隔符时
IF l_idx > 0 THEN
-- 截取第一个分隔符前的字段str
str:= substr(piv_str, 1, l_idx-1);
-- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断
IF str = piv_str1 THEN
res:= loopIndex;
EXIT;
END IF;
piv_str := substr(piv_str, l_idx+length(p_sep));
ELSE
-- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1
IF piv_str = piv_str1 THEN
res:= loopIndex;
END IF;
-- 无论最后是否相等,都跳出循环
EXIT;
END IF;
END LOOP;
-- 结束循环
END IF;
-- 返回res
RETURN res;
END FIND_IN_SET;

commit;

DM中关键字排查

  • comment 改为 comment_result

疑问

  1. SRID 空间参考坐标系 ID 参数值 0 ?4326?