一种基于不同数据库的数据复制方法和系统的制作方法

文档序号:9750917阅读:794来源:国知局
一种基于不同数据库的数据复制方法和系统的制作方法
【技术领域】
[0001]本发明属于数据库系统应用领域,尤其涉及一种基于不同数据库的数据复制方法和系统。
【背景技术】
[0002]在当前的数据库系统应用环境中,多个数据库并存使用的现象越来越普遍。比如,某企业的不同部门分别使用异构或非异构的多个不同数据库进行信息应用等,具体地比如,该企业的部门A使用EMC公司的GreenPlum数据库,部门B使用甲骨文公司的ORACLE数据库,部门C则使用Teradata数据库等。基于此,出于数据备份、数据同步等方面的考虑,不同数据库之间的数据复制日渐成为人们较为关心的问题。
[0003]目前,学术界和业界解决不同数据库间的数据复制问题,采用的较为典型的方法为拷贝法,拷贝法具体是指首先从源数据库中导出特定格式的目标数据至本地应用服务器,再将目标数据从应用服务器导入到目标数据库中(如果源数据库、目标数据库异构,则其间某一环节需根据目标数据库的存储要求进行必要的数据转换)。在企业信息应用领域中,不同数据库之间数据复制的数据量往往较大,一次数据复制的数据量时常达到几十GB、几百GB,甚至会达到TB级别。基于此,上述拷贝法由于需将待复制数据在应用服务器上落成本地文件,而极易造成对应用服务器本地磁盘的巨大占用,因此,当大量的复制任务需同时进行时,本地磁盘的负载将是个瓶颈问题,无法实现多个复制任务的并发运行。

【发明内容】

