数据迁移方法、装置及电子设备与流程

文档序号:30650627发布日期:2022-07-05 23:52阅读:40来源:国知局
1.本技术涉及数据库
技术领域
:,尤其涉及一种数据迁移方法、装置及电子设备。
背景技术
::2.oracle数据库在当前生产中广泛应用。目前实现oracle数据表迁移的方式中,通常需要单独安装相应的迁移工具。3.但是,在迁移小数据量的数据表时,迁移工具仍然受到实际应用中的限制条件限制,且需要也使用人员预先学习如何使用迁移工具,由此导致对小数据量的oracle数据表进行迁移的操作复杂度较高。技术实现要素:4.有鉴于此,本技术提供一种数据迁移方法及装置,用以解决现有技术中小数量的数据表的迁移操作复杂度较高的技术问题。5.本技术提供了一种数据迁移方法,包括:6.根据第一数据表,获得第一脚本,所述第一脚本中至少包含所述第一数据表中的至少一个第一字段;7.执行所述第一脚本,以得到第二脚本,所述第二脚本中包含至少一个第二字段,所述第二字段与所述第一字段相对应;8.执行所述第二脚本,以使得所述第二字段被写入第二数据表中。9.上述方法,优选的,所述第一脚本为select类型的脚本文件,以使得所述第一脚本中至少包含从所述第一数据表中通过查询所得到的第一字段。10.上述方法,优选的,所述第一脚本中包含有至少一个转义符和至少一个连接符;11.其中,所述转义符用于将所述第二脚本中的字符串进行封装;所述连接符用于将所述第二脚本中的字符串进行连接,以使得执行所述第一脚本能够得到所述字符串组成的第二脚本,所述第二脚本为insert类型的脚本文件。12.上述方法,优选的,所述第一字段为字符类型或非字符类型;13.在所述第一字段为非字符类型的情况下,所述第二脚本中包含至少一种对所述第一字段进行类型转换的目标函数,以使得所述第一字段对应的第二字段被转换为字符类型。14.上述方法,优选的,所述目标函数包括:第一转换函数和第二转换函数;15.其中,所述第一转换函数用于将所述第一字段转换成16进制的字段;所述第二转换函数用于将所述16进制的第一字段转换成字符类型的字段。16.本技术还提供了一种数据迁移装置,包括:17.脚本获得单元,用于根据第一数据表,获得第一脚本,所述第一脚本中至少包含所述第一数据表中的至少一个第一字段;18.第一执行单元,用于执行所述第一脚本,以得到第二脚本,所述第二脚本中包含至少一个第二字段,所述第二字段与所述第一字段相对应;19.第二执行单元,用于执行所述第二脚本,以使得所述第二字段被写入第二数据表。20.上述装置,优选的,所述第一脚本为select类型的脚本文件,以使得所述第一脚本中至少包含从所述第一数据表中通过查询所得到的第一字段。21.上述装置,优选的,所述第一脚本中包含有至少一个转义符和至少一个连接符;22.其中,所述转义符用于将所述第二脚本中的字符串进行封装;所述连接符用于将所述第二脚本中的字符串进行连接,以使得执行所述第一脚本能够得到所述字符串组成的第二脚本,所述第二脚本为insert类型的脚本文件。23.上述装置,优选的,所述第一字段为字符类型或非字符类型;24.在所述第一字段为非字符类型的情况下,所述第二脚本中包含至少一种对所述第一字段进行类型转换的目标函数,以使得所述第一字段对应的第二字段被转换为字符类型。25.上述装置,优选的,所述目标函数包含第一转换函数和第二转换函数;26.其中,所述第一转换函数用于将所述第一字段转换成16进制的字段;所述第二转换函数用于将所述16进制的第一字段转换成字符类型的字段。27.从上述技术方案可以看出,本技术公开的一种数据迁移方法及装置中,通过获得第一脚本,以得到第一数据表中的第一字段,再执行第一脚本,进而得到包含对应于第一字段的第二字段的第二脚本,由此执行第二脚本能够使得第二脚本中的第二字段被写入第二数据表,由此实现数据表中字段数据的迁移。可见,本技术中无需借助特定的迁移工具就可以通过脚本来实现数据迁移,从而达到降低数据迁移的操作复杂度的目的。附图说明28.为了更清楚地说明本技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。29.图1为本技术实施例一提供的一种数据迁移方法的流程图;30.图2为本技术实施例二提供的一种数据迁移装置的结构示意图;31.图3为本技术适用于oracle数据表迁移的实例流程图;32.图4为本技术适用于oracle数据表迁移前的数据表示例图;33.图5为本技术适用于oracle数据表迁移后的数据表示例图。具体实施方式34.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。35.参考图1所示,为本技术实施例一提供的一种数据迁移方法的实现流程图,该方法可以适用于配置有数据库且能够对数据库中的数据进行处理的电子设备中,如计算机或服务器等。本实施例中的技术方案主要用于降低数据迁移的操作复杂度。36.具体的,本实施例中的方法可以包括以下步骤:37.步骤101:根据第一数据表,获得第一脚本。38.其中,第一脚本中至少包含第一数据表中的至少一个第一字段。39.具体的,本实施例中的第一脚本为能够从第一数据表中查询出第一字段的脚本文件,如select类型的脚本文件,由此,第一脚本中至少包含从第一数据表中通过查询所得到的第一字段。40.例如,第一数据表testtable中包含三个字段,本实施例中根据第一数据表中的这三个字段,通过构建select脚本从第一数据表中获得到这些字段。此时的select脚本可以理解为导出脚本,即将字段内容从作为源表的第一数据表中导出的脚本文件。41.步骤102:执行第一脚本,以得到第二脚本。42.其中,第二脚本中包含至少一个第二字段,第二脚本中的第二字段与第一脚本中的第一字段相对应,也就是说,第二脚本中的第二字段是在执行第一脚本时通过第一字段得到。43.具体的,第一脚本中包含至少一个转义符和至少一个连接符,其中的转义符用于将第二脚本中的字符串进行封装;而连接符用于将第二脚本中的字符串进行连接,以使得执行第一脚本就能够得到这些字符串组组成的第二脚本。这里的第二脚本可以为insert类型的脚本文件。44.例如,select脚本中通过转义符将组成insert脚本的字符串进行封装并使用连接符将这些封装的字符串进行连接,而组成insert脚本的字符串中包含有源表中的字段,进而通过select脚本从源表中查询出相应字段的同时,通过执行select脚本得到包含源表中字段内容的insert脚本。45.步骤103:执行第二脚本,以使得第二字段被写入第二数据表中。46.例如,在执行insert脚本后,使得insert脚本中的字段被写入目的表中。47.从上述技术方案可以看出,本技术实施例一提供的一种数据迁移方法中,通过获得第一脚本,以得到第一数据表中的第一字段,再执行第一脚本,进而得到包含对应于第一字段的第二字段的第二脚本,由此执行第二脚本能够使得第二脚本中的第二字段被写入第二数据表,由此实现数据表中字段数据的迁移。可见,本实施例中无需借助特定的迁移工具就可以通过脚本来实现数据迁移,从而达到降低数据迁移的操作复杂度的目的。48.在一种实现方式中,第一字段可能为字符类型,也可能为非字符类型,基于此,本实施例中在第一字段为非字符类型的情况下,通过在第二脚本中设置至少一种对第一字段进行类型转换的目标函数,以使得第一字段对应的第二字段被转换为字符类型。49.例如,在源表中的某个字段为密码或中文的类型时,在insert脚本中设置能够将密码或中文的字段转换成字符类型的字段的目标函数。50.具体的,目标函数可以包含有第一转换函数和第二转换函数,第一转换函数用于将第一字段转换成16进制的字段;第二转换函数用于将16进制的第一字段转换成字符类型的字段。由此,第二脚本中通过第一转换函数和第二转换函数将非字符类型的第一字段转换为字符类型的字段。51.例如,在源表中某个字段为密码或中文的类型时,在insert脚本中设置函数rawtohex()将字段转换为16进制,进一步设置函数utl_raw.cast_to_varchar2()将16进制的字段转换为字符类型。以源表中包含字段1、字段2和字段3为例,相应的insert脚本具体如下:52.insertinto表名values(utl_raw.cast_to_varchar2(rawtohex(字段1)),字段2,字段3)。53.相应的select脚本具体如下:54.selectq'[insertinto表名values(']'||q'[utl_raw.cast_to_varchar2(']'||rawtohex(字段1)||q'['),]'||字段2||q'[,]'||字段3||q'[');]'fromtesttable。[0055]其中,q'[]'为转义符,||为连接符。[0056]可见,本实施例中通过构建select脚本,通过执行select脚本以生成相应的insert脚本,实现数据表的导出,执行insert脚本,进而实现数据表的导入。[0057]参考图2所示,为本技术实施例一提供的一种数据迁移装置的结构示意图,该装置可以配置在配置有数据库且能够对数据库中的数据进行处理的电子设备中,如计算机或服务器等。本实施例中的技术方案主要用于降低数据迁移的操作复杂度。[0058]具体的,本实施例中的装置可以包括以下单元:[0059]脚本获得单元201,用于根据第一数据表,获得第一脚本,所述第一脚本中至少包含所述第一数据表中的至少一个第一字段;[0060]第一执行单元202,用于执行所述第一脚本,以得到第二脚本,所述第二脚本中包含至少一个第二字段,所述第二字段与所述第一字段相对应;[0061]第二执行单元203,用于执行所述第二脚本,以使得所述第二字段被写入第二数据表。[0062]从上述技术方案可以看出,本技术实施例二提供的一种数据迁移装置中,通过获得第一脚本,以得到第一数据表中的第一字段,再执行第一脚本,进而得到包含对应于第一字段的第二字段的第二脚本,由此执行第二脚本能够使得第二脚本中的第二字段被写入第二数据表,由此实现数据表中字段数据的迁移。可见,本实施例中无需借助特定的迁移工具就可以通过脚本来实现数据迁移,从而达到降低数据迁移的操作复杂度的目的。[0063]在一种实现方式中,所述第一脚本为select类型的脚本文件,以使得所述第一脚本中至少包含从所述第一数据表中通过查询所得到的第一字段。[0064]在一种实现方式中,所述第一脚本中包含有至少一个转义符和至少一个连接符;[0065]其中,所述转义符用于将所述第二脚本中的字符串进行封装;所述连接符用于将所述第二脚本中的字符串进行连接,以使得执行所述第一脚本能够得到所述字符串组成的第二脚本,所述第二脚本为insert类型的脚本文件。[0066]在一种实现方式中,所述第一字段为字符类型或非字符类型;[0067]在所述第一字段为非字符类型的情况下,所述第二脚本中包含至少一种对所述第一字段进行类型转换的目标函数,以使得所述第一字段对应的第二字段被转换为字符类型。[0068]具体的,所述目标函数包含第一转换函数和第二转换函数;[0069]其中,所述第一转换函数用于将所述第一字段转换成16进制的字段;所述第二转换函数用于将所述16进制的第一字段转换成字符类型的字段。[0070]以对oracle数据库中的小数据量数据表进行迁移为例,以下对本实施例中的技术方案进行举例说明:[0071]如图3中所示,本实施例中的技术方案将数据迁移分为三个阶段:编写迁移脚本、执行迁移脚本以生成导入脚本、执行导入脚本以完成数据导入。[0072]首先,编写迁移脚本:[0073]本实施例中将源数据表中数据(如字段等)通过查询(select)及转义(q’[]’)方式生成insert语句脚本。对于所有可用select实现的结果集都可按此方案生成脚本,可满足单表同构、单表异构、联表等多种需求。具体的,编写迁移脚本可按以下步骤进行:[0074]1)在所有字段不需要进行类型转换的情况下,根据需要迁移的数据表编写需要生成的insert脚本,如:[0075]insertinto表名values(字段1,字段2,字段3...);‑‑此处字段1,字段2..表示表中具体字段的某行内容;[0076]2)对数据表中有字段为中文或密码等非字符类型的情况下,对从源数据表查询到的非字符类型的字段转换成16进制后进行导入,进一步的,在导入时将这个16进制字段转换为字符串类型再进行导入。例如,oracle提供了16进制类型数据转换为字符类型的函数utl_raw.cast_to_varchar2(‘16进制字段’),这样假设待迁移的数据表中字段1需要进行转换,则修改1)中的insert脚本为:[0077]insertinto表名values(utl_raw.cast_to_varchar2(‘16进制字段1’),字段2,字段3...);[0078]3)上面insert脚本为最终需要的脚本格式,而其中的字段需要从源表查出具体内容,需要利用select脚本实现,select脚本的功能是在源表中查出数据的结果拼接生成insert脚本。利用的工具是oracle在sql中的转义(q'[]')和数据连接功能(||).需要进行16进制转换的字段需要利用函数rawtohex(字段)得到。基于此,select脚本为:[0079]selectq'[insertinto表名values(']'||q'[utl_raw.cast_to_varchar2(']'||rawtohex(字段1)||q'['),]'||字段2||q'[',]'||字段3||q'[');]'fromtesttable;[0080]基于此,在数据库交互环境(dba,sqlplus)执行迁移脚本即select脚本,结果集生成的即为insert格式导出的数据文件,即导入脚本,即完成数据导出;之后,在数据库交互环境(dba,sqlplus)执行生成的insert格式文件即insert脚本,以完成数据导入。[0081]示例:[0082]待迁移的数据表:[0083]testtable{[0084]pidchar(16),/*客户号*/[0085]pwdchar(25),/*密码*/[0086]namechar(100)/*姓名*/}[0087]表中数据如图4中所示。[0088]由于此表包含密码和姓名,都需要进行二进制转换处理。[0089]在sqlplus环境中执行spool:[0090]spool./insertsql[0091]selectq'[insertintotesttablevalues(']'||pid||q'[',]'||q'[utl_raw.cast_to_varchar2(']'||rawtohex(name)||q'['),utl_raw.cast_to_varchar2(']'||rawtohex(pwd)||q'['));]'fromtesttable;[0092]spooloff[0093]由此,生成的文件insertsql.lst内容如下:[0094]insertintotesttablevalues('1699999999999999',utl_raw.cast_to_varchar2('e5bca0e4b88920202020202020202020202020202020202020'),utl_raw.cast_to_varchar2('00050609f1f22020'));[0095]可以看到生成的insert脚本中已经将字段内容转换为16进制。[0096]之后,执行生成的insert脚本@insertsql.lst,以完成数据导入。[0097]基于此,在导入数据表后查询表,如图5中所示,可见,已经成功实现数据迁移。[0098]综上,本实施例中通过sql语句直接导出需要迁移数据insert格式的脚本的解决方案并满足所有类型字段需求的数据迁移方案,解决了sql查询特殊字段需要转换为16进制导入的问题,能够为oracle数据库间小数据量同构/异构数据表的导出和导入。可见,本实施例中可对所有可用sql查询的结果集生成导出文件并进行导入,具有灵活性,而且不需要进行用户权限/路径等配置,使用简单。最后,本实施例中可按照目标数据库需要导入的内容灵活定制导出脚本,可单表也可联表,且,另外,本实施例中使用sql查询,对开发人员来说也不需要特意进行学习,技术门槛较低。[0099]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。[0100]专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。[0101]结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或
技术领域
:内所公知的任意其它形式的存储介质中。[0102]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1