MySQL迁移到DM

MySQL迁移到DM

⚠️从MySQL迁移到DM,要求必须创建新的用户和表空间,不要把数据迁移到系统管理员SYSDBA用户下和MAIN表空间下。

首先需要分析本次迁移MySQL源库需要迁移的是哪一个或者哪几个用户的数据,然后分别创建这些需要迁移的用户和对应的表空间。

1. 准备迁移环境

​ 由于达梦数据库的结构和mysql存在差异,mysql分了很多业务库,这里相当于是达梦数据库的用户(模式), 一个用户(模式)对应了mysql中的一个库。

1.1 DM迁移环境

1.1.1 版本选择

	确定一个达梦数据库版本,尽量以最新版本且无额外另行通知的版本,保证已经出现的问题在即将迁移的系统中不在出现。版本优先先择完整安装版本(无完整安装版本的平台例外),避免数据库客户端和都无端存在版本不匹配带来的额外工作量,达梦在不同平台的版本上,安装包都会有差异,一定要采用严格匹配的原则,尽量减少干扰性的问题出现。

1.1.2 初始化库

初始化库,关键点在于对初始化参数的设置,从MySQL迁移到DM数据库,集体的初始化参数建议如下:

	1.关于页大小(PAGE_SIZE),从MySQL迁移到DM,建议设置页大小为16KB,一旦创建好了数据库,在该数据库的整个生命周期内,页大小都不能修改。除了每个字段的 最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或 者以后可能存在含有较长的字符串类型的表,可以按需调整,最大为 32KB(也 可以设置为 8KB)。页大小设置越大,最后数据文件的物理大小就会越大,系 统运行时,每次从磁盘调入内存的数据单位也就越大,所以此处要慎重。
	2.关于簇大小(EXTENT_SIZE),数据文件使用的簇大小,及每次分配新的段空间时连续的页数,只能是16页或32页,缺省使用16页,从MySQL迁移到DM使用默认值即可。
	3.关于大小写敏感(CASE_SENSITIVE),DM为了兼容不同的数据库,在初始化数据库的时候有一个参数字符串比较大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议MySQL和SQLSERVER迁移过来的系统使用大小写不敏感。
	4.关于字符集(CHARSET),建议采用默认值GB18030,如果需要国际字符可以采用Unicode。如果只存储中文和字母数字,一般来说GB18030更节省空间。
字符集区别
GB18030数字字母占1个字节,普通汉字占2个字节,部分少数民族文字占4个字节。
Unicode在达梦中采用UTF-8编码格式,欧洲的字母字符占1到2个字节,亚洲的大部分字符占3个字节,附加字符为4个字节。

1.1.3 INI中兼容参数

在DM的dm.ini参数文件中针对从MySQL迁移到DM,有几个专门的参数,详情如下:(修改完成后重启数据库生效)

参数介绍
COMPATIBLE_ MODE是否兼容其它数据库模式:
0:不兼容
1:兼容SQL922标准
2:兼容oracle
3:兼容MS SQL SERVER
4:兼容mysql
5:兼容DM6
6:兼容Teradata

1.1.4 创建用户和表空间

	从MySQL迁移到DM,要求先创建好待使用的用户和这个用户的表空间,不要把数据迁移到系统默认的管理员SYSDBA用户下和MAIN表空间下。
	MySQL的体系架构是单实例多个库,DM7以上的版本是单库多实例的架构,MySQL可能是一个root用户访问多个库,访问前切换以下当前库即可。从MySQL迁移到达梦的时候就需要针对MySQL中的每一个库在达梦里面创建一个用户和表空间来对应。例如MySQL中有一个库test,达梦里面先创建一个表空间tab_test,然后创建一个用户test,指定默认表空间为tab_test。
	我们在做MySQL迁移的时候要先分析本次迁移需要从源库中迁移哪一个库或者哪几个库,然后为每一个库,分别在达梦中创建独立的表空间和用户;大多数情况下,我们需要迁移的数据库所在的MySQL实例里面有多个库,并不是所有的库都需要迁移,所以在迁移准备阶段,一定要和相关负责人够用明确清楚。

1.2 MySQL迁移环境

在从MySQL向DM进行迁移准备阶段,也需要注意MySQL的迁移环境:

	1.严禁在生产环境中直接迁移。因为迁移首先是一个测试的工作,所以迁移应该避免从MySQL生产环境数据库中直接进行迁移,需要提前向应用开发商提出其搭建一个测试环境,准备MySQL需要迁移的环境和数据,直接从生产库上进行迁移,有很多风险存在,例如会影响生产库的效率,引发崩溃的可能等等。
	2.工具准备。这里推荐Navicat工具,一般需要有一个工具来连接到需要迁移的MySQL环境,以便进行迁移数据的确认和初步的分析,当然也可以使用MySQL其它的客户端工具,MySQL是一个开源数据库,可供选择的工具比较多,使用起来比较方便。

2. 数据迁移

	通过达梦数据库数据迁移同步工具DTS将原系统中结构化数据迁移到国产化数据库,源端数据库支持Oracle、达梦、MySQL等国内外多种关系型数据库关系系统,目的端数据库支持国产化数据库。
