DM数据库迁移
从MySQL移植到DM
一、概述
- DM 数据库和 MySQL 体系结构上存在差异,SQL 语法也存在一定的差异,DM 数据库针对 MySQL 做了良好的兼容性适配。
二、迁移流程
-
迁移流程图
-
流程介绍
- 需求确认
- 数据移植涉及的情况不一样,如天灾人祸、应用改造、数据库版本升级/数据库替换等,需要根据需求针对性选择迁移工具和方案。
- 数据库调研
- 工具版本、驱动版本、基础环境等都会影响迁移工作,需要对源端和目的端数据库及服务器进行调研,确保在满足相关需求下完成迁移
- 确定需求后,需要进行调研的信息:
- 环境信息。提前了解操作系统层面,确定工具能否使用可视化界面,或者端口号开放情况,可以方便在后期部署安装过程中,及时避开处理问题时的一些干扰项。
- 主要包括对服务器、内存、CPU、网络、端口、安全策略、是否具备可视化界面等信息的调研。
- 业务系统信息。提前了解应用系统层面信息,结合应用系统特性,为后面制定迁移策略、迁移时间评估等提供参考。
- 主要包括对业务类型、业务运行时段、停机窗口、数据量、数据增量、并发访问量等信息的调研。
- 数据库信息。提前了解迁移数据量、字符编码、归档保留、数据库对象、表空间等信息,为后续迁移做好规划和相关准备工作。
- 环境信息。提前了解操作系统层面,确定工具能否使用可视化界面,或者端口号开放情况,可以方便在后期部署安装过程中,及时避开处理问题时的一些干扰项。
- 迁移评估
- DM提供两种工具进行迁移前的兼容性评估:
- 数据迁移工具DTS:提供了异构数据源之间的评估,迁移和对比功能。
- DM 数据迁移工具采用向导方式引导用户通过简单的图形化进行兼容性评估操作。(图形化,更快更方便)
- 达梦企业管理器DEM:支持对 ORACLE、MySQL、SQL Server 等主流数据库迁移到达梦数据库进行在线采集评估和自动转化,并提供兼容报告。
- 数据迁移工具DTS:提供了异构数据源之间的评估,迁移和对比功能。
- DM提供两种工具进行迁移前的兼容性评估:
- 移植工具选择
- 三种移植工具:
- 数据迁移工具 DTS
- 数据复制软件 DMDRS
- 数据集成软件 DMDIS
- 根据不同场景选择移植工具
- 三种移植工具:
- 制定移植计划
- 根据需求和调研,结合场景和具体要求,选择合适的迁移工具,制定合理的移植计划
- 移植实施
- 对于异构数据库移植到DM,在正式迁移前,需要根据源端数据库的相关调研信息,对目的库的实例参数、表空间、用户等进行配置,提高数据库的兼容性。
- 同时,DM数据库的迁移工具均具有自动转换功能。大多数情况下,可通过相关迁移工具进行对象和数据移植
- 移植结果校验
- 在迁移完成后,需要确认是否存在迁移后的数据量、数据内容和对象个数与源库不一致的问题,如果不一致应进行对应的维护。必须保证迁移数据准确完整
- 移植后收尾工作
- 移植后的收尾工作包括:索引补录、更新统计信息、备份、整理对象脚本等内容,保障移植工作的完整性。
- 应用移植与优化
- 为了验证系统移植的完整性,还需要进行应用的相关功能和性能测试,确保改造后的应用系统和数据库处于一个最佳状态。
- 需求确认
三、移植过程
-
需求确认及调研
-
需求确认
- 本例使用MySQL8.0,使用DTS工具进行从MySQL到DM数据库的移植
-
数据库调研
-
MySQL源信息
-
环境信息
调研项 说明 应用后台操作系统 Windows 11 数据库后台操作系统 Windows 11 后台数据库 MySQL 应用开发平台 Python -
数据库信息
调研项 说明 数据库架构 单机 节点数 1 数据库版本 MySQL 8.0 待迁移库 jw IP 地址/端口 192.168.xxx.118/3306 服务器运维用户名(密码) root 数据库用户名(密码) xxxxx 字符集编码 utf8 大小写敏感 不敏感 是否以字节为单位 是 -
迁移对象统计
-
统计指定库中表的数目
SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jw' GROUP BY TABLE_SCHEMA;
-
统计指定库中视图的数目
SELECT TABLE_SCHEMA,COUNT(*) VIEWS FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'jw' GROUP BY TABLE_SCHEMA;
- 可以看到,这里jw库是没有视图的
-
统计指定库中所有的存储过程
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_SCHEMA='jw';
-
统计指定库中的所有函数
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE='FUNCTION' AND ROUTINE_SCHEMA='jw';
-
统计指定库中的所有触发器
SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA= 'jw';
-
将指定库中所有表数据量记录到辅助表
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 = 'jw' ORDER BY TABLE_ROWS DESC;
-
-
-
目的端信息
调研项 调研命令 服务器品牌/型号 dmidecode 服务器操作系统 Windows10 内存容量 60G CPU 型号/核数 2/4 端口策略 与目的端口可以互通 安全策略 无
-
-
-
迁移评估
- 可以使用DEM工具进行评估
- 这里我没有去做迁移评估(我无能,没有找到那个工具)
-
制定移植计划
- 先对整库进行一次性迁移,再对不兼容的对象进行补迁
-
迁移准备
-
源端MySQL准备
- 需要停止所有变更操作
-
目的端DM准备
-
数据库版本选择,建议使用最新的版本,保证高兼容性
-
数据库架构选择,这里只是单机的数据库迁移,所以只需要用DM8即可
-
创建迁移用户和表空间
-
针对MySQL的数据库,DM需要先创建一个表空间DBTEST,然后创建一个用户DBTEST,指定默认表空间为dbtest
- 创建dbtest表空间存储MySQL中jw库迁移过来的数据
create tablespace "dbtest" datafile 'C:\dmdbms\data\DAMENG\DBTEST.DBF' size 2048 ;--创建表空间dbtest,数据文件为DBTEST.DBF。
- 创建DBTEST用户并授予权限,使用DBTEST空间
create user "DBTEST" identified by "密码" --创建用户 default tablespace "dbtest"--指定用户DBTEST表空间为dbtest default index tablespace "dbtest";--指定用户DBTEST索引表空间为dbtest grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to "DBTEST";--授予用户DBTEST常规权限
- 这里建议使用图形化方式新建用户(方便)
-
-
-
迁移工具准备
- 使用DTS工具。Windows就在开始菜单处;Linux进入tool目录下执行
./dts
即可运行DTS工具
- 使用DTS工具。Windows就在开始菜单处;Linux进入tool目录下执行
-
-
迁移步骤
-
创建迁移
-
打开DMDTS迁移工具,点击左上方三色小图标新建迁移工程
-
打开刚刚创建的迁移工程,右键点击
迁移
,选择新建迁移
,并自定义迁移名称 -
完成后点击下一步
-
在“其他数据库迁移到达梦”选项中选择迁移方式为“MySQL==>DM”
-
-
连接数据库
迁移方式选择完毕后开始连接数据库,首先连接源端 MySQL 数据库,再连接目的端 DM 数据库。
-
连接源端MySQL数据库
-
输入源端MySQL数据库相关认证信息,选择需要迁移的数据库
-
这里可以指定驱动(驱动从MySQL官网下载)
- https://blog.csdn.net/zcx777123/article/details/134405434 (附上参考文章)
- 这里很可能报错(反正我在这儿报老多错)
- 如果是报的1130,那就是装载MySQL数据库的机器没有开启外连权限,需要开启相关权限
- 如果报的
The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
,那就是MySQL数据库采用的美国时间(默认的),需要矫正时区 - 目前我只遇到这俩玩意儿,如果有新的问题,我也不懂,啊自己网上找资源了
-
-
连接目的端DM数据库
-
输入目的端 DM 数据库相关登录信息,选择与源端对应的迁移用户连接数据库
-
-
-
配置迁移对象及策略
-
迁移对象方式及迁移策略中勾选“保持对象名大小写”
- 当勾选了“使用默认数据类型映射关系”后在迁移时 DTS 会将源端 MySQL 数据库中相应的数据类型采用默认的映射关系映射到目的端 DM 数据库中。
-
勾选源端待迁移的数据库
- 这里需要勾选源端待迁移的数据库,由于 MySQL 端没有模式所以这里模式显示空,并不影响迁移。
-
勾选源端数据库中需要迁移的对象
-
这里可以看到源端待迁移库中所有的对象,用户可以自定义选择 MySQL 需要迁移的具体对象。(我这里是全选了)
-
可以通过点击右上方的“分析源对象”统计选中的源端待迁移对象。用户可以通过该功能对源端迁移对象进行统计分析,包括“源对象统计”、“源表统计”、“源表详细”。
-
-
点击转换,将MySQL数据库对象转为自定义对象迁移策略
-
迁移策略:根据需要设置表及数据迁移的策略。在左侧选项中可以选择“表定义”、“主键”、“约束”、“索引”等的迁移策略;在右侧选项中可以配置与迁移数据相关的策略。
- 部分选项说明:
- 压缩:指定迁移的目的表是否按照压缩方式存储。
- 强制聚集索引:即使源表的主键为非聚集主键,创建目的表时也会被转换为聚集主键。
- 强制非聚集索引:即使源表的主键为聚集主键,创建目的表时也会被转换为非聚集主键。
- 启用标志列插入:如果表上有标志列,则迁移数据时会强制向标志列插入值,以保证源和目的数据完全一致。
- 显示行数:将在迁移任务过程中,显示数据的行数。
- 拷贝记录:如果目的表已存在,直接拷贝记录,不需要创建表。
- 删除后拷贝记录:迁移过程中先删除已存在的目的表,再重新创建新目的表。
- 源一次读取行数:设置从数据源中读取数据时每次读取数据的行数,该参数决定内存中缓存结果集的大小,对于数据量很大的数据源,设置该参数,可以控制内存的使用。
- 目的一次提交行数:设置向目的数据库中每次写入数据的行数。当数据量比较大时,减小该参数的值可以减少内存的使用。但会影响迁移的速度。
- 缓存批数:设置缓存队列的长度。调整该参数可以调整迁移过程中内存的使用。
- 部分选项说明:
-
列映射选项:在列映射选项中可根据需求修改源端迁移到目的端表的列名、数据类型、精度、小数位数、默认值、是否可空、主键、自增列、起始值、增量信息等。
-
完成映射关系的配置后,需要勾选“应用当前选择项到其他同类对象”,选择该选项后,将弹出对话框,选择其他同类对象,将此策略应用到相同对象上。
-
-
-
开始迁移
-
检查迁移任务,确认迁移对象是否正确。
-
迁移完成后可以看到迁移结果
-
-
对象补迁
- MySQL和DM毕竟毕竟是两款不同的数据库,迁移过程中仍会有些差距,可能出现迁移失败,那么就需要手动将出错的进行补迁
-
-
数据校验
-
通过 SQL 脚本分别统计源端 MySQL 和目的端 DM 的对象和数据量,通过对比判断是否迁移完成。脚本验证步骤如下:
- 统计用户下各类对象的数量,在源端和目的端通过对应的系统表进行查询记录对比是否一致。
- 统计用户下的表数量及对应的数据条目,在源端和目的端分别创建辅助表,使用脚本将源端和目的端的表的数量和表的数据量插入到辅助表中,通过查看辅助表内的数据进行比对,验证表的数量和数据量是否一致。
-
统计MySQL端对象及数据
-
统计DM端对象及数据
-
统计DM数据库中相关用户的对象数
-
统计MySQL迁移过来的表的数据量
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 中和在 DM 中统计的对象数量及对象名来检查是否完成所有的对象迁移
-
MySQL端前期调研统计
调研项 说明 库名 jw 表数目 9 视图数目 0 存储过程 0 函数 0 触发器 0 -
目的端迁移后对象统计
调研项 说明 库名 dbtest 表数目 9 视图数目 0 存储过程 0 函数 0 触发器 0
-
-
数量对比
-
通过以下 SQL 命令可以比对表数据量,找出数据量不相等的表重新迁移数据,结果集为空表示源端和目的端数据量一致。
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;
- 我这儿就属于没有不兼容的,都迁移过来了
-
-
-
-
统计信息与备份
-
更新统计信息
-
按模式更新统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS( 'DBTEST', --DBTEST 为模式名,需要根据实际情况修改为自己的模式名。 100, FALSE, 'FOR ALL COLUMNS SIZE AUTO');
-
按照表进行统计信息的收集:
DBMS_STATS.GATHER_TABLE_STATS( 'DBTEST',--用户名 'dbtest',--表名 null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
-
-
备份
- 在对数据更新完统计信息后,在数据量不大,磁盘空间足够的情况下应进行一次数据备份工作,避免在数据验证过程中对数据产生修改需要重新迁移。数据备份有三种方式:
- 正常停止数据库后,拷贝备份到实例目录或保存数据文件的其他目录;
- 开启归档日志后,进行物理备份;
- 逻辑备份,使用 dexp 工具进行逻辑导出。
- 在对数据更新完统计信息后,在数据量不大,磁盘空间足够的情况下应进行一次数据备份工作,避免在数据验证过程中对数据产生修改需要重新迁移。数据备份有三种方式:
-
-
应用迁移
- 一般情况下,MySQL 数据库迁移完成后,需要更换应用连接 MySQL 数据源到达梦数据库。
-
性能优化
-
数据库和应用系统移植完毕后开启 sql 日志,对系统进行全面测试,排除移植过程中错误的地方,对慢的 sql 语句进行优化。
-
通过在 sqllog.ini 中设置 SQL 过滤规则来记录需要优化的 SQL
--设置SQL过滤规则 SQL_TRACE_MASK=2:3:22:23:25:28---指定 SQL 日志中需要被记录的语句类型,详细说明可参考达梦数据库安装目录下doc目录中《DM8系统管理员手册》。 MIN_EXEC_TIME=500 --记录执行时间大于500毫秒的SQL,用户需根据实际情况设置。
-
从Oracle移植到DM
迁移过程
-
需求确认与调研
-
需求确认
- 本例使用Oracle11g答单机来演示
-
数据库调研
-
Oracle源端信息
调研项 调研结果 数据库后台操作系统 Windows10 数据库架构 单机 数据库版本 Oracle 11g 待迁移数据库名 oracletest1 带迁移的模式名 scott IP/端口信息 192.168.19.128/1521 用户名/密码 xxxxx 字符集编码 简体中文 GBK 需要移植的对象 表(数据量)、物化视图、触发器、存储过程、函数 -
DM目的端信息
调研项 调研命令 服务器品牌/型号 DM8 服务器操作系统 Windows10 内存容量 60G CPU 型号/核数 2/4 端口策略 与目的端互通 安全策略 没有安全限制
-
-
-
迁移评估
-
可以使用DEM进行评估
-
可以使用DTS进行迁移评估
-
选择评估模版,右键新建评估
-
连接到源端数据库,选择评估项目
-
选择评估模式,点击下一步
-
选择评估的具体对象,点击下一步
-
查看迁移对象详情总览
-
查看评估结果
-
点击查看评估报告,也可以导出为HTML文件形式
-
对于不兼容情况,可以双击不兼容的地方,查看详情
-
-
-
制定移植计划
-
先对整库进行一次性迁移,再对迁移失败的或不兼容的对象进行手动迁移
-
DM数据库创建迁移用户和表空间
-
创建dbtest表空间存储迁移过来的数据
create tablespace "dbtest" datafile 'C:\dmdbms\data\DAMENG\DBTEST.DBF' size 2048; --创建表空间dbtest,数据文件为DBTEST.DBF,打开数据库文件自动扩展。
- 这里注意,如果前面MySQL创建了表空间,那就先删掉或者表空间名儿改掉
-
创建ORCL_DM用户并授权,使用dbtest表空间
create user "ORCL_DM" identified by "密码" --创建用户 default tablespace "dbtest"--指定用户ORCL_DM表空间为dbtest default index tablespace "dbtest";--指定用户ORCL_DM索引表空间为dbtest grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to "ORCL_DM";--授予用户ORCL_DM常规权限
-
-
-
数据库移植
-
迁移步骤
-
创建迁移
-
打开上方的三色图标新建迁移工程
- 这里我在上面使用MySQL迁移时创建了,就不再新来一个了
-
点击迁移,右键选择【新建迁移】
-
新建迁移,取名字(就取一眼就看得出谁到谁的那种)
-
新建迁移完成后,点击下一步
-
选择迁移方式(这里肯定是Oracle==>DM)
-
-
连接数据库
-
连接源端Oracle数据库
-
这里需要指定驱动
-
-
连接目的数据库
- 这里因为两个数据库都装在同一个系统上,所以主机名都是localhost,如果是不同的系统,那这里就要填写数据库对应的IP地址
-
-
配置迁移对象及策略
-
迁移对象方式及策略中勾选“保持对象名大小写”,勾选“使用默认数据类型映射关系”
-
-
勾选源端待迁移的模式
-
勾选源端数据库中需要迁移的模式下的数据对象
注意
在 SQL 评估阶段不兼容的对象不需要勾选,待其它对象迁移完成后,再手动修改和导入这些不兼容的对象
-
用户可以通过点击右上方的“分析源对象”统计选中的源端待迁移对象
-
-
自定义对象策略
-
点击转换,可以设置表的映射关系
-
列映射选项,可根据需求修改源端迁移到目的端表的列名、数据类型、精度、小数位数、默认值、是否可空、主键、自增列、起始值、增量信息等
-
完成映射关系的配置后,需要勾选“应用当前选择项到其他同类对象”,选择该选项后,将弹出对话框,选择其他同类对象,将此策略应用到相同对象上
-
-
开始迁移
-
检查迁移任务,确认迁移对象是否正确
-
确认后点击完成,开始迁移
-
-
对象迁移
- 由于 Oracle 和 DM 数据库在某些语法使用上存在差异,导致某些对象可能会迁移失败,再加上在迁移评估阶段语法不兼容的对象,需要根据 DM 语法手动修改这些无法使用工具迁移的对象再导入到 DM 数据库中
- 这里我的就是有数据没有迁移过来,所以需要手动进行迁移
-
-
数据校验
-
统计源端对象及数据库
-
在源端用辅助表table_count来统计模式下所有表的数据量
-
-
统计目的端对象及对象
- 在目的端用辅助表table_count来统计模式下所有表的数据量
-
-
总结
- 本章说了两个数据库到DM的迁移,oracle的迁移我只展示了迁移过程,不过其余部分和MySQL的迁移没啥区别。总的来说算是比较成功,当然迁移过后需要对比两者的数据啥的(这里我是使用的迁移报告进行对比,就不展示了),毕竟迁移不能把原有的数据给丢了,这是不成功的。