:::info 参考链接: https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html#2.2.6%20%E7%A7%BB%E6%A4%8D%E5%AE%9E%E6%96%BD https://eco.dameng.com/document-preview/dm/zh-cn/start/dm-create-tablespace ::: :::info window 安装达梦工具:https://www.yuque.com/heyyall/zwitgw/xgmleg1ag6y15prx?singleDoc (如果 linux 安装达梦数据库,并且支持可视化界面那么就不需要安装) 迁移使用工具:DM数据迁移工具 :::
从语雀写好导入的,格式有点错乱,语雀链接:https://www.yuque.com/heyyall/zwitgw/tzt3t8zy0m3nsigo?singleDoc# 《MySQL 5.7.27 迁移 DM 8》
SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '数据库名称' GROUP BY TABLE_SCHEMA;SELECT TABLE_SCHEMA,COUNT(*) VIEWS FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = '数据库名称' GROUP BY TABLE_SCHEMA;SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_SCHEMA='数据库名称';SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='FUNCTION' AND ROUTINE_SCHEMA='数据库名称';SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA= '数据库名称';CREATE TABLE MYSQL_TABLES(TAB_OWNER VARCHAR(100),TAB_NAME VARCHAR(100),TAB_COUNT INT);
INSERT INTO MYSQL_TABLES SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '数据库名称' ORDER BY TABLE_ROWS DESC;官网中用的是 达梦企业管理器 DEM,但是 DM 数据迁移工具中也可以评估










没处理过,官方给出的建议是:通过迁移评估可以将 DM 数据库不兼容的部分先整理出来,使用 DM 语法进行手动修改,在正式迁移时不兼容的对象就不使用工具进行迁移,待其它对象迁移完成后再将修改好的对象导入到 DM 数据库中。
:::info 官网:MySQL 的体系架构是单实例多库,DM 数据库是单库多实例的架构,MySQL 可能是一个 root 用户访问多个库,访问前切换一下当前库即可。从 MySQL 迁移到达梦的时候就需要针对 MySQL 中的每一个库在达梦里面创建一个用户和表空间来对应。例如 MySQL 中有一个库 dbtest,达梦里面先创建一个表空间 dbtest,然后创建一个用户 DBTEST,指定默认表空间为 dbtest ::: :::info 官网:在做 MySQL 迁移的时候要先分析本次迁移需要从源库中移植哪一个库或者哪几个库的数据,然后为每一个库分别在达梦中创建独立的表空间和用户 :::
建议:用户名,表空间名,索引空间名都为大写,并保持一致,要不然可能迁移的时候报各种各样的错,有时候可能还很懵
个人理解: 物理存储容器
:::info 官网:https://eco.dameng.com/document-preview/dm/zh-cn/start/dm-create-tablespace ::: 创建 DBTEST 表空间存储 MySQL 中 dbtest 库迁移过来的数据
-- 创建表空间dbtest,数据文件为DBTEST.DBF。
create tablespace "dbtest" datafile '/data/dmdata/DAMENG/DBTEST.DBF' size 2048 ;:::info 注意:达梦数据库的数据文件在空间不足时自动增长,每次自动增长的大小和表空间空间上限可以自己设置,那如果说超过扩展上限就会导致表空间不足(可能会出现插入数据失败的情况) :::
相关文档: DM8安全管理.pdf 创建 DBTEST 用户并授予权限,使用 dbtest 表空间。
-- 创建用户
create user "DBTEST" identified by "密码"
-- 指定用户DBTEST表空间为dbtest
default tablespace "dbtest"
-- 指定用户DBTEST索引表空间为dbtest
default index tablespace "dbtest";
-- 授予用户DBTEST常规权限
grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to "DBTEST";










建议在转换中,先进行表,再进行迁移数据,这样能避免一些报错,可以看下面的小建议


点击下一步 -> 点击完成

注意:需要勾选启用标志列插入,要不然会出现一种情况就是,自增主键和 mysql 数据库的不一样


# OWNER 后面要替换成自己的用户名
SELECT OBJECT_TYPE,COUNT(*) FROM ALL_OBJECTS WHERE OWNER='USER_NAME' GROUP BY OBJECT_TYPE;CREATE TABLE DM_TABLES
(
TAB_OWNER VARCHAR(100),
TAB_NAME VARCHAR(100),
TAB_COUNT INT
);
DECLARE BEGIN FOR REC IN
(SELECT OWNER,
OBJECT_NAME
FROM ALL_OBJECTS
WHERE OWNER='USER_NAME'
AND OBJECT_TYPE='TABLE'
)
LOOP
EXECUTE IMMEDIATE 'INSERT INTO DM_TABLES SELECT '''|| REC.OWNER ||''','''|| REC.OBJECT_NAME ||''',COUNT(*) FROM '|| REC.OWNER || '.' || REC.OBJECT_NAME;
END LOOP;
END;对比迁移前 mysql 查出来的数据,看对不对得上,表有可能会多一个,因为最后面手动添加了一张 mysql 的信息表

# 注意如果没有这张表 MYSQL_TABLES,可以看一下迁移前准备的语句是不是没有执行,
# 其次看一下是不是表名大小写不一致
SELECT A.TAB_OWNER,
A.TAB_NAME,
A.TAB_COUNT-B.TAB_COUNT
FROM MYSQL_TABLES A,
DM_TABLES B
WHERE A.TAB_OWNER=B.TAB_OWNER
AND A.TAB_NAME=B.TAB_NAME
AND A.TAB_COUNT-B.TAB_COUNT<>0;如果有就补充回达梦数据库
# 找出数据库名中表用到的外键约束
SELECT
TABLE_NAME,COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = '数据库名'
AND REFERENCED_TABLE_NAME IS NOT NULLshow create table 表名;# 类似于下面这一条的就是外键约束,关键字:FOREIGN KEY
CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `qrtz_job_details` (`sched_name`, `job_name`, `job_group`)# 添加外键约束的命令
alter table "模式"."表" add constraint 约束名 foreign key ("外键列名") references "主表名" ("主键列名");