暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

达梦数据库迁移(MySQL_to_DM)

IT小Chen 2023-07-23
3033

基本信息:

类型

数据库

IP:端口

版本

迁移对象

源库

MySQL

172.16.11.101:13309

5.7.24

表、视图、存储过程等对象

目标库

达梦DM

172.16.11.101:5238

DM V8

迁移说明:

DM数据迁移工具提供了主流大型数据库迁移到DMDMDM、文件迁移到DM以及DM迁移到文件的功能。

DM数据迁移工具采用向导方式引导用户通过简单的步骤完成需要的操作。

可以使用 DM 数据迁移工具 (DTS),进行 MySQL DM 的迁移,MySQL DM 数据库的语法兼容性不高。

关于语法,对于表、视图或游标等对象的创建语法存在不同,需要基于 DM 数据库的语法进行改写;

部分 MySQL 数据库自带的系统包、函数、存储过程在 DM 数据库中也不支持,同样需要手动改写或重建相同功能的对应对象。

关于数据,MySQL 中的某些数据,在 DM 中可能会被判定为不合法,需要进行修改。

DM数据迁移工具支持:

◆ 主流大型数据库OracleSQLServerMySQLDB2PostgreSQLInformixKingbaseSybase的模式、表、视图、序列、索引迁移到DM

ODBC数据源、JDBC数据源的模式、表、视图迁移到DM

DM数据库的模式、表、视图、序列、索引迁移到主流大型数据库Oracle

DM数据库之间模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限的迁移;

DM数据库模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限迁移到XML文件;

DM数据库模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限迁移到SQL脚本文件;

DM数据库的表、视图数据迁移到文本文件;

DM数据库的表、视图数据迁移到Excel文件;

DM数据库的表、视图数据迁移到Word文件;

SQL脚本文件迁移到DM数据库;

XML文件迁移到DM数据库;

◆ 指定格式的文本文件、Word文件和Excel文件迁移到DM数据库。

迁移前准备:

1.修改达梦数据库参数

