数据库数据迁移方法、装置以及存储介质与流程

文档序号:23818643发布日期:2021-02-03 14:32阅读:62来源:国知局
数据库数据迁移方法、装置以及存储介质与流程

[0001]
本公开涉及数据库技术领域,尤其涉及一种数据库数据迁移方法、装置以及存储介质。


背景技术:

[0002]
现有的数据迁移通常依赖于数据库厂商自身带的数据迁移工具,专业性强,功能完备,适合特定数据库间大批量数据迁移,但是使用面窄,价格高;并且现有的大部分迁移工具都不支持不停服务进行数据迁移及切换,对于核心业务系统来说并不适用。


技术实现要素:

[0003]
有鉴于此,本发明要解决的一个技术问题是提供一种数据库数据迁移方法、装置以及存储介质。
[0004]
根据本公开的第一方面,提供一种数据库数据迁移方法,包括:配置源数据库表和目标数据库表之间的数据映射信息;在源数据库和目标数据库提供服务的状态下,基于所述数据映射信息将所述源数据库表中的数据同步在所述目标数据库表中;在所述源数据库表和所述目标数据库表之间进行数据同步操作后,对所述源数据库表和所述目标数据库表中的数据进行校验处理,基于校验结果判断所述数据同步操作是否正确并进行相应的处理;在判断所述数据同步操作正确后,基于所述数据映射信息将所述目标数据库表中的新增数据同步在所述源数据库表中。
[0005]
可选地,配置所述源数据库和所述目标数据库的数据链接配置信息;基于所述数据链接配置信息分别配置源数据库连接池、目标数据库链接池,用以分别存放源数据库链接、目标数据库链接。
[0006]
可选地,所述数据链接配置信息包括:数据库类型、链接地址、连接字符串以及数据库用户名密码;所述基于所述数据链接配置信息分别配置源数据库连接池、目标数据库链接池包括:创建所述源数据库连接池和所述目标数据库链接池,并确定最大数据库连接数;基于所述数据链接信息以及所述最大数据库连接数,分别生成所述源数据库链接和所述目标数据库链接,并分别放入所述源数据库连接池和所述目标数据库链接池中。
[0007]
可选地,所述数据映射信息包括:数据表之间的对应关系和数据表字段之间的映射关系;所述基于所述数据映射信息将所述源数据库表中的数据同步在所述目标数据库表中包括:使用所述源数据库连接池中的源数据库链接和所述目标数据库链接池中的目标数据库链接,基于所述数据映射信息将所述源数据库表中的数据同步在所述目标数据库表中。
[0008]
可选地,所述使用所述源数据库连接池中的源数据库链接和所述目标数据库链接池中的目标数据库链接,基于所述数据映射信息将所述源数据库表中的数据同步在所述目标数据库表中包括:配置与所述源数据库表相对应的数据同步频率信息;生成与所述源数据库表相对应的第一任务,基于所述数据同步频率信息设置所述第一任务的执行频率;其
中,使用与所述源数据表相对应的线程执行所述第一任务;基于所述第一任务从所述目标数据库链接池中获取目标数据库链接,使用获取的目标数据库链接获取需要同步的数据信息;基于所述第一任务从所述源数据库连接池中获取源数据库链接,使用获取的源数据库链接并基于所述需要同步的数据信息从所述源数据库表中获取需要同步的数据;使用获取的目标数据库链接并基于所述数据映射信息,将所述需要同步的数据插入所述目标数据库表中。
[0009]
可选地,所述使用获取的目标数据库链接获取需要同步的数据信息包括:使用获取的目标数据库链接查询与所述目标数据库表中数据记录相对应的最大id值;所述使用获取的源数据库链接并基于所述需要同步的数据信息从所述源数据库表中获取需要同步的数据包括:使用获取的源数据库链接从所述源数据库表中获取数据记录id值大于所述最大id值的数据,作为所述需要同步的数据。
[0010]
可选地,获取所述源数据库和所述目标数据库之间的字段类型转换信息;在将所述需要同步的数据插入所述目标数据库表中时,基于所述字段类型转换信息对所述需要同步的数据进行类型转换处理。
[0011]
可选地,在将所述需要同步的数据插入所述目标数据库表中后,生成与所述源数据库表相对应的第二任务;其中,使用与所述源数据表相对应的线程执行所述第二任务;基于所述第二任务从所述源数据库连接池中获取源数据库链接,使用获取的源数据库链接获取所述源数据库表在所述数据同步操作期间被修改的数据;基于所述第二任务从所述目标数据库链接池中获取目标数据库链接,使用获取的目标数据库链接在所述目标数据库表中更新与所述被修改的数据相对应的数据。
[0012]
可选地,所述对所述源数据库表和所述目标数据库表中的数据进行校验处理,基于校验结果判断所述数据同步操作是否正确并进行相应的处理包括:生成与所述源数据库表相对应的第三任务;其中,使用与所述源数据表相对应的线程执行所述第三任务;基于所述第三任务从所述源数据库连接池中获取源数据库链接,使用获取的源数据库链接查询所述源数据库表中存储的与所述数据同步操作相对应的数据,将此数据包含的全部字段值转换为字符类型并进行拼接处理,对拼接后的字符串进行加密处理,获得第一加密值;基于所述第三任务从所述目标数据库连接池中获取目标数据库链接,使用获取的目标数据库链接查询所述目标数据库表中存储的与所述数据同步操作相对应的数据,将此数据包含的全部字段值转换为字符类型并进行拼接处理,对拼接完成的字符串进行加密处理,获得第二加密值;如果确定所述第一加密值与对应的第二加密值相同,则确定数据同步正确;如果确定所述第一加密值与对应的第二加密值不相同,则确定数据同步异常,并进行相应的异常处理。
[0013]
可选地,所述基于所述数据映射信息将所述目标数据库表中的新增数据同步在所述源数据库表中包括:生成与所述目标数据库表相对应的第四任务;其中,使用与所述目标数据表相对应的线程执行所述第四任务;基于所述第四任务从所述目标数据库连接池中获取目标数据库链接,使用获取的目标数据库链接查询所述目标数据表在所述数据同步操作后的新增数据;基于所述第四任务从所述源数据库连接池中获取源数据库链接,使用获取的源数据库链接并基于所述数据映射信息将所述新增数据同步在所述源数据表中。
[0014]
可选地,所述源数据库与所述目标数据库的数据库类型不相同;所述源数据库表
和所述目标数据库表至少有一个字段不相同。
[0015]
根据本公开的第二方面,提供一种数据库数据迁移装置,包括:映射配置模块,用于配置源数据库表和目标数据库表之间的数据映射信息;其中,所述数据映射信息包括:数据表之间的对应关系和数据表字段之间的映射关系;数据同步模块,用于在源数据库和目标数据库提供服务的状态下,基于所述数据映射信息将所述源数据库表中的数据同步在所述目标数据库表中;数据校验模块,用于在所述源数据库表和所述目标数据库表之间进行数据同步操作后,对所述源数据库表和所述目标数据库表中的数据进行校验处理,基于校验结果判断所述数据同步操作是否正确并进行相应的处理;逆向同步模块,用于在判断所述数据同步操作正确后,基于所述数据映射信息将所述目标数据库表中的新增数据同步在所述源数据库表中。
[0016]
在一个实施例中,链接配置模块,用于配置所述源数据库和所述目标数据库的数据链接配置信息;链接生成模块,用于基于所述数据链接配置信息分别配置源数据库连接池、目标数据库链接池,用以分别存放源数据库链接、目标数据库链接。
[0017]
根据本公开的第三方面,提供一种数据库数据迁移装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上所述的方法。
[0018]
根据本公开的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述指令被处理器执行如上的数据库数据迁移方法。
[0019]
本公开的数据库数据迁移方法、装置以及存储介质,能够实现不停机进行数据迁移,解决线上系统数据迁移停机的问题;采用双向数据追加策略,实现无论向任一数据库写数据都能够实时同步到另一个数据库,适用于线上不可中断服务的数据迁移;能够屏蔽数据库及数据表字段属性之间的差异,实现异构数据库、异构表结构之间的数据迁移,使用灵活性更强;可以异步进行数据完整性校验、数据同步与数据校验独立运行,提高同步操作效率。
附图说明
[0020]
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
[0021]
图1为根据本公开的数据库数据迁移方法的一个实施例的流程示意图;
[0022]
图2为根据本公开的数据库数据迁移方法的一个实施例中的配置数据库连接池的流程示意图;
[0023]
图3为根据本公开的数据库数据迁移方法的一个实施例中的进行数据同步的流程示意图;
[0024]
图4为根据本公开的数据库数据迁移方法的一个实施例中的进行数据更新的流程示意图;
[0025]
图5为根据本公开的数据库数据迁移方法的一个实施例中的进行校验处理的流程示意图;
[0026]
图6为根据本公开的数据库数据迁移方法的另一个实施例中的进行校验处理的流程示意图;
[0027]
图7为根据本公开的数据库数据迁移方法的一个实施例中的进行数据逆同步的流程示意图;
[0028]
图8为根据本公开的数据库数据迁移装置的一个实施例的模块示意图;
[0029]
图9为根据本公开的数据库数据迁移装置的另一个实施例的模块示意图;
[0030]
图10为根据本公开的数据库数据迁移装置的一个实施例中的数据同步模块的模块示意图;
[0031]
图11为根据本公开的数据库数据迁移装置的一个实施例中的数据校验模块的模块示意图;
[0032]
图12为根据本公开的数据库数据迁移装置的一个实施例中的逆向同步模块的模块示意图;
[0033]
图13为根据本公开的数据库数据迁移装置的又一个实施例的模块示意图。
具体实施方式
[0034]
下面参照附图对本公开进行更全面的描述,其中说明本公开的示例性实施例。下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。下面结合各个图和实施例对本公开的技术方案进行多方面的描述。
[0035]
下文中的“第一”、“第二”仅用于描述上相区别,并没有其他特殊的含义。
[0036]
目前,数据迁移通常依赖于数据库厂商自身带的数据迁移工具进行。例如,当源库与目标库都是mysql并且数据库表结构完全一致时,可以利用mysql binlog进行数据同步,binlog用于记录所有更新了数据或者已经潜在更新了数据;当源库是mysql库但目标库是其他数据库时,可以利用插件进行数据同步,插件可以为阿里的canal插件;当源库与目标库都是oracle时,可以使用dblink进行数据同步;当源库与目标库都是sql server数据库时,可以利用数据库发布和订阅方式进行数据同步。
[0037]
现有的数据迁移技术方案依赖于数据库厂商所提供的数据迁移工具,并且源库与目标库必须是同类数据库,而且源库与目标库表结构必须完全一致,字段类型也必须是同一种类型。现有的数据迁移技术方案大多是在应用程序停止服务的情况下进行数据迁移,对于服务不可中断的核心业务系统不适用;现有的数据迁移技术方案大多采用同步数据校验,即同步一条数据就进行校验,效率比较低下,并且在迁移过程中遇到迁移失败的情况,通常直接报错退出,对于大数据量的数据迁移来说会带来很大的重复性工作。
[0038]
图1为根据本公开的数据库数据迁移方法的一个实施例的流程示意图,如图1所示:
[0039]
步骤101,配置源数据库表和目标数据库表之间的数据映射信息。
[0040]
在一个实施例中,源数据库是数据同步的源库,源数据库可以是符合标准sql的多种数据库,源数据库表为源数据库中的数据表。目标数据库是数据同步的目标库,目标数据库可以是符合标准sql的多种数据库,目标数据库表为目标数据库中的数据表。
[0041]
数据映射信息包括数据表之间的对应关系和数据表字段之间的映射关系等信息。源数据库与目标数据库的数据库类型可以不相同,例如源数据库为oracle,目标数据库为mysql。源数据库表和目标数据库表可以有一个或多个字段不相同。
[0042]
步骤102,在源数据库和目标数据库提供服务的状态下,基于数据映射信息将源数据库表中的数据同步在目标数据库表中。
[0043]
在一个实施例中,在源数据库和目标数据库仍然提供查询、插入数据等服务的状态下,实现源数据库与目标数据库之间的数据同步。
[0044]
步骤103,在源数据库表和目标数据库表之间进行数据同步操作后,对源数据库表和目标数据库表中的数据进行校验处理,基于校验结果判断数据同步操作是否正确并进行相应的处理。
[0045]
步骤104,在判断数据同步操作正确后,基于数据映射信息将目标数据库表中的新增数据同步在源数据库表中。
[0046]
在一个实施例中,配置源数据库和目标数据库的数据链接配置信息,数据链接配置信息包括数据库类型、链接地址、连接字符串以及数据库用户名密码等。基于数据链接配置信息分别配置源数据库链接池、目标数据库链接池,用以分别存放源数据库链接、目标数据库链接。
[0047]
图2为根据本公开的数据库数据迁移方法的一个实施例中的配置数据库连接池的流程示意图,如图2所示:
[0048]
步骤201,创建源数据库连接池和目标数据库链接池,并确定最大数据库连接数。
[0049]
步骤202,基于数据链接信息以及最大数据库连接数,分别生成源数据库链接和目标数据库链接,并分别放入源数据库连接池和目标数据库链接池中。
[0050]
获取数据映射信息,数据映射信息包括数据表之间的对应关系和数据表字段之间的映射关系。使用源数据库连接池中的源数据库链接和目标数据库链接池中的目标数据库链接,基于数据映射信息将源数据库表中的数据同步在目标数据库表中。
[0051]
在一个实施例中,可以通过管理端程序配置多种数据库数据源连接方式,无缝进行数据迁移。管理端程序嵌入常见的数据库连接jar包,在配置文件中配置对应jar包的数据库连接方式。例如,源数据库为oracle,目标数据库为mysql库;源数据库表为oracle库中的t_user表,其结构如下表1所示:
[0052]
字段名字段属性idnumber(12)user_namevarchar2(64)agenumber(2)create_datedate
[0053]
表1 t_user的结构表目标数据库表为mysql库中的t_person表,其结构如下表2所示:
[0054][0055][0056]
表2 t_person的结构表
[0057]
可以将数据链接配置信息存在配置文件(config.properties)中。管理端可以提供一个web端管理界面,用于配置源数据库与目标数据库的数据库链接地址、连接字符串及数据库用户名密码等信息。源数据库链接为oracle数据库链接,目标数据库链接为mysql数据库链接。
[0058]
获取源数据库与目标库数据库的类型及版本,配置源数据库和目标数据库之间的字段类型转换信息。例如,目标数据库是mysql,日期字段需要使用str_to_date函数将字符类型转换为日期类型。字段类型转换信息可以存入config.properties配置文件中。
[0059]
配置数据映射信息,数据映射信息包括源数据库及目标数据库的数据表之间的映射、数据表字段之间的映射。例如,源数据库中的t_user表对应目标数据库中的t_person表,t_user表中的user_name字段对应于t_person表中的person_name字段。数据映射信息可以存入配置文件(mapping.properties文件)中。
[0060]
配置线程数量,即设置服务端启动的线程数,线程配置数与源数据库表相对应,可以根据源数据库表数据量的大小灵活配置线程数量,从而达到所有表数据尽可能同时迁移完成。线程数量存入config.properties文件中。
[0061]
配置定时抓取数据的频率(数据同步频率),此频率最好与单个线程的执行时间相对应,例如单个线程执行时间约为2秒钟,数据同步频率设置为2.5秒钟一次。数据同步频率存入confing.properties中。可以配置每次抓取源数据库表数据的条数,用于源库查询分页使用,此配置项存入confing.properties中。
[0062]
图3为根据本公开的数据库数据迁移方法的一个实施例中的进行数据同步的流程示意图,如图3所示:
[0063]
步骤301,配置与源数据库表相对应的数据同步频率信息。
[0064]
步骤302,生成与源数据库表相对应的第一任务,基于数据同步频率信息设置第一任务的执行频率;其中,使用与源数据表相对应的线程执行第一任务。
[0065]
在一个实施例中,任务是指由软件完成的活动,任务由一个进程或线程执行。可以从线程池中获取或启动与源数据表相对应的线程,基于数据同步频率信息设置第一任务的执行频率,使用与源数据表相对应的线程执行第一任务(定时执行)。
[0066]
步骤303,基于第一任务从目标数据库链接池中获取目标数据库链接,使用获取的目标数据库链接获取需要同步的数据信息。
[0067]
在一个实施例中,使用获取的目标数据库链接查询与目标数据库表中数据记录相对应的最大id值。
[0068]
步骤304,基于第一任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接并基于需要同步的数据信息从源数据库表中获取需要同步的数据。
[0069]
在一个实施例中,使用获取的源数据库链接从源数据库表中获取数据记录id值大于目标数据库表中的额最大id值的数据,作为需要同步的数据。
[0070]
步骤305,使用获取的目标数据库链接并基于数据映射信息,将需要同步的数据插入目标数据库表中。
[0071]
获取源数据库和目标数据库之间的字段类型转换信息,在将需要同步的数据插入目标数据库表中时,基于字段类型转换信息对需要同步的数据进行类型转换处理。
[0072]
在一个实施例中,根据数据链接配置信息分别创建源数据库与目标数据库的数据库链接池。quartz为opensymphony开源组织在job scheduling领域一个开源项目,可以与j2ee与j2se应用程序相结合也可以单独使用,quartz可以用来创建jobs。根据配置文件中数据库表的数量,使用quartz动态创建job(任务),每一个job_name对应一个数据库表,并设置每一个job的执行频率等于预设的数据同步频率信息。
[0073]
动态创建与源数据库表相对应的第一任务,第一任务的名称为job_user,此第一任务为定时任务。第一任务需要完成以下的工作:
[0074]
1、从目标数据库链接池中获取一个目标数据库链接。例如,从oracle库链接池中获取一条数据库链接。
[0075]
2、查询目标数据库表中的id最大值(最大值之前的数据必然已经存在目标数据库表中,只需同步最大值之后数据即可),存入变量maxid中。例如,需要查询mysql库中的t_person表的最大id,此id就是第一任务下次执行开始的id,查询语句为:
[0076]
select max(id)maxid from t_person。
[0077]
3、从源库数据库链接池中获取一个源数据库链接。例如,从mysql库链接池中获取一条数据库链接。
[0078]
4、从源数据库表中查询需要同步的数据,例如,在oracle库中查询,sql语句如下:
[0079]
select a1.*(select t_user.*,rownum rn from t_user where id>maxid)t1 where rn>=limitnum;
[0080]
查询结果集存入到list对象中。
[0081]
5、获取源数据库和目标数据库之间的字段类型转换信息,检查是否有需要转译的字段。例如,目标数据库是mysql数据库,并且create_date字段是date类型,需要将sql语句拼接为str_to_date(create_date,’yyyy-mm-dd’)。
[0082]
6、在目标数据库表中使用批量插入方法,批量插入数据。例如,目标数据库是mysql库,批量插入的sql语句如下:
[0083]
insert into t_person(id,person_name,age,create_date)values(1,'张三
[0084]
',20,str_to_date('2017-09-09','yyyy-mm-dd’)),(2,'李四
[0085]
',21,str_to_date('2017-09-09','yyyy-mm-dd’)),(3,’王五
[0086]
',22,str_to_date('2017-09-09','yyyy-mm-dd’))。
[0087]
重复以上步骤1-6,直到数据同步完毕。数据同步完毕后,在数据源未切换到目标
库之前,如果源数据库有新增数据,会实时同步到目标库。
[0088]
图4为根据本公开的数据库数据迁移方法的一个实施例中的进行数据更新的流程示意图,如图4所示:
[0089]
步骤401,在将需要同步的数据插入目标数据库表中后,生成与源数据库表相对应的第二任务;其中,使用与源数据表相对应的线程执行第二任务。
[0090]
步骤402,基于第二任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接获取源数据库表在数据同步操作期间被修改的数据。
[0091]
步骤403,基于第二任务从目标数据库链接池中获取目标数据库链接,使用获取的目标数据库链接在目标数据库表中更新与被修改的数据相对应的数据。
[0092]
在一个实施例中,由于数据在同步过程中数据源没有进行切换,生产数据还是写入源数据库中,很有可能在同步数据的过程中,之前已经同步至目标数据库中的数据已经发生过修改,因此需要做一次增量数据修改。
[0093]
从源数据库链接池中获取一个源数据库链接,例如,从mysql库链接池中获取一条数据库链接。查询源数据库表中从数据同步时间点开始有修改过数据的记录,同步此时间点之后有修改的数据都会通过modified提现出来,只要modified时间在当前时间点之后说明是有修改,对应的sql语句如下:
[0094]
select*from t_user where modified>=数据同步时间点。
[0095]
将查询结果集存入到list对象中。更新目标数据库表中对应的记录,对应的sql语句如下:
[0096]
update t_person set person_name=#t_user.user_name#where id=#t_user.id#。
[0097]
在数据源未切换到目标库之前,此第二任务一直运行,确保两个数据库之间数据一直保持一致。
[0098]
图5为根据本公开的数据库数据迁移方法的一个实施例中的进行校验处理的流程示意图,如图5所示:
[0099]
步骤501,生成与源数据库表相对应的第三任务;其中,使用与源数据表相对应的线程执行第三任务。
[0100]
步骤502,基于第三任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接查询源数据库表中存储的、与数据同步操作相对应的数据,将此数据包含的全部字段值转换为字符类型并进行拼接处理,对拼接后的字符串进行加密处理,获得第一加密值。
[0101]
步骤503,基于第三任务从目标数据库连接池中获取目标数据库链接,使用获取的目标数据库链接查询目标数据库表中存储的、与数据同步操作相对应的数据,将此数据包含的全部字段值转换为字符类型并进行拼接处理,对拼接完成的字符串进行加密处理,获得第二加密值。
[0102]
步骤504,如果确定第一加密值与对应的第二加密值相同,则确定数据同步正确。
[0103]
步骤504,如果确定第一加密值与对应的第二加密值不相同,则确定数据同步异常,并进行相应的异常处理。异常处理可以有多种处理,例如通知用户出现异常、重新进行数据同步等。
[0104]
图6为根据本公开的数据库数据迁移方法的另一个实施例中的进行校验处理的流程示意图,如图6所示:
[0105]
步骤601,获取源数据库及目标数据库链接。
[0106]
步骤602,读取mapping.properties,获取数据表的全部字段信息。
[0107]
步骤603,开启多线程。
[0108]
在一个实施例中,根据源数据库表的数量,使用quartz动态创建验证job,即第三任务,每一个job_name对应一个源数据库表,一个job负责验证一个源数据库表和对应的目标数据库表。分别在源数据库链接池与目标数据库链接池中获取数据库链接。读取mapping.properties文件中的配置信息,获取数据库中所有数据表的全部字段信息。
[0109]
步骤604-608,查询源数据库表和目标数据库中存储的与数据同步操作相对应的数据,保存在list中。每次读取list中一条记录,把每条记录的所有字段转换为字符类型进行字符拼接操作,然后对拼接完的字符串进行md5操作,得到md5值。对比两个相对应的md5值是否一致,如果一致说明本条数据同步正确,如果不一致,则记录不一致的id。
[0110]
步骤609,提示用户此数据同步异常。
[0111]
步骤610,用户可以重新同步此表。
[0112]
步骤611,提示用户数据迁移成功。
[0113]
图7为根据本公开的数据库数据迁移方法的一个实施例中的进行数据逆同步的流程示意图,如图7所示:
[0114]
步骤701,生成与目标数据库表相对应的第四任务;其中,使用与目标数据表相对应的线程执行第四任务。
[0115]
步骤702,基于第四任务从目标数据库连接池中获取目标数据库链接,使用获取的目标数据库链接查询目标数据表在数据同步操作后的新增数据。
[0116]
在一个实施例中,在数据同步操作后,目标数据库连接池可能被切换为主数据库,生产数据写入目标数据库中,使用获取的目标数据库链接查询目标数据表在数据同步操作后的新增数据。
[0117]
步骤703,基于第四任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接并基于数据映射信息将新增数据同步在源数据表中。
[0118]
在一个实施例中,当数据已经同步并且验证完毕后,需要开启逆向数据同步流程。逆向数据同步流程是指在正向数据迁移的基础上,逆向追加数据,即从目标数据库向源数据库同步数据,目的是无论是往源数据库写数据还是往目标数据库写数据,都可以保证两个数据库数据始终一致,从而可以平滑迁移数据源,达到线上系统不停机数据库迁移的目的。
[0119]
新增加一组逆向job,即第四任务,数据同步流程复用正向数据同步处理流程,逆向job程序的数据源与正向job数据源相反,即逆向job程序是以目标数据库为主库,源数据库为从库。从目标库向源数据库进行逆同步操作,待源数据库与目标数据库数据完全一致之后,可以分批将线上实例数据库链接迁移到目标数据库。
[0120]
在一个实施例中,如图8所示,本公开提供一种数据库数据迁移装置80,包括:映射配置模块81、数据同步模块82、数据校验模块83和逆向同步模块84。映射配置模块81配置源数据库表和目标数据库表之间的数据映射信息;其中,数据映射信息包括:数据表之间的对
应关系和数据表字段之间的映射关系。数据同步模块82在源数据库和目标数据库提供服务的状态下,基于数据映射信息将源数据库表中的数据同步在目标数据库表中。
[0121]
数据校验模块83在源数据库表和目标数据库表之间进行数据同步操作后,对源数据库表和目标数据库表中的数据进行校验处理,基于校验结果判断数据同步操作是否正确并进行相应的处理。逆向同步模块84在判断数据同步操作正确后,基于数据映射信息将目标数据库表中的新增数据同步在源数据库表中。
[0122]
在一个实施例中,如图9所示,数据库数据迁移装置80还包括链接配置模块85和链接生成模块86。链接配置模块85配置源数据库和目标数据库的数据链接配置信息。链接生成模块86基于数据链接配置信息分别配置源数据库连接池、目标数据库链接池,用以分别存放源数据库链接、目标数据库链接。
[0123]
数据链接配置信息包括数据库类型、链接地址、连接字符串以及数据库用户名密码等信息。链接生成模块86创建源数据库连接池和目标数据库链接池,并确定最大数据库连接数;链接生成模块86基于数据链接信息以及最大数据库连接数,分别生成源数据库链接和目标数据库链接,并分别放入源数据库连接池和目标数据库链接池中。
[0124]
在一个实施例中,数据同步模块82使用源数据库连接池中的源数据库链接和目标数据库链接池中的目标数据库链接,基于数据映射信息将源数据库表中的数据同步在目标数据库表中。
[0125]
如图10所示,数据同步模块82包括:同步任务启动单元821、信息获取单元822、数据查询单元823和数据插入单元824。同步任务启动单元821配置与源数据库表相对应的数据同步频率信息;同步任务启动单元821生成与源数据库表相对应的第一任务,基于数据同步频率信息设置第一任务的执行频率;其中,使用与源数据表相对应的线程执行第一任务。信息获取单元822基于第一任务从目标数据库链接池中获取目标数据库链接,使用获取的目标数据库链接获取需要同步的数据信息。
[0126]
数据查询单元823基于第一任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接并基于需要同步的数据信息从源数据库表中获取需要同步的数据。数据插入单元824使用获取的目标数据库链接并基于数据映射信息,将需要同步的数据插入目标数据库表中。
[0127]
在一个实施例中,信息获取单元822使用获取的目标数据库链接查询与目标数据库表中数据记录相对应的最大id值。数据查询单元823使用获取的源数据库链接从源数据库表中获取数据记录id值大于最大id值的数据,作为需要同步的数据。
[0128]
数据插入单元824获取源数据库和目标数据库之间的字段类型转换信息,在将需要同步的数据插入目标数据库表中时,基于字段类型转换信息对需要同步的数据进行类型转换处理。
[0129]
在一个实施例中,数据更新模块87在将需要同步的数据插入目标数据库表中后,生成与源数据库表相对应的第二任务;其中,使用与源数据表相对应的线程执行第二任务。
[0130]
数据更新模块87基于第二任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接获取源数据库表在数据同步操作期间被修改的数据。数据更新模块87基于第二任务从目标数据库链接池中获取目标数据库链接,使用获取的目标数据库链接在目标数据库表中更新与被修改的数据相对应的数据。
[0131]
如图11所示,数据校验模块83包括:校验任务启动单元831、数据加密处理单元832和加密结果校验单元833。校验任务启动单元831生成与源数据库表相对应的第三任务;其中,使用与源数据表相对应的线程执行第三任务。
[0132]
数据加密处理单元832基于第三任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接查询源数据库表中存储的与数据同步操作相对应的数据,将此数据包含的全部字段值转换为字符类型并进行拼接处理,对拼接后的字符串进行加密处理,获得第一加密值。
[0133]
数据加密处理单元832基于第三任务从目标数据库连接池中获取目标数据库链接,使用获取的目标数据库链接查询目标数据库表中存储的与数据同步操作相对应的数据,将此数据包含的全部字段值转换为字符类型并进行拼接处理,对拼接完成的字符串进行加密处理,获得第二加密值。
[0134]
加密结果校验单元833如果确定第一加密值与对应的第二加密值相同,则确定数据同步正确;加密结果校验单元833如果确定第一加密值与对应的第二加密值不相同,则确定数据同步异常,并进行相应的异常处理。
[0135]
如图12所示,逆向同步模块84包括:逆向任务启动单元841和逆向同步数据单元842。逆向任务启动单元841生成与目标数据库表相对应的第四任务;其中,使用与目标数据表相对应的线程执行第四任务。
[0136]
逆向同步数据单元842基于第四任务从目标数据库连接池中获取目标数据库链接,使用获取的目标数据库链接查询目标数据表在数据同步操作后的新增数据。逆向同步数据单元842基于第四任务从源数据库连接池中获取源数据库链接,使用获取的源数据库链接并基于数据映射信息将新增数据同步在源数据表中。
[0137]
在一个实施例中,图13为根据本公开的数据库数据迁移装置的又一个实施例的模块示意图。如图13所示,该装置可包括存储器1301、处理器1302、通信接口1303以及总线1304。存储器1301用于存储指令,处理器1302耦合到存储器1301,处理器1302被配置为基于存储器1301存储的指令执行实现上述的数据库数据迁移方法。
[0138]
存储器1301可以为高速ram存储器、非易失性存储器(non-volatile memory)等,存储器1301也可以是存储器阵列。存储器1301还可能被分块,并且块可按一定的规则组合成虚拟卷。处理器1302可以为中央处理器cpu,或专用集成电路asic(application specific integrated circuit),或者是被配置成实施本公开的数据库数据迁移方法的一个或多个集成电路。
[0139]
在一个实施例中,本公开提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,指令被处理器执行时实现如上任一个实施例中的数据库数据迁移方法。
[0140]
上述实施例提供的数据库数据迁移方法、装置以及存储介质,在源数据库和目标数据库提供服务的状态下,基于数据映射信息将源数据库表中的数据同步在目标数据库表中;对源数据库表和目标数据库表中的数据进行校验处理,基于校验结果判断数据同步操作是否正确并进行相应的处理;基于数据映射信息将目标数据库表中的新增数据同步在源数据库表中;能够实现不停机进行数据迁移,解决线上系统数据迁移停机的问题;采用双向数据追加策略,实现无论向任一数据库写数据都能够实时同步到另一个数据库,适用于线上不可中断服务的数据迁移;通过配置映射表字段之间的关系,能够屏蔽数据库及数据表
字段属性之间的差异,实现异构数据库、异构表结构之间的数据迁移,能够适用于各个厂商的不同版本数据库,使用灵活性更强;可以异步进行数据完整性校验、数据同步与数据校验独立运行,提高同步操作效率,并且可以提高用户体验。
[0141]
可能以许多方式来实现本公开的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和系统。用于方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
[0142]
本公开的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本公开限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本公开的原理和实际应用,并且使本领域的普通技术人员能够理解本公开从而设计适于特定用途的带有各种修改的各种实施例。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1