[0004]有鉴于此,本发明的目的在于提供一种基于不同数据库的数据复制方法和系统,旨在解决现有技术因需将数据在应用服务器上落成本地文件,而导致对应用服务器本地磁盘的占用量较大,进而影响应用服务器的并发运行量这一问题。
[0005]为此,本发明公开如下技术方案:
[0006]—种基于不同数据库的数据复制方法,包括:
[0007]从目标数据中获取当前待处理的第一预设大小的目标子数据;其中,所述目标数据为:由源数据库基于预设筛选条件所提供的待复制数据;
[0008]将所述目标子数据写入管道;所述管道为预先在应用服务器内存中创建的第二预设大小的共享内存区域,所述第二预设大小的数值不小于所述第一预设大小的数值;
[0009]从所述管道中读取所述目标子数据,并将读取的所述目标子数据写入目标数据库中;在所述目标数据未被全部写入所述目标数据库时,转至执行所述步骤:从目标数据中获取当前待处理的第一预设大小的目标子数据。
[0010]上述方法,优选的,当所述源数据库、所述目标数据库非异构时,所述目标数据为:从所述源数据库中筛选出的符合所述筛选条件的原始数据集合;
[0011 ]当所述源数据库、所述目标数据库异构时,所述目标数据为:依据所述目标数据库的存储要求,对所述原始数据集合进行数据转换后所得的数据。
[0012]上述方法,优选的,所述源数据库、所述目标数据库为Oracle、Teradata、GreenPlum三种数据库中的任意一种。
[0013]上述方法,优选的,还包括:
[0014]统计从所述源数据库中所获取的数据的第一记录条数,统计向所述目标数据库所写入的数据的第二记录条数,并在所述第二记录条数与所述第一记录条数不相等时报错。
[0015]上述方法,优选的,通过预先编写的数据卸载程序向所述管道写入数据,通过预先编写的数据加载程序从所述管道中读取数据,并将读取的数据加载至所述目标数据库中,则所述方法还包括:
[0016]在所述数据卸载程序或所述数据加载程序执行失败时,采用相应的响应机制进行应对处理。
[0017]上述方法,优选的,所述数据卸载程序执行失败时的响应机制包括:
[0018]在所述管道不可写不可读时,删除所述管道;
[0019]在所述管道不可写可读时,调用系统写命令向所述管道写入预设数据,并在使用所述数据加载程序读取所述预设数据后,删除所述管道。
[0020]上述方法,优选的,所述数据加载程序执行失败时的响应机制包括:
[0021 ]在所述管道不可写不可读时,删除所述管道;
[0022]在所述管道可写不可读时,调用系统读命令读取所述管道中的数据,并删除所述管道。
[0023]—种基于不同数据库的数据复制系统,包括:
[0024]获取模块,用于从目标数据中获取当前待处理的第一预设大小的目标子数据;其中,所述目标数据为:由源数据库基于预设筛选条件所提供的待复制数据;
[0025]写数据模块,用于将所述目标子数据写入管道;所述管道为预先在应用服务器内存中创建的第二预设大小的共享内存区域,所述第二预设大小的数值不小于所述第一预设大小的数值;
[0026]读数据模块,用于从所述管道中读取所述目标子数据,并将读取的所述目标子数据写入目标数据库中;在所述目标数据未被全部写入所述目标数据库时,转至执行所述步骤:从目标数据中获取当前待处理的第一预设大小的目标子数据。
[0027]上述系统,优选的,还包括:
[0028]统计与报错模块,用于统计从所述源数据库中所获取的数据的第一记录条数,统计向所述目标数据库所写入的数据的第二记录条数,并在所述第二记录条数与所述第一记录条数不相等时报错。
[0029]上述系统,优选的,还包括:所述写数据模块具体通过预先编写的数据卸载程序向所述管道写入数据,所述读数据模块具体通过预先编写的数据加载程序从所述管道中读取数据,并将读取的数据加载至所述目标数据库中;则所述系统还包括:
[0030]响应处理模块,用于在所述数据卸载程序或所述数据加载程序执行失败时,采用相应的响应机制进行应对处理。
[0031]由以上方案可知,本申请公开的基于不同数据库的数据复制方法和系统,预先在应用服务器内存中创建的一预设大小的共享内存区域,并将该内存区域作为源数据库、目标数据库之间实现数据复制时用于转移数据的管道(或称为管道文件),在此基础上,利用所述管道,通过数据流动的方式进行源数据库至目标数据库之间的数据转移,进而实现源、目标数据库间的数据复制。可见,本申请无需将待复制数据在应用服务器上落成本地文件,实现了中间数据不落地,解决了应用服务器的磁盘负载过大的问题。且由于本申请使用几乎不占用空间的管道文件,并通过数据流动的方式来转移需进行复制的数据,从而可实现高并发大批量的数据复制。
【附图说明】
[0032]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0033]图1是本发明实施例一提供的基于不同数据库的数据复制方法流程图;
[0034]图2是本发明实施例二提供的基于不同数据库的数据复制方法流程图;
[0035]图3是本发明实施例三提供的基于不同数据库的数据复制方法流程图;
[0036]图4-图6是本发明实施例四提供的基于不同数据库的数据复制系统的结构示意图。
【具体实施方式】
[0037]为了引用和清楚起见,下文中使用的技术名词、简写或缩写总结解释如下:
[0038]管道:在Linux中,管道是一种使用非常频繁的通信机制,从本质上说,管道也是一种文件,因此又可称之为管道文件,但管道文件与一般的文件有所不同,其可以克服使用文件进行通信的时存在的问题,具体表现为限制管道的大小,实际上管道是一个固定大小的内存缓冲区,在Linux中,该缓冲区的大小为I页,S卩4K字节,使得它的大小不像文件那样不加检验地增长。且管道可解决缓冲区写满或为空的问题,比如写管道时如果缓冲区写满,随后对管道的writeO调用将默认地被阻塞,待管道中某些数据被读取腾出空间时,继续执行writeO调用写数据;另外读取进程也可能工作得比写进程快,当所有当前进程数据已被读取时,管道变空,当这种情况发生时,随后的read()调用将默认地被阻塞,以等待某些数据被写入,这解决了read()调用返回文件结束的问题。其中,从管道中读数据是一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以支持后续数据的写入。
[0039]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0040]实施例一
[0041]本发明实施例一公开一种基于不同数据库的数据复制方法,参考图1,所述方法可以包括以下步骤:
[0042]SlOl:从目标数据中获取当前待处理的第一预设大小的目标子数据;其中,所述目标数据为:由源数据库基
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1