在迁移数据之前,需要修改 DM 数据库参数,修改兼容参数为兼容 MySQL 数据库 COMPATIBLE_MODE=4 ,重启数据库服务使其生效即可。

    [dmdba@cjc-db-03 CHEN]$ pwd
    /dm8/data/CHEN
    [dmdba@cjc-db-03 CHEN]$ vi dm.ini

    默认0,改成4。

    数字代表的含义:

    #Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata

    修改:

    COMPATIBLE_MODE = 4

    重启DM数据库

      [root@cjc-db-03 ~]# systemctl stop DmServiceCJC.service
      [root@cjc-db-03 ~]# systemctl start DmServiceCJC.service

      2.创建目标用户

      注意:生产库需要创建用户对应的表空间,权限最小化。

        disql SYSDBA/******:5238
        SQL> create user CJC identified by "******";
        SQL> grant dba to CJC;

        3.生成测试数据

        测试环境,新增测试数据

        ###MySQL 5.7.24

          mysql> create database cjcdb;
          mysql> grant all privileges on cjcdb.* to cjc@'%';
          mysql> flush privileges;

          ###新增测试数据

            [mysql@cjc-db-03 ~]$ mysql -ucjc -p

            ###新增表

              mysql> CREATE TABLE T1(ID INT,NAME varchar(30),key(ID));
              mysql> INSERT INTO T1 VALUES(1,'AAA');
              mysql> INSERT INTO T1 VALUES(2,'BBB');
              mysql> INSERT INTO T1 VALUES(3,'CCC');

              ###新增视图

                mysql> create view v_t1 as select name from t1 where id=1;

                ###新增存储过程

                  DELIMITER $$
                  CREATE PROCEDURE p_t1_avg()
                  BEGIN
                  SELECT avg(id) from t1;
                  END$$;
                  DELIMITER;
                  mysql> use cjcdb
                  Database changed
                    mysql> call p_t1_avg();
                    +---------+
                    | avg(id) |
                    +---------+
                    | 2.0000 |
                    +---------+
                    1 row in set (0.31 sec)
                    Query OK, 0 rows affected (0.31 sec)

                    迁移:

                    1.打开DTS迁移工具

                    可以打开达梦数据库服务器上自带的DTS工具

                      [dmdba@cjc-db-03 tool]$ export DISPLAY=172.16.11.73:0.0
                      [dmdba@cjc-db-03 tool]$ sh dts

                      如果无法启用图形,可以在windows系统上安装达梦工具。

                      2.新建工程

                      3.新建迁移

                      欢迎界面

                      4.选择源库、目标库数据类型

                      5.配置源数据库信息

                      刷新,下一步

                      6.配置目标数据库信息

                      注意:

                      默认是SYSDBA,建议使用单独的业务用户,不要将业务数据存放在SYSDBA用户下。

                      7.迁移选项

                      注意:

                      去掉 保持对象名大小写 ,达梦数据库不支持小写对象名。

                      8.查看默认类型映射关系

                      9.指定模式、对象

                      转换,查看映射关系

                      分析对象

                      10.开始迁移

                      下一步

                      可以看到,对象名,自动转换为大写

                      完成

                      迁移报告

                      迁移详细

                      迁移后检查:

                      1.查看对象

                      迁移前

                        SQL> select object_name,object_type from dba_objects where owner='CJC';
                        LINEID OBJECT_NAME OBJECT_TYPE
                        ---------- ----------- -----------
                        1 CJC SCH

                        迁移后

                          SQL> select object_name,object_type from dba_objects where owner='CJC';
                          LINEID OBJECT_NAME OBJECT_TYPE
                          ---------- ----------- -----------
                          1 CJC SCH
                          2 P_T1_AVG PROCEDURE
                          3 V_T1 VIEW
                          4 T1 TABLE
                          5 ID INDEX
                          6 INDEX33555469 INDEX
                          6 rows got
                          used time: 10.446(ms). Execute id is 1411.

                          2.查看表数据

                            SQL> select * from cjc.t1;
                            LINEID ID NAME
                            ---------- ----------- ----
                            1 1 AAA
                            2 2 BBB
                            3 3 CCC
                            used time: 0.993(ms). Execute id is 1412.

                            3.查看视图

                              SQL> select * from cjc.v_t1;
                              LINEID NAME
                              ---------- ----
                              1 AAA
                              used time: 1.241(ms). Execute id is 1413.

                              4.查看存储过程

                                SQL> call cjc.p_t1_avg;
                                LINEID AVG(ID)
                                ---------- --------
                                1 2.000000
                                used time: 1.732(ms). Execute id is 1414.

                                5.查看对象创建语句

                                视图

                                存储过程

                                迁移遇到的问题:

                                1.无法连接源MySQL数据库

                                连接MySQL库失败,提示如下:

                                错误号: 0

                                错误消息: Communications link failure

                                The last packet successfully received from the server was 20 milliseconds ago. The last packet sent successfully to the server was 12 milliseconds ago.

                                解决方案:

                                1.下载驱动

                                驱动路径下载

                                https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.11

                                驱动文件名:mysql-connector-java-8.0.11.jar

                                2.使用自定义URL

                                  jdbc:mysql://172.16.11.101:13309/<databaseName>?tinyInt1isBit=false&transformedBit1sBoolean=false

                                  改成

                                    jdbc:mysql://172.16.11.101:13309/cjcdb?tinyInt1isBit=false&transformedBit1sBoolean=false&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true

                                    3.驱动路径

                                    指定新下载的mysql-connector-java-8.0.11.jar驱动文件

                                    刷新,下一步

                                    查看mysql-connector-javaMySQL数据库的版本对应关系:

                                    参考链接:https://php-note.com/1934.html

                                    2.INVALID OBJECT NAME

                                    建议后检查对象和数据,报错:

                                    无法查看表结构

                                      SQL> desc cjc.t1;
                                      [-20001]:INVALID OBJECT NAME
                                      -20001: OBJ_IS_EXISTS line 201
                                      -20001: SHOW_PARA_INFO line 302 .
                                      used time: 4.056(ms). Execute id is 0.

                                      无法查看表数据

                                        SQL> select * from cjc.t1;
                                        select * from cjc.t1;
                                        [-2106]:Error in line: 1
                                        Invalid table or view name [T1].
                                        used time: 0.528(ms). Execute id is 0.

                                        无法查看视图等

                                          SQL> select * from cjc.v_t1;
                                          select * from cjc.v_t1;
                                          [-2106]:Error in line: 1
                                          Invalid table or view name [V_T1].
                                          used time: 0.589(ms). Execute id is 0.

                                          问题原因:

                                          前面配置迁移选项,默认勾选了 保持对象名大小写。

                                          由于MySQL数据库支持小写对象名,但达梦数据库不支持小写对象名,所以迁移后无法正确识别和使用对象数据。

                                          通过管理工具可以看到,迁移后的对象名都是小写。

                                          查看建表语句

                                          达梦数据库会将对象小写名称自动转换为大写

                                          新建表t2,小写

                                            SQL> create table cjc.t2(id int);

                                            插入数据

                                              SQL> insert into cjc.t2 values(1);
                                              SQL> commit;

                                              表名会被自动转换为大写

                                              解决方案:

                                              迁移选项部分 去掉 保持对象名大小写 部分,重新迁移。

                                              参考:

                                                DM 数据迁移工具
                                                https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-migrate.html
                                                MySQL 迁移到 DM
                                                https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html
                                                DM DBA手记之MySQL移植到DM.pdf
                                                https://eco.dameng.com/eco-file-server/file/eco/download/2022081614103389JN7U46DVP8TURGBF
                                                达梦迁移工具连接 mysql 数据库错误,mysql5.7迁移到dm8
                                                https://blog.csdn.net/weixin_44990616/article/details/129078603

                                                ###chenjuchao 20230722###

                                                文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                评论