数据库的导库方法及装置
技术领域
本发明涉及数据库技术,尤其涉及一种数据库的导库方法及装置。
背景技术
在企业信息系统的使用过程中,随着企业业务的不断发展和应用领域的不断拓宽,当某个系统满足不了用户需求时会选择使用另一个更为完善的系统,为了继续使用原系统中的重要信息,就需要把原系统数据库中的数据导到另一个目标系统数据库中去。
现有的数据库导库方法主要有两种:方法一是先把原系统中的数据以一定的格式导出,大多是导出成一定格式的xml文件,然后通过解析导出的xml文件重新入库到目标系统中去。方法二是直接连接两个库的数据源,用线程循环扫描原系统的表,直接从表中取n条数据然后插入目标系统的表中。
方法一存在的问题是,操作起来比较繁琐,效率也比较低,导出的文件会占用大量的磁盘空间;方法二存在的问题是,程序中断后,如果重新启动导库服务无法继续接着原系统之前的数据继续导库,会从头开始扫描原系统中整个表的数据,导致目标系统中出现大量的重复数据,这样就得删掉目标系统中之前导过的数据重新开始导库,操作复杂且出错概率较大。
发明内容
本发明提供一种数据库的导库方法及装置,以克服现有技术中导库操作效率低的问题。
第一方面,本发明提供一种数据库的导库方法,用于将原系统数据表的数据导入至目标系统数据表中,还包括一个用于记录已导出数据的记录表;所述方法包括:
步骤a、获取所述记录表中最后一条记录所对应的参考序列号;
步骤b、判断所述原系统数据表中是否存在待导出记录,所述待导出记录对应的序列号比所述参考序列号大;
步骤c、若存在,则获取所述原系统数据表中按第一主键序列号升序排序后比所述参考序列号大的第一条待导出记录所对应的数据,将所述数据导入至所述目标系统数据表中;并在所述记录表中插入一条记录作为最后一条记录,所述最后一条记录对应的参考序列号设置为所述第一条待导出记录所对应的序列号;
返回执行步骤a,直至所述原系统数据表的数据全部导入至所述目标系统数据表中。
可选地,所述步骤a还包括:
若所述记录表无记录,则将所述参考序列号默认为0。
可选地,在步骤c中,若不存在所述待导出记录,则导库流程结束。
第二方面,本发明提供一种数据库的导库装置,用于将原系统数据表的数据导入至目标系统数据表中,还包括一个用于记录已导出数据的记录表;所述装置包括:
获取模块,用于获取所述记录表中最后一条记录所对应的参考序列号;
判断模块,用于判断所述原系统数据表中是否存在待导出记录,所述待导出记录对应的序列号比所述参考序列号大;
处理模块,用于若所述判断模块判断存在所述待导出记录,则获取所述原系统数据表中按第一主键序列号升序排序后比所述参考序列号大的第一条待导出记录所对应的数据,将所述数据导入至所述目标系统数据表中;并在所述记录表中插入一条记录作为最后一条记录,所述最后一条记录对应的参考序列号设置为所述第一条待导出记录所对应的序列号;
可选地,所述获取模块还用于:
若所述记录表无记录,则将所述参考序列号默认为0。
可选地,所述处理模块,还用于:若所述判断模块判断不存在所述待导出记录,则结束导库流程。
本发明数据库的导库方法及装置,通过获取所述记录表中最后一条记录所对应的参考序列号;判断所述原系统数据表中是否存在序列号比所述参考序列号大的待导出记录;若存在,则获取所述原系统数据表中按第一主键序列号升序排序后比所述参考序列号大的第一条待导出记录所对应的数据,将所述数据导入至所述目标系统数据表中;并在所述记录表中插入一条记录作为最后一条记录,所述最后一条记录对应的参考序列号设置为所述第一条待导出记录所对应的序列号;重复执行上述过程,直至所述原系统数据表的数据全部导入至所述目标系统数据表中,提高了导库效率,避免了导库中断后,从头开始将原系统数据表的数据导入目标系统数据表中,出现大量的重复数据的问题。
附图说明
图1为本发明数据库的导库方法实施例一的流程图一;
图2为本发明数据库的导库方法实施例一的信令流程图;
图3为本发明数据库的导库装置实施例一的结构示意图。
具体实施方式
图1为本发明数据库的导库方法实施例一的流程图一,图2为本发明数据库的导库方法实施例一的信令流程图。本实施例的方法用于将原系统数据表的数据导入至目标系统数据表中,如图2所示,还包括一个用于记录已导出数据的记录表。如图1所示,本实施例的方法可以包括:
步骤a、获取记录表中最后一条记录所对应的参考序列号;
步骤b、判断原系统数据表中是否存在待导出记录,待导出记录对应的序列号比参考序列号大;
步骤c、若存在,则获取原系统数据表中按第一主键序列号升序排序后比参考序列号大的第一条待导出记录所对应的数据,将数据导入至目标系统数据表中;并在记录表中插入一条记录作为最后一条记录,最后一条记录对应的参考序列号设置为第一条待导出记录所对应的序列号;
返回执行步骤a,直至原系统数据表的数据全部导入至目标系统数据表中。
具体地,本实施例的方法可以做成一个批处理文件bat启动的导库服务,需要同时连接两个原系统以及目标系统的数据源,需要以下三个表:原系统数据表,目标系统数据表,已导出数据的记录表。在bat的配置文件中配置好需要导出和导入的表名以及入库的实现类。
bat启动后由main方法开启一个线程,设这个线程执行的扫描接口实现类为scanner,如图2所示,本实施例的执行主体可以为数据库的导库装置,执行scanner获取记录表中最后一条记录所对应的参考序列号(步骤1),获取到参考序列号(步骤2)之后,判断原系统数据表中是否存在序列号比参考序列号大的待导出记录(步骤3),若不存在待导出记录(步骤4a),则结束导库;若存在待导出记录(步骤4b),则获取原系统数据表中按第一主键序列号升序排序后比参考序列号大的第一条待导出记录所对应的数据,将对应的数据导入目标系统数据表中(步骤5),并在记录表中插入一条记录作为最后一条记录,将最后一条记录对应的参考序列号设置为第一条待导出记录所对应的序列号,也即记录第一条待导出记录所对应的序列号(步骤6),还可以生成该条数据导入成功或失败的日志,若导入成功,则向数据库的导库装置返回数据导入成功(步骤7);执行上述步骤之后,如图1所示,返回执行步骤a,直至原系统数据表的数据全部导入至目标系统数据表中。
如果因为电脑突然断电或者用户想暂停导库服务,直接关闭bat停止导库服务即可,下次启动时导库服务还会接着上次导入的数据继续开始导库,成功避免了导库过程中数据漏掉或者重复插入数据的情况,提高了易用性,同时也避免了程序突然中断后继续从头开始导库。
可选地,所述步骤a还包括:
若所述记录表无记录,则将所述参考序列号默认为0。
如果步骤a中,记录表无记录,则将参考序列号默认为0,即将原系统数据表的数据从头开始导入目标系统数据表中。
可选地,在步骤c中,若不存在所述待导出记录,则导库流程结束。
如图2所示,如果不存在比参考序列号大的序列号对应的记录,则由返回一个结束状态给扫描线程,扫描线程获取状态后将终止执行,并可以输出导库结束的提示信息。
本实施例,通过获取记录表中最后一条记录所对应的参考序列号;判断原系统数据表中是否存在序列号比参考序列号大的待导出记录;若存在,则获取原系统数据表中按第一主键序列号升序排序后比参考序列号大的第一条待导出记录所对应的数据,将数据导入至目标系统数据表中;并在记录表中插入一条记录作为最后一条记录,最后一条记录对应的参考序列号设置为第一条待导出记录所对应的序列号;重复执行上述过程,直至原系统数据表的数据全部导入至目标系统数据表中,提高了导库效率,避免了导库中断后,从头开始将原系统数据表的数据导入目标系统数据表中,出现大量的重复数据的问题。
图3为本发明数据库的导库装置实施例一的结构示意图,如图3所示,本实施例的数据库的导库装置30,用于将原系统数据表的数据导入至目标系统数据表中,还包括一个用于记录已导出数据的记录表;可以包括:获取模块301、判断模块302和处理模块303,其中,获取模块301,用于获取所述记录表中最后一条记录所对应的参考序列号;判断模块302,用于判断所述原系统数据表中是否存在待导出记录,所述待导出记录对应的序列号比所述参考序列号大;处理模块303,用于若判断模块302判断存在所述待导出记录,则获取所述原系统数据表中按第一主键序列号升序排序后比所述参考序列号大的第一条待导出记录所对应的数据,将所述数据导入至所述目标系统数据表中;并在所述记录表中插入一条记录作为最后一条记录,所述最后一条记录对应的参考序列号设置为所述第一条待导出记录所对应的序列号。
可选地,获取模块301还用于:
若所述记录表无记录,则将所述参考序列号默认为0。
可选地,处理模块303,还用于:若所述判断模块302判断不存在所述待导出记录,则结束导库流程。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。