(12)发明专利申请
(10)申请公布号 CN 111680024 A(43)申请公布日 2020.09.18
(21)申请号 202010534252.8(22)申请日 2020.06.11
(71)申请人 北京计算机技术及应用研究所
地址 100854 北京市海淀区永定路51号(72)发明人 张记强 韩世杰 陈树峰 冯帆
王仁 李新乐 (74)专利代理机构 中国兵器工业集团公司专利
中心 11011
代理人 张然(51)Int.Cl.
G06F 16/21(2019.01)G06F 16/28(2019.01)
权利要求书1页 说明书8页 附图2页
CN 111680024 A(54)发明名称
一种通用的异构数据库数据迁移方法(57)摘要
本发明公开了一种通用的异构数据库数据迁移方法,其中,包括:步骤1:注册数据源;步骤2:获取数据库结构;步骤3:选择源数据库与目标数据库;步骤4:使用SELECT语句查询SQLite数据库中表“数据库表”中是否存在目标数据库名,若不存在,则创建与源数据库结构完全一致的目标数据库;步骤5:选择数据类型映射规则;步骤6:在源数据库中抽取数据库数据;步骤7:判断是否备份数据,如果备份则生成XML文件;步骤8:将步骤7抽取到的每一行数据写入目标数据库中;步骤9:将本次数据迁移日志写入SQLite数据库的迁移日志表中。本发明的一种通用异构数据库数据迁移方法,适用于市场上常见的数据库,例如Oracle、SQLServer、Mysql、postgre、达梦、金仓,能够有效完成数据迁移。
CN 111680024 A
权 利 要 求 书
1/1页
1.一种通用的异构数据库数据迁移方法,其特征在于,步骤1:注册数据源;步骤2:获取数据库结构;步骤3:选择源数据库与目标数据库;步骤4:使用SELECT语句查询SQLite数据库中表“数据库表”中是否存在目标数据库名,若不存在,则创建与源数据库结构完全一致的目标数据库。
步骤5:选择数据类型映射规则;步骤6:在源数据库中抽取数据库数据;步骤7:判断是否备份数据,如果备份则生成XML文件;步骤8:将步骤7抽取到的每一行数据写入目标数据库中;步骤9:将本次数据迁移日志写入SQLite数据库的迁移日志表中。2.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,注册数据源包括:加载数据库提供的ODBC驱动,然后将注册信息写入本地SQLite数据库中。
3.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,获取数据库结构包括:执行查询数据库结构的SQL语句,并写入本地SQLite数据库中。
4.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,选择源数据库与目标数据库步骤中,提供接口用于选择已经注册的异构数据源作为源数据库与目标数据库。
5.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,使用SELECT语句查询SQLite数据库中表“数据库表”中是否存在目标数据库名,若不存在,则创建与源数据库结构完全一致的目标数据库;查询结果不为空则表示目标数据库存在,否则表示目标数据库不存在,则创建与源数据库结构完全一致的目标数据库。
6.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,步骤5:选择数据类型映射规则;本步骤提供异构数据库之间的类型转换规则并且为每一个转换规则指定一个唯一的映射规则名称。
7.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,步骤6中使用QsqlQuery::exec接口获取数据,再使用QsqlQuery::next获取一行的数据。
8.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,在每抽取一条数据后在目标数据库上执行INSERT语句,以写入到目标数据库中。
9.如权利要求1所述的通用的异构数据库数据迁移方法,其特征在于,写入SQLite数据库的迁移日志表中的内容包括:迁移时间、迁移是否成功、是否备份、数据迁移记录数量。
2
CN 111680024 A
说 明 书
一种通用的异构数据库数据迁移方法
1/8页
技术领域
[0001]本发明涉及数据存储技术领域,具体涉及一种通用的异构数据库数据迁移方法。背景技术
[0002]在数据库管理系统的领域,已经存在多个成熟的数据库产品(例如Oracle、SQLServer、Mysql、Postgre、武汉达梦、人大金仓、神州通用等),而在企业搭建的众多应用系统中,由于应用开发部门不同或者应用系统本身特点等因素,不同的系统使用的数据库系统不同,已经在这些异构数据库内的数据无法融合在一起。为解决异构数据库之间的数据融合问题,需要将数据从一个异构数据库迁移到另外一个异构数据库中。目前各个数据库厂商提供的数据迁移工具只适用于自身数据库与其他特定数据库之间迁移,例如达梦数据库提供达梦与Oracle数据库之间的数据迁移工具,该工具不能完成达梦与Mysql或者Postgre数据库之间的数据迁移,因此并不具有普遍适用性。[0003]此时亟需一种通用的异构数据库数据迁移方法,以满足目前已经成熟的异构数据库产品之间数据的快速、有效的迁移。[0004]中国专利“CN 104598531 B一种基于触发器的异构关系型数据库间增量数据迁移方法”,把现有多元异构数据库数据通过统一的虚拟表触发器来记载有效通用sql操作日志,同时将sql操作日志同步或异步执行到目标异构库表,从而屏蔽数据库物理细节及语言语法差异。本发明解决了异构关系型数据库库表数据互迁移的简便、易操作问题,可以用于异构关系型数据库的数据处理。[0005]中国专利“CN 107357866 A一种电力企业信息系统中间件、数据库的国产化迁移方法”,利用DMHS工具将非国产数据库内的数据同步到国产数据库。[0006]中国专利“CN 106570086 A数据迁移系统及数据迁移方法”,克服现有技术中只能一次性迁移整个数据库,且迁移数据易丢失的缺陷,提供一种数据迁移系统及数据迁移方法。
[0007]中国专利“CN 104598531 B一种基于触发器的异构关系型数据库间增量数据迁移方法”,通过在异构关系型数据库上创建触发器获取数据库的变化,解决的数据库增量的数据迁移,无法将数据库中已经存在的历史数据进行迁移,并且未解决目标数据库不存在的情形,要解决这些问题,无疑将增加操作人员额外的工作。[0008]中国专利“CN 107357866 A一种电力企业信息系统中间件、数据库的国产化迁移方法”,利用DMHS工具将非国产数据库内的数据同步到国产数据库,解决的是Oracle数据库向达梦数据库迁移的问题,使用的DMHS工具只能针对目标数据库为达梦数据库的情况,而不具有通用性。[0009]中国专利“CN 106570086 A数据迁移系统及数据迁移方法”,需要在源数据库中设计迁移中间表,在目标数据库中设置迁移中间库,增加操作人员工作量。
3
CN 111680024 A
说 明 书
2/8页
发明内容
[0010]本发明的目的在于提供一种通用的异构数据库数据迁移方法,用于解决上述现有技术的问题。
[0011]本发明一种通用的异构数据库数据迁移方法,其中,包括:步骤1:注册数据源;步骤2:获取数据库结构;步骤3:选择源数据库与目标数据库;步骤4:使用SELECT语句查询SQLite数据库中表“数据库表”中是否存在目标数据库名,若不存在,则创建与源数据库结构完全一致的目标数据库;步骤5:选择数据类型映射规则;步骤6:在源数据库中抽取数据库数据;步骤7:判断是否备份数据,如果备份则生成XML文件;步骤8:将步骤7抽取到的每一行数据写入目标数据库中;步骤9:将本次数据迁移日志写入SQLite数据库的迁移日志表中。
[0012]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,注册数据源包括:加载数据库提供的ODBC驱动,然后将注册信息写入本地SQLite数据库中。[0013]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,获取数据库结构包括:执行查询数据库结构的SQL语句,并写入本地SQLite数据库中。[0014]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,选择源数据库与目标数据库步骤中,提供接口用于选择已经注册的异构数据源作为源数据库与目标数据库。
[0015]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,使用SELECT语句查询SQLite数据库中表“数据库表”中是否存在目标数据库名,若不存在,则创建与源数据库结构完全一致的目标数据库;查询结果不为空则表示目标数据库存在,否则表示目标数据库不存在,则创建与源数据库结构完全一致的目标数据库;
[0016]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,步骤5:选择数据类型映射规则;本步骤提供异构数据库之间的类型转换规则并且为每一个转换规则指定一个唯一的映射规则名称。
[0017]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,步骤6中使用QsqlQuery::exec接口获取数据,再使用QsqlQuery::next获取一行的数据。[0018]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,在每抽取一条数据后在目标数据库上执行INSERT语句,以写入到目标数据库中。
[0019]根据本发明的通用的异构数据库数据迁移方法的一实施例,其中,写入SQLite数据库的迁移日志表中的内容包括:迁移时间、迁移是否成功、是否备份、数据迁移记录数量。[0020]本发明提出一种通用的异构数据库数据迁移方法,可以很好的适应目前市面上成熟的数据库产品,具有普遍适用性。附图说明
[0021]图1是异构数据库数据迁移方法的流程图;[0022]图2为保存数据源注册信息的表结构图;[0023]图3为SQLite的数据库表的结构图;[0024]图4为SQLite的数据表表的结构图;[0025]图5为SQLite的数据字段表的结构图。
4
CN 111680024 A
说 明 书
3/8页
具体实施方式
[0026]为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
[0027]本发明提出一种异构数据库数据迁移方法,图1是异构数据库数据迁移方法的流程图,如图1所示,本发明提出的通用异构数据库数据迁移方法包含的步骤将在下面详细描述。
[0028]为了加快系统运行效率,本发明使用SQLite数据库存储异构数据库的结构以及迁移日志信息。[0029]步骤1:数据源注册。
[0030]本发明第一步将异构数据库作为数据源注册到系统中,为后续数据迁移提供数据库信息的支持。
[0031]数据源注册分为两步,第一步通过加载数据库提供的ODBC驱动连接数据库,在Qt环境下调用QsqlDatabase加载Oracle数据库ODBC为:QSqlDatabase::addDatabase(\"QOCI\",m_DataSourceInfo.strname);
[0032]第二步将注册信息写入到SQLite数据库中。数据源注册需要的信息包括数据源类型、注册名称、IP地址、端口号、DNS信息、默认连接数据库名称、用户名与密码。图2为保存数据源注册信息的表结构图,表名称为“数据源表”(T_CONNECTINFO),写入该表数据对应的语句为:\"INSERT INTO'main'.'T_CONNECTINFO'VALUES(NULL,'%1','%2','%3','%4','%5','%6','%7','%8','%9');\").arg(info.type).arg(info.strname).arg(info.strname).arg(info.strip).arg(info.strport).arg(info.strDefDatabaseName).arg(info.strusername).arg(info.strpasswd).arg(info.strDNS)。其中info为DATASOURCEINFO类型,该结构体保存用户注册数据源的参数信息,定义为:
5
CN 111680024 A
说 明 书
4/8页
[0033]
步骤2:数据库结构获取。
[0035]本步骤获取数据源内数据库的结构,目的是在数据迁移时可以直接选择源数据库与目标数据库,通过选择数据源的方式可以减少用户书写出错的机会。[0036]获取数据库结构分为三部分:数据库信息,数据库内表信息,表内字段信息。[0037](1)首先获取数据源数据库信息,并且写入到SQLite的“数据库表”(T_DATABASEINFO),该表的结构如图3所示。[0038]在步骤1连接数据源后,执行获取数据库信息的SQL语句,获取数据源数据库信息。以Oracle数据库为例,在Qt下获取数据源数据库信息的方式为QsqlQuery::exec(“SELECT*FROM USER_USERS”),使用QsqlQuery::next获取结果集。[0039]通过执行SQL语句:\"INSERT INTO'main'.'T_DATABASEINFO'VALUES(NULL,'%1','%2');\").arg(strDes).arg(strDatasource),将获取到的数据库信息写入T_DATABASEINFO表。[0040](2)然后获取表的信息,并且写入到SQLite的“数据表表”(T_TABLEINFO),该表的结构如图4所示。
[0041]通过执行获取表信息的SQL语句,获取数据源内表的信息。以Oracle数据库为例,在Qt下获取数据源内表的信息的方式为:QsqlQuery::exec(“SELECT*FROM USER_TABLES”),使用QsqlQuery::next获取结果集。[0042]通过执行SQL语句:\"INSERT INTO'main'.'T_TABLEINFO'VALUES(NULL,'%1','%2');\").arg(strtable).arg(strDatabase),将获取到的表信息写入T_TABLEINFO表。[0043](3)最后获取字段信息,并且写入到SQLite的“数据字段表”(T_FIELDINFO),该表的结构如图5所示。
6
[0034]
CN 111680024 A[0044]
说 明 书
5/8页
通过执行获取字段信息的SQL语句,获取数据源内字段信息。以Oracle数据库为
例,在Qt下获取数据源内字段信息的方式为:QsqlQuery::exec(“SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME='%1'\").arg(strtable)”),其中strtable为表的名称,使用QsqlQuery::next获取结果集。[0045]通过执行SQL语句:\"INSERT INTO'main'.'T_FIELDINFO'VALUES(NULL,'%1','%2','%3','%4');\").arg(strfield).arg(strType).arg(strlenght).arg(strTable),将获取到的字段信息写入T_FIELDINFO表。[0046]步骤3:选择源数据库与目标数据库。
[0047]本步骤提供接口用于选择已经注册的异构数据源作为源数据库与目标数据库,该接口参数为:①注册名称②数据库名称③注册名称④数据库名称⑤是否备份,其中①②为数据迁移的数据来源位置,③④为数据迁移的目的位置,⑤为是否备份,TRUE为备份,FLASE为不备份。
[0048]步骤4:判断目标数据库是否存在。[0049]本步骤判断目标数据库是否存在。使用SELECT语句查询SQLite数据库中表“数据库表”中是否存在目标数据库名,若不存在,则创建与源数据库结构完全一致的目标数据库;结果不为空则表示目标数据库存在,否则表示目标数据库不存在,则创建与源数据库结构完全一致的目标数据库;查询结果不为空则表示目标数据库存在,直接执行步骤7;否则表示目标数据库不存在,执行步骤5。[0050]步骤5:选择数据类型映射规则
[0051]由于异构数据库的数据类型不同,每个异构数据库都有自己支持的类型,但不同异构数据库之间数据类型均有替代方案。
[0052]本步骤提供异构数据库之间的类型转换规则接口并且需要为每一个转换规则指定一个唯一的“映射规则名称”,下表为Oracle与Mysql字段类型转换对照表,该类型映射规则名称为OracleAndMysql。[0053]表1 Oracle与Mysql字段类型转换对照表
[0054]
7
CN 111680024 A
说 明 书
6/8页
[0055]
[0056]
本步骤提供选择数据类型映射规则的接口,接口参数为“映射规则名称”。
[0057]步骤6:创建目标数据库
[0058]若步骤4判断目标数据库不存在,则在本步骤创建与源数据库结构完全一致的目标数据库。创建方式为根据源数据库结构与数据类型映射规则,使用SQL的DDL语句,创建目标数据库。
[0059]步骤7:抽取数据
[0060]本步骤将在源数据库中逐行的数据库数据,首先使用QsqlQuery::exec接口获取数据,再使用QsqlQuery::next获取一行的数据。[0061]步骤8:判断是否备份数据
[0062]步骤3中提供接口参数⑤为是否备份,TRUE为备份,FALSE为不备份。[0063]步骤9:生成XML文件
[0064]经过步骤1~8,可以获取到源数据库的结构与数据库内数据,如果步骤8判断为备份数据。本步骤将XML操作组件生成XML数据文档。关系数据库的数据转换为XML文档的具体步骤如下:
8
CN 111680024 A[0065][0066][0067][0068][0069][0070]
说 明 书
7/8页
①一个数据库为一个文档;②对应每一个表创建一个元素;③对应表中的每一列创建一个属性;下表为数据库名称为stu,表名称为student与对应的XML文档示例。表2 student表序号12
对应的XML文档:
sno12
snamestu_1stu_2
[0071]
[0072]
这些XML文档将长期保存在磁盘中,用于后期数据迁移失败或者数据库崩溃时,作
为原始数据进行数据库的恢复。[0074]步骤10:数据写入
[0075]将步骤7抽取到的每一行数据写入目标数据中。由于目标数据库与源数据库的数据库结构完全一致,在每抽取一条数据后在目标数据库上执行INSERT语句即可写入到目标数据库中。
[0076]步骤11:写入数据迁移日志
[0077]将本次数据迁移日志写入SQLite数据库“迁移日志表”(T_LOG)中,写入语句为:INSERT INTO'main'.'T_LOG'VALUES()。写入数据包括:迁移时间、迁移是否成功、是否备份、数据迁移记录数量,如果本次迁移备份数据还要包括备份文件的名称等信息。[0078]通过以上的步骤,完成对异构数据库内数据的迁移。[0079]本发明设计了一种通用的异构数据库数据迁移方法,为异构数据库的数据迁移提供服务。当前已经存在的异构数据库数据迁移方法大多针对具体的数据库,无法做到通用性。本发明通过调用数据库的ODBC驱动建立与异构数据库的连接,使用SQLite保存数据,调用简单易用的接口解决异构数据源内数据迁移问题,具有通用性。[0080]本发明提供一种通用的异构数据库数据迁移方法,与现有技术相比,本发明的有
[0073]
9
CN 111680024 A
说 明 书
8/8页
益效果在于:[0081](1)本发明提供一种通用异构数据库数据迁移方法,该方法并不针对特定的数据库,适用于市场上常见的数据库,例如Oracle、SQLServer、Mysql、postgre、达梦、金仓;[0082](2)本发明提供的方案不仅适用于目标数据库存在的情况,也同样适用于目标数据库不存在的情况。
[0083]以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
10
CN 111680024 A
说 明 书 附 图
1/2页
图1
11
CN 111680024 A
说 明 书 附 图
2/2页
图2
图3
图4
图5
12
因篇幅问题不能全部显示,请点此查看更多更全内容