DM数据迁移工具支持:
DM数据库之间模式、表、序列、视图、存储过程/函数、包、触发器、对象权限的迁移。
主流大型数据库:Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix、Kingbase、Sybase的模式、表、视图、序列、索引迁移到DM。
DM的模式、表、视图、序列、索引迁移到主流大型数据库Oracle、SQLServer、MySQL。
ODBC数据源、JDBC 数据源的模式、表、视图迁移到 DM
DM数据库模式、表、序列、视图、存储过程/函数、包、触发器、对象权限迁移到XML文件,SQL脚本文件。
DM数据库的表、视图数据迁移到文本文件,Excel文件,Word文件。
指定格式的文本文件,Excel文件,Word文件,XML文件和SQL脚本文件迁移到DM数据库。

2.1 数据迁移步骤

在这里插入图片描述

选择迁移方式。

在这里插入图片描述

连接迁移数据源。

在这里插入图片描述

连接迁移数据目的端。

在这里插入图片描述

从数据源复制对象,包括模式及模式对象,目录,公共同义词或者上下 文(目的模式选择自己要用的模式)。

在这里插入图片描述

选择迁移对象。

在这里插入图片描述

审阅迁移任务。

在这里插入图片描述

执行迁移任务。

在这里插入图片描述

验证迁移结果。

在这里插入图片描述

2.2 常见故障处理

2.2.1 无效的数据类型

​ 核查字段定义中的int类型,是否有精度,如果有,直接去掉。即int(10)需要改成int,去掉精度(达梦数据库的int类型,不需要、也不能设置精度)。

create table test1(v1 int(10),v2 varchar(20));
需要更改成 
create table test1(v1 int,v2 varchar(20);

2.2.2 TIMESTAMP类型

	在MySQL中时间类型TIMESTAMP默认default设置为“0000-00-0000:00:00”,而在达梦中TIMESTAMP类型数据不能为“0000-00-0000:00:00”,在达梦中是不合法的,必须在“0001-01-0100:00:00.000000”到“9999-12-3123:59:59.999999”之间。
	可通过修改直接修改MySQL中的业务表数据后进行数据迁移或通过DTS的使用SQL进行迁移数据。

2.2.3 DEFAULT设置

	对于字段的default设置,默认的字符或字符串默认值,需要添加单引号'',如achar(10)default 'abc'。

2.2.4 TEXT类型

	对于text字段类型,若在多条SQL中存在对test字段类型的distinct处理,可根据具体情况决定是否将text字段类型改编为varchar类型,或对查询结果进行其它方式的过滤。

2.2.5 进度放大3倍

	在2019-9-18以前的达梦迁移工具中,如果MySQL源端的表字符集为utf8,迁移到达梦的时候CHAR、VARCHAR类型的精度会自动放大三倍。如果不能接收这种精度的放大,有两个办法:
	1.把MySQL的表定义导出成文本,手动修改为达梦语法。
	2.去官网下载2019-9-18以后的版本。

2.2.6 MySQL连接DTS问题

错误输出:Unknown initial character set index ‘255’ received from server. Initial client character set can be forced via the ‘characterEncoding’ property.

在这里插入图片描述

解决方法:
1.MySQL版本过高,导致DTS工具无法连接,使用MySQL5.7版本即可。
2.更换为合适的驱动版本,自定义 url 连接串,在 url 连接串中添加参数:
	String url = "jdbc:mysql://localhost:3306/db_cjky?useUnicode=true&characterEncoding=utf8";//改成这句,就可以了

3. 核对数据库迁移结果

3.1 统计达梦数据基础信息

1.统计页大小 
select page; 

2.统计编码格式 
select unicode; 

3.统计大小写敏感参数 
select case_sensitive;

3.2 统计达梦数据中的对象以及表数据量

1.根据指定用户统计用户下的各个对象类型和数目
Select object_type count* from all_objects where owner = ‘OA8000_DM2015’ group by Object_type

2.统计指定用下所有的对象,并记录到新的记录表中
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='OA8000_DM2015';

3.统计每个表的数据量到表数据记录表
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='OA8000_DM2015' 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;

4.对比达梦数据库中对象和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 a.tab_count-b.tab_count<>0 ;

4. 数据库一直完毕后的收尾工作

4.1 更新统计信息

​ 数据核对完成无问题后,应进行一次全库的统计信息更新工作。统计信息更新脚本示例如下:

​ 更新统计信息的目的在于大批量迁移数据后,可能会导致数据库优化器根据 错误的统计信息得到错误的查询计划,严重影响查询性能。

DBMS_STATS.GATHER_SCHEMA_STATS( 
	'TEST', -- TEST 为模式名 
	100, 
	FALSE, 
	'FOR ALL COLUMNS SIZE AUTO');

4.2 数据备份

	再对数据更新完统计信息后,数据量不大,磁盘空间足够的情况下应进行一次数据备份工作。数据备份有两种方式:正常停止数据库后,拷贝备份data文件夹;或者开启归档日之后,进行物理备份。

4.3 整理对象脚本

	整理所有数据库对象脚本,这是为了对项目迁移情况进行记录和备份,方便再次进行数据迁移。备份的数据库对象脚本包括:序列定义及当前值,表定义,索引定义,视图定义,函数定义,存储过程定义,包及包体定义、自定义类型和同义词定义。
	脚本对象导出可通过达梦数据迁移 DTS 工具来进行。执行步骤如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

详情请参考:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值