记一次达梦数据库的迁移-从MYSQL迁移到DM数据库

        随着数据库技术的发展,以及国家政策的支持,中国的数据库市场尤其是在中国IT技术国产化追赶的脚步下,以芯片,操作系统和数据库技术方面发展迅速。中国的数据库市场上目前的现状仍然是以ORACLE、DB2和 MS SQLserver以及MYSQL 为主并占据了主要市场份额,但是可以看到传统外国数据库厂商的市场份额在持续下降。在产品技术类型方面,随着非关系型和混合型数据库的发展,部分原来属于关系型数据库的市场必将替换为更适应适应于业务场景的非关系型和混合型数据库。同时,开源数据库和国产数据库厂商也在持续发力,以后在数据库产品市场必将会以国产数据库为主,外国的数据库产品会越来越少,同时国内各数据库厂商不会一家独大,一定是各种国产数据库百花齐放的场面出现。当前企业在综合考虑费用和性能的同时,会在不同的国产数据库中进行替换,同时各个数据库厂商在抢占市场的时候也会向客户推介替换掉国外的传统数据库,这也推动了国产数据库的不断发展。因而在这种情形下,异构数据库之间进行数据迁移的场景,尤其是从传统的ORACLE、DB2和SQLerver以及MYSQL数据库迁移到到国产数据库的场景会逐渐增多。

        达梦数据库作为国产数据库产品的先行者和市场份额的重要参与者,这里以某个业务系统从MYSQL数据库迁移到达梦数据库的异构数据库迁移过程。

        业务系统数据库异构移植过程,和普通部署数据库,搭建架构不同的是,由于原数据中通常已经有业务数据,为了迁移后更好的运行,首先需要对原来使用的应用平台和数据库进行环境情况的记录分析。这里将整个迁移过程分为四部分,如下说明。

第一部分、前期对业务系统后台架构的调研收集信息

以某业务系统mysql数据库迁移到达梦数据库为例,有以下表格内的几个方面需要统计记录:

1

应用程序部署的服务器操作系统

2

应用程序开发语言和平台

3

应用程序开发数据库接口

4

数据库部署的服务器操作系统

5

数据库产品类型和版本:

6

需要移植的数据库对象:

(通常包括表、视图、存储过程、触发器、函数、自定义类型等)

第二部分、迁移前收集MYSQL数据库信息,及创建移植辅助表

1、在MYSQL数据库上查询大小写敏感性、数据库和用户,并确认

可以通过向业务系统开发及后台管理人员,最终确认待迁移的用户和库。命令如下:

show variables like '%case_table%';

show databases;

select username from dba_users ;

其中,%case_table%变量的值为0是区分大小写的,1是不区分大小写的。

2、统计 MySQL 数据中的对象以及表数据量

根据指定用户统计用户下的对象数目,其中以下语句中的db_name,要替换为前面查询并确认的数据库名称。

(1)统计表数目

SELECT count(*) TABLES, table_schema FROM information_schema.TABLES where table_schema = 'db_name' GROUP BY table_schema; 

(2)统计存储过程

select `name` from MySQL.proc where db = 'db_name' and `type` = 'PROCEDURE';

(3)统计函数

select `name` from MySQL.proc where db = 'db_name' and `type` = 'FUNCTION'

3、在MYSQL数据库中创建辅助表,并插入移植对象的统计数据

create table MySQLs_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int);

insert into MySQLs_tables  select TABLE_SCHEMA,table_name,table_rows from information_schema.TABLES  where TABLE_SCHEMA = 'db_name' order by table_rows desc;

select * from MySQLs_tables;

4、安装部署DM数据库并配置相关参数

        4.1安装DM数据库软件

                此处不在说明安装步骤,命令示例如下: ./DMInstall.bin -i ,然后按照提示进行安装。

        4.2初始化数据库

                需要根据mysql数据库确认的字符集、pagesize、大小写敏感性进行数据库的初始化

                示例说明,如下:

