发明内容
以上提到的第三方工具在源数据库和目的数据库数据表结构相同的情况下使用是非常方便的,但对于源数据库和目的数据库数据表结构不同的情况下,用户使用起来是非常麻烦的,甚至还要编写相应的脚本才能实现数据库的迁移工作。
例如Informix的InfoMover、MicrosoftSQLServer的DTS和0raele的OracleWarehouseBuilder等。这些工具在一定范围内解决了数据的提取和转换。但这些工具基本都不能自动完成数据的抽取,用户还需利用这些工具编写适当的转换程序。
例如Oracle的OracleWarehouseBuilder(OWB)数据抽取工具提供的功能包括:模型构造和设计,数据提取、移动和装载,元数据管理等。但OWB提供的流程繁琐,维护很困难,不易于使用。
本发明的技术方案能够解决源数据库和目的数据库数据表结构不同情况下的数据迁移问题,同时支持跨数据平台的数据迁移。其中包括:
1、解决跨数据平台之间数据转换问题。各数据平台的数据类型存在着一些差异,本发明通过建立各数据平台基础类型对应表,实现它们之间的数据转换。
2、对于源数据库与目的数据库数据表结构不同的迁移,解决新旧数据表结构之间的字段映射问题。
3、实现按映射关系进行数据迁移的功能。通过JDBC接口连接源数据库和目的数据库,以映射关系为依据,通过动态生成SQL语句并分批自动执行,实现数据的迁移。
为实现本发明之目的,采用以下技术方案予以实现:
一种数据迁移方法,包括以下步骤:
第1步:连接源数据库和目的数据库;
第2步:从源数据库读出待迁移的数据;
第3步:将该读出的数据转换为中间数据类型的数据;
第4步:将转换为中间数据类型的数据转换为目的数据库数据类型的数据;
第5步:将所述转换为目的数据库数据类型的数据写入目的数据库。
所述的数据迁移方法,优选的:在第2步从源数据库读出待迁移的数据之前,先要判断源数据库的表结构与目的数据库表结构是否相同。
所述的数据迁移方法,优选的:当源数据库的表结构与目的数据库表结构相同时,提供选择界面,列出源数据库的表结构,供操作者选择将源数据库中的哪些表和字段迁移到目的数据库。
所述的数据迁移方法,优选的:当源数据库的表结构与目的数据库表结构不同时,提供选择界面,列出源数据库的表结构和目的数据库的表结构,供操作者选择将源数据库中的哪些表与目的数据库中的哪些表对应以及将源数据库中的哪些字段与目的数据库中的哪些字段对应,从而实现供操作者选择将源数据库中的哪些表和字段迁移到目的数据库。
所述的数据迁移方法,优选的通过JDBC接口连接源数据库和目的数据库。
优选的,所述数据迁移方法,在进行了源数据库字段与目的数据库字段的映射选择后,根据需要,对该源数据库字段进行数学计算,并将计算式与目的数据库相应字段进行映射。
优选的,在目的数据库中一个表内的所有字段与源数据库中表的字段的映射选择完毕后,根据预定规则对该目的数据库的表中的字段进行排序。
优选的,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示或禁止该源数据库字段的选择,该禁止该源数据库字段的选择是将该目的数据库中的字段作反白处理。
优选的,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示,并向操作者提供是否继续该操作的提示,当操作者选择继续,则将该源数据库字段与目的数据库字段进行映射,如操作者选择中止,则放弃该映射选择。
一种数据迁移系统,包括:连接模块、读取模块、转换模块和写入模块,其中:
连接模块,用于连接源数据库和目的数据库;
读取模块,用于从源数据库读出待迁移的数据;
转换模块,用于将该读出的数据转换为中间数据类型的数据,并将转换为中间数据类型的数据转换为目的数据库的数据类型的数据;
写入模块,用于将所述转换为目的数据库的数据类型的数据写入目的数据库。
所述的数据迁移系统,其中:还包括判断模块,用于在读取模块从源数据库读出待迁移的数据之前,判断源数据库的表结构与目的数据库表结构是否相同。
所述的数据迁移系统,还包括选择模块,用于当源数据库的表结构与目的数据库表结构相同时,提供选择界面,列出源数据库的表结构,供操作者选择将源数据库中的哪些表和字段迁移到目的数据库。
所述的数据迁移系统,还包括选择模块,用于当源数据库的表结构与目的数据库表结构不同时,提供选择界面,列出源数据库的表结构和目的数据库的表结构,供操作者选择源数据库中的哪些表与目的数据库中的哪些表对应以及源数据库中的哪些字段与目的数据库中的哪些字段对应,从而实现供操作者选择将源数据库中的哪些表和字段迁移到目的数据库。
所述的数据迁移系统,其中通过JDBC接口连接源数据库和目的数据库。
优选的,所述数据迁移系统还包括排序模块,在目的数据库中一个表内的所有字段与源数据库中表的字段的映射选择完毕后,用户可通过该排序模块根据预定规则对该目的数据库的表中的字段进行排序,以满足相应的需要。
优选的,所述数据迁移系统还包括计算模块,该计算模块,在进行了源数据库字段与目的数据库字段的映射选择后,对该源数据库字段进行数学计算。
优选的,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,所述判断模块,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示或禁止该源数据库字段的选择,该禁止该源数据库字段的选择是将该目的数据库中的字段作反白处理。
优选的,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,所述判断模块,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示,并向操作者提供是否继续该操作的提示,当操作者选择继续,则系统将该源数据库字段与目的数据库字段进行映射,如操作者选择中止,则系统放弃该映射选择。
具体实施方式
下面结合附图详细说明本发明的优选实施例。
一、流程设计
首先要能够与源数据库和目的数据库连接上;然后根据工具自动对数据类型进行映射或者手动进行设置。对于源数据库与目的数据库数据表结构不同的情况,还要设置表和字段之间的映射关系。
总的来说,一个完整的迁移任务,从被创建开始到执行完成的主要步骤如下:
1.选择源数据库和目的数据库进行连接。
2.选择需要迁移的数据库对象。
3.确定数据类型的转换。可以通过系统自带的类型映射表对源数据库和目的数据库的类型进行映射,并且能清楚的显示每个字段的对应情况,包括类型和具体精度的映射。
4.若源数据库与目的数据库数据表结构不同,这时目的数据库的表结构是已经设计好的,需要设置各表和字段的映射关系。
5.进行迁移任务。
如图2所示,数据库迁移流程主要包括以下步骤:
第1步:添加驱动程序,如添加JAVA与各个数据库连接的接口程序,例如加载JDBC驱动程序,实现JAVA与数据库之间的通信;
第2步:利用JDBC接口连接源数据库和目的数据库;
第3步:判断源数据库和目的数据库中的数据表结构是否相同,如果不同,执行第4步,如果相同则执行第7步;
第4步:建立目的数据库中数据表与表中字段的映射表;
第5步:根据映射表从源数据库向目的数据库迁移数据;
第6步:迁移完成。
第7步:进行数据类型匹配;
第8步:从源数据库向目的数据库迁移表和数据;转到第6步。
二、数据类型转换
数据类型的转换是数据迁移中最重要的一个问题,也是最关键的问题。可以分为两个步骤来实现:首先是要给出从源数据库到目的数据库的数据类型的对应关系,也就是确定源数据库中的某种数据类型在目的数据库中相对应的数据类型;第二步则是在后台进行的数据类型的转换,也就是源数据的数据类型转换为对应的JAVA类型,再从JAVA类型转换为目的数据库所需要的数据类型的过程。
不同的数据库之间的数据类型不可能全部都是一一对应的,肯定存在一对多或者多对一的情况,所以需要在源和目的数据库数据类型之间通过JDBC的数据类型来桥接。数据库与JDBC类型的映射的目的就是为了使数据库的数据类型能在JDBC类型中找到最为匹配的数据类型,来满足新系统的需求。
为此,需要在源、目的数据库类型匹配和表、字段映射之前,建立一个数据类型对应表,如下表1所示,作为数据类型转换的基本信息表,表1示意性地列出了JAVA类型与数据库类型的对应关系。
表1JAVA类型与数据库类型的对应关系表
三、源数据库与目的数据库的表和字段映射
1、对于源数据库与目的数据库的数据表结构相同的情况,这一步可以省略,也即无需建立源数据库与目的数据库的表和字段映射表,系统会自动在目的数据库建立和源数据库相同的表,并将数据迁移。当源数据库的表结构与目的数据库表结构相同时,提供选择界面,列出源数据库的表结构,供操作者选择将源数据库中的哪些表迁移到目的数据库。以下图5示意性地示出了源数据库与目的数据库迁移到目的数据库。以下如图5所示图5为在源、目的数据库的数据表结构相同的情况下,表选择界面的示意图。
如图5所示,当源数据库与目的数据库的数据表结构相同时,提供图5所示界面,供使用者选择目的数据库中需要的源数据库中的表,只需要选择源数据库中的相应表,则可实现上述选择,此时形成了选择表。通过该选择,能够得到目的数据库所需要的源数据库中的表,在数据迁移时,根据该选择表从源数据库中读取所需的表及表中的数据,在进行数据类型转换后写入目的数据库。
2、对于源数据库与目的数据库的数据表结构不同的情况,需要先抽取源数据库和目的数据库的表和表结构。抽取完相关信息后,在两者表和字段之间建立映射关系。当源数据库的表结构与目的数据库表结构不同时,提供选择界面,列出源数据库的表结构和目的数据库的表结构,供操作者选择源数据库中的哪些表与目的数据库中的表对应以及源数据库中的哪些字段与目的数据库中的哪些字段对应。建立映射关系的方法是以目的数据库表和字段为基准,从源数据库中找到相应的表和字段与之对应,如果某个字段不需从源数据库中迁移数据,则可以设置默认值或空值,还可以根据源数据库表字段设置公式等。对于目的数据库的字段,有时需要对与之对应的源数据库的字段进行公式计算,可以在选择了源数据库字段后,对该字段进行数值计算,如加减乘除等。例如源数据库中有“有效天数”字段,而在数据迁移后希望该“有效天数”增加一倍,此时在进行了源数据库字段与目的数据库字段的映射选择后,可对该源数据库字段增加*2的计算,以使得迁移后的“有效天数”加倍。
以下如图6所示图6示意性地列出了进行表映射选择界面的图示,在选择目的数据库中的某一表如表1后,选择与之对应的源数据库中的表,选择的源数据库中的表既可以是一个表,也可以是多个表,在完成对目的数据库的一个表与源数据库中的表的映射的选择后,再选择目的数据库中的其他表与源数据库中的表的映射关系,直到目的数据库中的表全部选择完毕。此时形成源、目的数据库之间的表映射关系表。
以下如图7所示图7示意性的列出了进行字段映射选择界面的图示,如图4所示,选择目的数据库中需要进行字段映射的表如表1,则界面中会显示前述步骤中已经选择的与之相关的源数据库中的表的字段情况,选择目的数据库中表1中的字段如字段1,再选择与之对应的源数据库中的表中的字段,如表1中的字段2、表2中的字段3等;目的数据库中表1中的字段1的映射选择完毕后,选择其他字段,重复上述选择过程,直到表1中全部字段映射关系选择完毕后,选择目的数据库中的其他表,再次进行如上的字段映射关系选择,直至全部表-字段映射选择完毕,此时形成源、目的数据库之间的表-字段映射关系表。
进一步的,在目的数据库中一个表内的所有字段与源数据库中表的字段的映射选择完毕后,可以根据预定规则对该目的数据库的表中的字段进行排序,以满足相应的需要。一般而言,目的数据库中字段的类型和与之对应的源数据库中的字段的类型应当相同,因此,为避免字段选择错误,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示或禁止该源数据库字段的选择。如:选择的目的数据库中的字段数据类型是日期,而选择的源数据库中的对应的字段的数据类型是姓名,则二者明显不一致,因此在字段映射选择界面上显示类型不一致的提示或禁止该源数据库字段的选择,还可将该目的数据库中的字段作反白处理,以禁止该选择,避免数据迁移错误。而在有些情况下,目的数据库中字段的类型和与之对应的源数据库中的字段的类型也可以不同,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示,并向操作者提供是否继续该操作的提示,当操作者选择继续,则将该源数据库字段与目的数据库字段进行映射,如操作者选择中止,则放弃该映射。
在数据迁移时,根据以上源、目的数据库之间的表-字段映射关系表,从源数据库中读取相关的表以及字段的数据,在进行数据类型转换后根据源、目的数据库之间的表-字段映射关系表,将该数据写入目的数据库。
四、数据迁移
数据迁移通过如下方式完成:先将源数据库中待迁移信息转换为JDBC类型的信息,然后将JDBC类型的信息转换为目的数据库的相关信息,最后按照目的数据库的SQL语法组合出相关的SQL语句,依靠SQL语句的成功执行来完成数据迁移。
数据迁移的流程如图3所示,包括如下步骤:
从源数据库读取一条记录;
将记录中的各列转换为JAVA类型的数据;
将转换后的数据写入内存,可根据数据量、内存大小以及数据读取、写入速度等设定内存中存储的数据大小,当写数据达到该预定写入数量时,提交写入的数据。例如,如果待写入的数据量很大,则要分次写入目的数据库,此时可设定内存中写入的预定量数据量,如1000条数据,当内存中写入1000条后将该数据提交,以写入目的数据;
判断写入内存是否成功,如否,回到读取记录的步骤;如是,则判断是否所有记录均已读取完毕,如否,从源数据库读取下一条记录;如是,则提交写入记录后的数据,将提交的数据写入目的数据库。
数据迁移有两种情况:
1、源数据库和目的数据库数据表结构相同
先将源数据库中的表和表结构抽取出来,并根据数据类型对应表转换成适于目的数据库建表的Sql语句,在目的数据库中建立表。然后再根据各个表结构生成select查询语句,获取需要迁移的数据,通过JDBC程序生成目的数据库的insert语句,完成数据的迁移。
2、源数据库和目的数据库数据表结构不同
此种情况,系统不需要建表步骤,直接通过源数据库与目的数据库的表和字段映射关系,从源数据库中抽取相关数据,生成目的数据库的insert语句,完成数据的迁移。
以上本发明的数据库迁移方法可由本发明的数据迁移系统完成。结合图4,对本发明数据迁移系统进行说明。本发明数据迁移系统包括:包括:连接模块、判断模块、选择模块、读取模块、转换模块、写入模块,存储模块(图中未示出),其中:连接模块,用于连接源数据库和目的数据库;读取模块,用于从源数据库读出待迁移的数据;转换模块,用于将该读出的数据转换为中间数据类型的数据,并将转换为中间数据类型的数据转换为目的数据库的数据类型的数据;写入模块,用于将所述转换为目的数据库的数据类型的数据写入目的数据库。
判断模块,用于在读取模块从源数据库读出待迁移的数据之前,判断源数据库的表结构与目的数据库表结构是否相同。
选择模块,用于当源数据库的表结构与目的数据库表结构相同时,提供选择界面,列出源数据库的表结构,供操作者选择将源数据库中的哪些表迁移到目的数据库,形成选择表;当源数据库的表结构与目的数据库表结构不同时,提供选择界面,列出源数据库的表结构和目的数据库的表结构,供操作者选择源数据库中的哪些表与目的数据库中的哪些表对应以及源数据库中的哪些字段与目的数据库中的哪些字段对应,形成表-字段映射关系表,该映射关系表可写入存储模块进行存储。
存储模块,用于存储所述选择表、所述表-字段映射关系表、所述数据类型对应表。读取模块根据存储模块中的选择表或表-字段映射关系表,从源数据库读出待迁移的数据;转换模块,根据存储模块中的数据类型对应表,将该读出的数据转换为中间数据类型的数据,并根据数据类型对应表将转换为中间数据类型的数据转换为目的数据库的数据类型的数据;写入模块,根据存储模块中的选择表或表-字段映射关系表,将所述转换为目的数据库的数据类型的数据写入目的数据库。
一般而言,目的数据库中字段的类型和与之对应的源数据库中的字段的类型应当相同,因此,为避免字段选择错误,进一步的,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,所述判断模块,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示或禁止该源数据库字段的选择。如:选择的目的数据库中的字段数据类型是日期,而选择的源数据库中的对应的字段的数据类型是姓名,则二者明显不一致,因此在字段映射选择界面上显示类型不一致的提示或禁止该源数据库字段的选择,还可将该目的数据库中的字段作反白处理,以禁止该选择,避免数据迁移错误。而在有些情况下,目的数据库中字段的类型和与之对应的源数据库中的字段的类型也可以不同,在选择了目的数据库中表中的一个字段后,在选择与之对应的源数据库中表中的字段时,所述判断模块,对该目的数据库字段和该源数据库字段的数据类型进行比较,如果二者不一致,则在字段映射选择界面上显示类型不一致的提示,并向操作者提供是否继续该操作的提示,当操作者选择继续,则将该源数据库字段与目的数据库字段进行映射,如操作者选择中止,则放弃该映射。
数据迁移系统还包括排序模块,在目的数据库中一个表内的所有字段与源数据库中表的字段的映射选择完毕后,用户可通过该排序模块根据预定规则对该目的数据库的表中的字段进行排序,以满足相应的需要。
数据迁移系统还包括计算模块(图中未示出),对于目的数据库的字段,有时需要对与之对应的源数据库的字段进行公式计算,可以在选择了源数据库字段后,通过计算模块对该字段进行数值计算,如加减乘除等。例如源数据库中有“有效天数”字段,而在数据迁移后希望该“有效天数”增加一倍,此时在进行了源数据库字段与目的数据库字段的映射选择后,可通过该计算模块对该源数据库字段进行*2的计算,以使得迁移后的“有效天数”加倍。
本发明公开了一种基于多种数据存储平台的数据迁移方法及系统,以解决现有数据迁移工具使用繁琐的问题。所述方法包括:整理数据库类型对应基础信息表,配置源数据库与目的数据库之间的表和字段的映射关系,然后通过JAVA程序实现数据迁移的功能。其意义在于可以实现无需编写程序和脚本即可进行跨数据存储平台的相同表结构的数据迁移和跨数据存储平台的不同表结构的数据迁移。
这里本发明的描述和应用是说明性的,并非想将本发明的范围限制在上述实施例中。这里所披露的实施例的变形和改变是可能的,对于那些本领域的普通技术人员来说实施例的替换和等效的各种部件是公知的。本领域技术人员应该清楚的是,在不脱离本发明的精神或本质特征的情况下,本发明可以以其它形式、结构、布置、比例,以及用其它组件和部件等来实现。在不脱离本发明范围和精神的情况下,可以对这里所披露的实施例进行其它变形和改变。