数据库迁移

DM数据库迁移

从MySQL移植到DM

一、概述

  • DM 数据库和 MySQL 体系结构上存在差异,SQL 语法也存在一定的差异,DM 数据库针对 MySQL 做了良好的兼容性适配。

二、迁移流程

  • 迁移流程图

    在这里插入图片描述

  • 流程介绍
    • 需求确认
      • 数据移植涉及的情况不一样,如天灾人祸、应用改造、数据库版本升级/数据库替换等,需要根据需求针对性选择迁移工具和方案。
    • 数据库调研
      • 工具版本、驱动版本、基础环境等都会影响迁移工作,需要对源端和目的端数据库及服务器进行调研,确保在满足相关需求下完成迁移
      • 确定需求后,需要进行调研的信息:
        • 环境信息。提前了解操作系统层面,确定工具能否使用可视化界面,或者端口号开放情况,可以方便在后期部署安装过程中,及时避开处理问题时的一些干扰项。
          • 主要包括对服务器、内存、CPU、网络、端口、安全策略、是否具备可视化界面等信息的调研。
        • 业务系统信息。提前了解应用系统层面信息,结合应用系统特性,为后面制定迁移策略、迁移时间评估等提供参考。
          • 主要包括对业务类型、业务运行时段、停机窗口、数据量、数据增量、并发访问量等信息的调研。
        • 数据库信息。提前了解迁移数据量、字符编码、归档保留、数据库对象、表空间等信息,为后续迁移做好规划和相关准备工作。
    • 迁移评估
      • DM提供两种工具进行迁移前的兼容性评估:
        • 数据迁移工具DTS:提供了异构数据源之间的评估,迁移和对比功能。
          • DM 数据迁移工具采用向导方式引导用户通过简单的图形化进行兼容性评估操作。(图形化,更快更方便)
        • 达梦企业管理器DEM:支持对 ORACLE、MySQL、SQL Server 等主流数据库迁移到达梦数据库进行在线采集评估和自动转化,并提供兼容报告。
    • 移植工具选择
      • 三种移植工具:
        • 数据迁移工具 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工具
  • 迁移步骤

    • 创建迁移

      • 打开DMDTS迁移工具,点击左上方三色小图标新建迁移工程

        在这里插入图片描述

      • 打开刚刚创建的迁移工程,右键点击迁移,选择新建迁移,并自定义迁移名称

        在这里插入图片描述

      • 完成后点击下一步

        在这里插入图片描述

      • 在“其他数据库迁移到达梦”选项中选择迁移方式为“MySQL==>DM”

        在这里插入图片描述

    • 连接数据库

      迁移方式选择完毕后开始连接数据库,首先连接源端 MySQL 数据库,再连接目的端 DM 数据库。

      • 连接源端MySQL数据库

      • 连接目的端DM数据库

        • 输入目的端 DM 数据库相关登录信息,选择与源端对应的迁移用户连接数据库

          在这里插入图片描述

    • 配置迁移对象及策略

      • 迁移对象方式及迁移策略中勾选“保持对象名大小写”

        在这里插入图片描述

        • 当勾选了“使用默认数据类型映射关系”后在迁移时 DTS 会将源端 MySQL 数据库中相应的数据类型采用默认的映射关系映射到目的端 DM 数据库中。
      • 勾选源端待迁移的数据库

        • 这里需要勾选源端待迁移的数据库,由于 MySQL 端没有模式所以这里模式显示空,并不影响迁移。

        在这里插入图片描述

      • 勾选源端数据库中需要迁移的对象

        在这里插入图片描述

        • 这里可以看到源端待迁移库中所有的对象,用户可以自定义选择 MySQL 需要迁移的具体对象。(我这里是全选了)

        • 可以通过点击右上方的“分析源对象”统计选中的源端待迁移对象。用户可以通过该功能对源端迁移对象进行统计分析,包括“源对象统计”、“源表统计”、“源表详细”。

          在这里插入图片描述

      • 点击转换,将MySQL数据库对象转为自定义对象迁移策略

        • 迁移策略:根据需要设置表及数据迁移的策略。在左侧选项中可以选择“表定义”、“主键”、“约束”、“索引”等的迁移策略;在右侧选项中可以配置与迁移数据相关的策略。

          在这里插入图片描述

          • 部分选项说明:
            • 压缩:指定迁移的目的表是否按照压缩方式存储。
            • 强制聚集索引:即使源表的主键为非聚集主键,创建目的表时也会被转换为聚集主键。
            • 强制非聚集索引:即使源表的主键为聚集主键,创建目的表时也会被转换为非聚集主键。
            • 启用标志列插入:如果表上有标志列,则迁移数据时会强制向标志列插入值,以保证源和目的数据完全一致。
            • 显示行数:将在迁移任务过程中,显示数据的行数。
            • 拷贝记录:如果目的表已存在,直接拷贝记录,不需要创建表。
            • 删除后拷贝记录:迁移过程中先删除已存在的目的表,再重新创建新目的表。
            • 源一次读取行数:设置从数据源中读取数据时每次读取数据的行数,该参数决定内存中缓存结果集的大小,对于数据量很大的数据源,设置该参数,可以控制内存的使用。
            • 目的一次提交行数:设置向目的数据库中每次写入数据的行数。当数据量比较大时,减小该参数的值可以减少内存的使用。但会影响迁移的速度。
            • 缓存批数:设置缓存队列的长度。调整该参数可以调整迁移过程中内存的使用。
        • 列映射选项:在列映射选项中可根据需求修改源端迁移到目的端表的列名、数据类型、精度、小数位数、默认值、是否可空、主键、自增列、起始值、增量信息等。

          在这里插入图片描述

        • 完成映射关系的配置后,需要勾选“应用当前选择项到其他同类对象”,选择该选项后,将弹出对话框,选择其他同类对象,将此策略应用到相同对象上。

          在这里插入图片描述

    • 开始迁移

      • 检查迁移任务,确认迁移对象是否正确。

        在这里插入图片描述

      • 迁移完成后可以看到迁移结果

        在这里插入图片描述

    • 对象补迁

      • MySQL和DM毕竟毕竟是两款不同的数据库,迁移过程中仍会有些差距,可能出现迁移失败,那么就需要手动将出错的进行补迁
  • 数据校验
    • 通过 SQL 脚本分别统计源端 MySQL 和目的端 DM 的对象和数据量,通过对比判断是否迁移完成。脚本验证步骤如下:

      1. 统计用户下各类对象的数量,在源端和目的端通过对应的系统表进行查询记录对比是否一致。
      2. 统计用户下的表数量及对应的数据条目,在源端和目的端分别创建辅助表,使用脚本将源端和目的端的表的数量和表的数据量插入到辅助表中,通过查看辅助表内的数据进行比对,验证表的数量和数据量是否一致。
    • 统计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;
          

          在这里插入图片描述

          • 我这儿就属于没有不兼容的,都迁移过来了
  • 统计信息与备份
    • 更新统计信息

      1. 按模式更新统计信息:

        DBMS_STATS.GATHER_SCHEMA_STATS(
        'DBTEST', --DBTEST 为模式名,需要根据实际情况修改为自己的模式名。
        100,
        FALSE,
        'FOR ALL COLUMNS SIZE AUTO');
        
      2. 按照表进行统计信息的收集:

        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)

          在这里插入图片描述

      • 连接数据库

      • 配置迁移对象及策略

        • 迁移对象方式及策略中勾选“保持对象名大小写”,勾选“使用默认数据类型映射关系”

          在这里插入图片描述

      • 勾选源端待迁移的模式

        在这里插入图片描述

      • 勾选源端数据库中需要迁移的模式下的数据对象

        在这里插入图片描述

        注意

        在 SQL 评估阶段不兼容的对象不需要勾选,待其它对象迁移完成后,再手动修改和导入这些不兼容的对象

        • 用户可以通过点击右上方的“分析源对象”统计选中的源端待迁移对象

          在这里插入图片描述

      • 自定义对象策略

        • 点击转换,可以设置表的映射关系

          在这里插入图片描述

        • 列映射选项,可根据需求修改源端迁移到目的端表的列名、数据类型、精度、小数位数、默认值、是否可空、主键、自增列、起始值、增量信息等

          在这里插入图片描述

        • 完成映射关系的配置后,需要勾选“应用当前选择项到其他同类对象”,选择该选项后,将弹出对话框,选择其他同类对象,将此策略应用到相同对象上

          在这里插入图片描述

      • 开始迁移

        • 检查迁移任务,确认迁移对象是否正确

          在这里插入图片描述

        • 确认后点击完成,开始迁移

          在这里插入图片描述

      • 对象迁移

        • 由于 Oracle 和 DM 数据库在某些语法使用上存在差异,导致某些对象可能会迁移失败,再加上在迁移评估阶段语法不兼容的对象,需要根据 DM 语法手动修改这些无法使用工具迁移的对象再导入到 DM 数据库中
        • 这里我的就是有数据没有迁移过来,所以需要手动进行迁移
    • 数据校验

      • 统计源端对象及数据库

        • 在源端用辅助表table_count来统计模式下所有表的数据量

          在这里插入图片描述

      • 统计目的端对象及对象

        • 在目的端用辅助表table_count来统计模式下所有表的数据量

总结

  • 本章说了两个数据库到DM的迁移,oracle的迁移我只展示了迁移过程,不过其余部分和MySQL的迁移没啥区别。总的来说算是比较成功,当然迁移过后需要对比两者的数据啥的(这里我是使用的迁移报告进行对比,就不展示了),毕竟迁移不能把原有的数据给丢了,这是不成功的。

参考

  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值