./dminit PATH=/data/dmdbms PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=1 CASE_SENSITIVE=N

        4.3 修改dm.ini文件兼容MYSQL数据库参数

                修改 COMPATIBLE_MODE的参数值为4

                不同的值兼容不同的数据库。具体可参见达梦官网数据库手册

        4.4 建库后查询数据库参数,再次验证数据库初始化操作的正确性

                select page;

                select unicode;

                select case_sensitive; 

5、在DM达梦数据库创建表空间和用户,对应MYSQL数据库中的用户和库

确认mysql移植的是哪几个用户的数据,然后创建用户和用户对应的表空间,以下为示例命令:

 CREATE TABLESPACE "TEST" DATAFILE 'TEST.DBF' SIZE 128 AUTOEXTEND ON NEXT 2048;

CREATE USER "TEST" IDENTIFIED BY "TEST1234" DEFAULT TABLESPACE "TEST" DEFAULT INDEX TABLESPACE "TEST";

GRANT "PUBLIC","RESOURCE","VTI","SOI" TO "TEST";

ALTER USER "TEST" LIMIT  FAILED_LOGIN_ATTEMPS UNLIMITED, PASSWORD_LOCK_TIME UNLIMITED, PASSWORD_GRACE_TIME UNLIMITED;

创建用户和表空间的步骤,根据用户的数量可分别执行多次,创建相应的用户和表空间

以上,准备工作已经做完。下一步可以进行数据迁移工作。     

第三部分、数据库迁移工作

达梦数据库有独创的DTS数据迁移同步工具,可以使用 DTS进行MYSQL到DM达梦数据的迁移

3.1、表、视图和数据的迁移

新建工程,主要是填写工程名

在右侧的目录树,在工程下有迁移项目,右键点击,选择新建迁移,主要是填写迁移名称

 

点击,下一步。 

选择迁移方式,此次选择  MYSQL ==> DM8

配置迁移信息。连接MYSQL数据源,和DM数据库目的端。

 选择“从数据源复制对象”,选择目的模式。

选择要迁移的数据对象

审阅迁移任务,点击“完成”按钮。

迁移任务完成,成功如下图。

注:如果迁移工作中有失败提示,可以查看每条失败记录的操作的失败详细信息。查看失败信息后,可在工具中根据提示点击操作按钮,进行重复迁移操作。  

注:MYSQL迁移到DM数据库中常见的几个问题

  1. MySQL 的字段可以定义 CURRENT_TIMESTAMP 类型,

   在选中创建失败的表之后,点击下方“转换”按钮,然后进行字段类型中将CURRENT_TIMESTAMP()改为sysdate,即可。

         2.在 MySQL 中时间类型 TIMESTAMP 默认 default 值的问题。

        和 处理 CURRENT_TIMESTAMP类型的方法基本一样,在选中创建失败的表之后,点击下方“转换”按钮,然后进行字段类型中默认值修改为'0001-01-01',即可。

以上问题可以在DTS工具中的转换界面进行输入解决。

3.2、触发器和存储过程的迁移

首先,可以先从 MySQL 导出用户对象 sql 脚本,MySQL 导出存储过程及函数的执行命令:

MySQLdump -hhostname -uusername -ppassword -ntd -R databasename > prorandfunc.sql

然后,将导出的 sql 脚本,经人工修改之后,再导入到达梦数据库中运行。

3.3、检查DM达梦数据库中迁移过来的数据,并进行比对

        a. 根据指定用户统计用户下的各对象类型和数目

        select object_type,count(*) from all_objects where owner='OATEST' group by

object_type;

        b. 统计指定用户下所有的对象,并记录到新的记录表中

create table dm_objects(

obj_owner varchar(100),obj_name varchar(100),obj_type varchar(50) );

insert into dm_objects select owner,object_name,object_type from all_objects where

