目录
- 1.达梦数据库-技术文档
- 2.软件安装包下载
- 2.1 iso 安装版
- 2.2 docker 安装版
- 3.DM8单机安装部署规范
- 4.安装操作步骤
- 4.1 安装docker
- 4.2 docker安装dameng(推荐)
- 5. 启动/停止数据库
- 6.客户端连接使用
- 7.DDL SQL实践
- 7.1 创建表空间
- 7.2 建表语句
- 8.DML SQL实践
- 8.1 INSERT插入语句
- 9.常见问题
- 9.1 没有库概念
- 9. Mysql语法迁移到DM记录
- 10.达梦数据库-数据导入导出
- 11.问题汇总
1.达梦数据库-技术文档
地址:https://eco.dameng.com/document/dm/zh-cn/pm/index.html
建议注册账号使用,某些链接点击时会跳登录页。
2.软件安装包下载
2.1 iso 安装版
dm8_20230104_x86_rh6_64
产品备注
链接地址:https://eco.dameng.com/s/WI234YUL43 提取码:dway
dm5201077539.key
dm8_20230104_x86_rh6_64.iso_SHA256.txt
2.2 docker 安装版
请从该页面下载镜像:https://eco.dameng.com/download/
选择docker 镜像版本。
3.DM8单机安装部署规范
请去官方搜索:DM8单机安装部署规范_v3.0.pdf
4.安装操作步骤
本地安装,推荐使用docker版本安装,方便又简洁。
4.1 安装docker
安装步骤:略
操作命令
systemctl 方式:
sudo systemctl start docker
sudo systemctl restart docker
sudo systemctl stop docker
service 方式:
sudo service docker start
sudo service docker restart
sudo service docker stop
4.2 docker安装dameng(推荐)
官方教程:https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker
启动命令:
sudo docker run -d -p 5236:5236 --restart=always --name dm8_01 --privileged=true -e PAGE_SIZE=16 -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e INSTANCE_NAME=dm8_01 -v /data01/dm8_01:/opt/dmdbms/data dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4
5. 启动/停止数据库
停止数据库命令如下:
sudo docker stop dm8_01
启动数据库命令如下:
sudo docker start dm8_01
重启命令如下:
sudo docker restart dm8_01
6.客户端连接使用
注意
1.如果使用 docker 容器里面的 disql,进入容器后,先执行 source /etc/profile 防止中文乱码。
2.新版本 Docker 镜像中数据库默认用户名/密码为 SYSDBA/SYSDBA001。
客户端登录语法:./disql username/password@IP:PORT
-
1)登录数据库服务器,进入容器:sudo docker exec -it dm8_01 /bin/bash
-
2)执行 source /etc/profile
-
3)进入命令目录 cd /opt/dmdbms/bin/
-
4)启动客户端 ./disql
-
5)输入用户名和密码
root@786239aa5804:/opt/dmdbms/bin# ./disql
disql V8
username:SYSDBA
password:SYSDBA001
7.DDL SQL实践
7.1 创建表空间
CREATE TABLESPACE yuntu DATAFILE ‘yuntu.DBF’ size 128;
7.2 建表语句
CREATE TABLE “tb_test”(“id” INT IDENTITY (1, 1) NOT NULL,“name” VARCHAR(10),NOT CLUSTER PRIMARY KEY(“id”));
注意此处:主键从1开始自增,且步长为1。 固定写法【IDENTITY (1, 1)】
注意:此时创建的表是【“tb_test”】而不是【tb_test】
但如果是:CREATE TABLE “TB_TEST1”(“id” INT IDENTITY (1, 1) NOT NULL,“name” VARCHAR(10),NOT CLUSTER PRIMARY KEY(“id”));
则创建的表是【TB_TEST1】而不是【“tb_test1”】,使用下述两个语句都可以查询表。
select * from tb_test1;
select * from TB_TEST1;
重点:达梦数据库建表语句中,对大小写敏感,表名、字段名一律需要大写,且用双引号引起。查询语句中,才可以用小写进行查询。
8.DML SQL实践
8.1 INSERT插入语句
INSERT INTO “tb_test” VALUES(‘test’); 向 【“tb_test”】 表插入一条数据
INSERT INTO tb_test1 VALUES(‘test’); 向【tb_test1】表插入一条数据
9.常见问题
本小节仅节选部分对编码有影响的问题。
9.1 没有库概念
DM 数据库没有库的概念,从上往下,依次为:实例-用户-表空间-表,如下图所示:
结构关系图
9. Mysql语法迁移到DM记录
-
mysql可对表或字段使用反引号 ` ,而DM中使用双引号",对于双引号括起来的字段或表名需要大写。如果不是关键字可以去除反引号
-
DM中支持CONCAT函数,mysql的xml中使用的CONCAT函数可不做修改;但DM不支持CONCAT_WS,需要使用CONCAT函数进行替换
-
mysql对用json字符串可以使用JSON_VALID进行校验,而DM中可以使用is json进行判断,但是DM中如果字符串中含有转义符的不能识别为json
-
insert语句中,DM不支持value,需要改为values
-
SQL中使用 ` 引用字段跟表名的用法不支持
-
模式(schema)即对应mysql的dbname
-
主动为主键列ID赋值不支持
比如:INSERT INTO tablename(id, name) VALUES (122,‘myname’);
报错:[-2723]:Only if specified in the column list and SET IDENTITY_INSERT is ON, then identity column could be assigned value. -
时间戳字段更新
CREATE TRIGGER before_update_dataset_authority
BEFORE UPDATE ON dataset_authority
FOR EACH ROW
BEGIN
:new.gmt_modify=CURRENT_TIMESTAMP();
END;
- 添加注释
COMMENT ON TABLE database is ‘数据源配置表’;
COMMENT ON COLUMN database.id is ‘主键’;
10.达梦数据库-数据导入导出
https://eco.dameng.com/document/dm/zh-cn/faq/faq-import-export
11.问题汇总
Q1:达梦数据库的分页兼容各类数据库分页方式,无需修改
DM 数据库支持MySQL分页
DM 数据库支持 ROWNUM,所以能够支持 Oracle 的分页方式。
DM 数据库支持 TOP,所以能够支持 SQL Server 的分页方式。
DM 数据库支持 LIMIT,所以能够支持 MySQL 的分页方式。
由于 DM 数据支持所有的常用分页方式,为用户的应用提供了更好的可移植性。
Q2:docker的一些文件不小心被删了,镜像和容器都无法正常使用,且系统被重启了,当重新挂载镜像重启dameng数据库时,数据库无法正常使用,报[-510]:Error in line: 1 System in mount status.错误。
解决方法:使用SYSDBA登录到客户端,执行:alter database open;
原因:可能是一些异常情况,导致达梦数据库状态变更,变更为mount状态,根据官方文档提示。只要把数据库状态变更为open就行。
引用于:dm8系统管理员手册
7.2 数据库状态和模式
DM 数据库包含以下几种状态:
配置状态(MOUNT):不允许访问数据库对象,只能进行控制文件维护、归档配置、
数据库模式修改等操作;
打开状态(OPEN):不能进行控制文件维护、归档配置等操作,可以访问数据库对象,
对外提供正常的数据库服务;
挂起状态(SUSPEND):与 OPEN 状态的唯一区别就是,限制磁盘写入功能;
一旦修改了数据页,触发 REDO 日志、数据页刷盘,当前用户将被挂起。
OPEN 状态与 MOUNT 和 SUSPEND 能相互转换,
但是 MOUNT 和 SUSPEND 之间不能相互转换。