owner='OATEST';

        c. 统计每个表的数据量到表数据记录表

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='OATEST'

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;

select * from dm_tables;

        d.对比达梦数据库中对象和 MySQL 库中对象以及数据量差异

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 .tab_count-b.tab_count<>0;

第四部分,迁移收尾工作:

  1. 更新统计信息

        统计信息更新脚本示例如下:

        DBMS_STATS.GATHER_SCHEMA_STATS( 'HNSIMIS', 100, FALSE, 'FOR ALL COLUMNS SIZE AUTO');

        ------其中 HNSIMIS 为模式名

        2.开启归档并备份数据库

        ALTER DATABASE MOUNT ;

        ALTER DATABASE  ARCHIVELOG ;

        ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/DAMENG/arch_log, TYPE = local,

        FILE_SIZE = 1024, SPACE_LIMIT = 2048';

        ALTER DATABASE OPEN ; 

        在disql 模式下,进行联机备份

        select checkpoint(100);

        BACKUP DATABASE  FULL BACKUPSET  '/dmdata/DAMENG/dm_bak/db_fullbak_01';

        3. 数据库对象脚本定义备份保留

        脚本对象导出可通过达梦数据迁移 DTS 工具来进行。执行步骤如下:

        后面直接点“下一步”即可。

至此,数据库的迁移部分应完成。

但是数据库迁移后,业务系统若要能运行起来,通常还要配合应用进行配置。

此处以java为例进行简要说明: 

DM的驱动分为 DMJdbcDriver14、DMJdbcDriver15、DMJdbcDriver16、DMJdbcDriver17,分别 对应 Jdk1.4、Jdk1.5、Jdk1.6、jdk1.7; Jdbc 驱动包路径在安装路径下的drivers/jdbc目录下。 

应用程序文件中配置 DM的驱动:

定义 DM JDBC 驱动串

String jdbcString = "dm.jdbc.driver.DmDriver";

定义 DM URL 连接串

String urlString = "jdbc:dm://SHRSG?comOra=true"; --集群的服务名连接方式

String urlString = "jdbc:dm://127.0.0.1:5236 "; --单机连接方式

如果使用了 hibernate,需要进行 dialect 的配置修改,如下:

hibernate.dialect=org.hibernate.dialect.DmDialect

如果是其他非java类型应用的配置问题,具体参见达梦官网手册。

达梦技术社区 https://eco.dameng.com

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dm数据库MySQL数据库是两种不同的关系型数据库管理系统(RDBMS)。它们在以下几个方面有一些差异: 1. 历史和开发者:DM数据库是由中国科学院计算技术研究所开发的,而MySQL是由瑞典公司MySQL AB开发的。 2. 数据类型:DM数据库支持更多的数据类型,包括位图索引、空间数据类型、JSON数据类型等,而MySQL的数据类型相对较少。 3. 存储引擎:DM数据库使用自家开发的存储引擎,支持事务处理、并发控制和ACID(原子性、一致性、隔离性和持久性)特性。而MySQL具有多个存储引擎可供选择,如InnoDB、MyISAM等。 4. 分区表功能:DM数据库提供了分区表功能,可以将大表分割为更小的片段,以提高查询性能和管理效率。MySQL在某些存储引擎上也支持分区表,但不是所有存储引擎都支持。 5. SQL语法:虽然两者都符合SQL标准,但在某些方面存在细微差异,如DM数据库对日期和时间函数的支持更丰富。 6. 性能和扩展性:DM数据库在处理大规模并发访问时表现较好,并且支持分布式数据库集群。MySQL在小规模应用和简单查询方面表现良好,但在处理大规模数据和高并发负载时可能需要更多的优化和调整。 总的来说,DM数据库MySQL数据库都是强大的关系型数据库管理系统,适用于不同的应用场景和需求。选择哪个取决于具体的业务需求、性能要求和开发团队的偏好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值