一种数据同步方法及装置的制作方法

文档序号:6353517阅读:330来源:国知局

专利名称::一种数据同步方法及装置的制作方法
技术领域
:本申请涉及计算机领域,尤指一种数据同步方法及装置。
背景技术
:在大型的电子商务网站中,经常要从数据仓库中同步计算好的数据到前台的联机事务处理(On-LineTransactionProcessing,0LTP)的甲骨文ORACLE数据库中,以供前台的应用服务器查询。ORACLE数据库中包括一个撤销/回滚表空间(undotablespace),当一个会话对数据库进行数据操作语言(DataManipulationLanguage,DML)的更新和删除(UpdateandDelete)操作时,会把影响数据行的原始数据迁到另外一个地方存起来,这个地方就是撤销/回滚表空间。在此会话没有提交(Commit)之前,其它会话访问这些数据行时,发现数据已被修改,但没有被提交,根据存储的撤销/回滚地址信息,可以到撤销/回滚表空间中去获取原始数据,但在此会话没有提交前或回滚完成前,所占用的回滚段是不会释放的。目前常用的同步数据的方法,其同步的体系结构如图1所示。图1中,tl表为前台OLTPORACLE数据库中的一张表;数据仓库DW(datawarehouse)为后台的数据仓库,上层服务器(Application)从tl表中获取数据。同步数据的逻辑如下(以下命令都在前台数据库执行)第一步删除用户表tl表中的数据(deletefromschemal.tablename),将删除的数据暂时放到撤销/回滚表空间中。第二步从(后台数据仓库的)用户表t2表中获取数据插入到用户表tl表中(insertintoschemal.tablenameselect*fromschema2.tablename@lnkdw),同步过来的、尚未提交的数据也暂存于撤销/回滚表空间中。第三步提交(co_it)。第四步若出现异常,回滚(rollback)。由于前台和数据仓库都是采用ORACLE数据库,可以直接通过数据库连接(databaselink)导入/出数据;上述步骤的第二步中所使用的lnk_dw就是一个数据库连接。现有技术的数据同步方法,由于同一数据业务的所有操作均在同一张表中进行,即后台数据仓库中的一张表对应前台数据库的一张表,当操作进行时,将会有大量数据需要被放到撤销/回滚表空间。由于上述原因导致现有技术存在下列缺点(1)在上述步骤中,第一步和第二步将会消耗大量的撤销/回滚表空间,所以经常会在这里出现问题,如果消耗完所有撤销/回滚表空间,将会影响到其它正常的DML(Insert,UpdateandDelete)操作,即影响到业务的正常进行。如果在高峰时期,撤销/回滚表空间被占满,那么应用服务器向数据库发出的DML语句,都会出现等待,进而把应用服务器端配置的连接池占满,因为进入应用服务器的请求越来越多,而这些请求因得不到连接,都要排队等待,从而形成恶性循环,很快就会把应用服务器的内存资源等消耗完,进而导致应用服务器死机。(2)第一步和第二步执行时间过长,在这么长的时间之内,如果出现异常,将会进入第四步,即回滚步骤。从而导致容错能力比较差,且进入回滚状态后,因为数据量巨大,ORACLE做回滚的时间将会非常长,进而影响了生产数据库的性能。(3)同步数据的效率低,这个效率损耗主要存在于第一步的删除操作中。(4)不具有断点续传能力。(5)无法监控同步数据的进度。随着同步数据量越来越大,前台ORACLE数据库的撤销/回滚表空间很容易被占满,出现影响业务的正常进行的情况越来越多,给企业的生产数据库带来严重的安全隐患。
发明内容本申请实施例提供一种数据同步方法及装置,解决了数据同步量日渐增大时的拥堵问题,提高了数据同步的速度和效率。一种同步数据的方法,包括将源数据表中待同步数据所占用的存储区域划分为若干组;并行启动对应的若干个数据同步进程,由每个数据同步进程同步对应组中的各个所述存储区域中的待同步数据到当前目标数据表中。根据本申请的上述方法,所述由每个数据同步进程同步对应组中的各个所述存储区域中的数据是依次进行的,具体包括每个数据同步进程处理所述对应组中的一个存储区域中的待同步数据;同步所述一个存储区域中的待同步数据并成功提交后,判断是否处理完所述对应组内的所有存储区域;当未处理完所述对应组内的所有存储区域时,启动处理所述对应组中下一个存储区域中的待同步数据的过程。本申请的上述方法,还包括当同步某一个所述存储区域中的待同步数据失败时,重新启动同步该存储区域中的待同步数据的过程;当重新启动的次数超过设定阈值时,结束同步该存储区域内的待同步数据的过程。根据本申请的上述方法,将源数据表中待同步数据所占用的存储区域划分为若干组之前,还包括确定源数据表中待同步数据所占用的若干存储区域;以及确定出每一个所述存储区域中待同步数据的存储地址信息。根据本申请的上述方法,所述确定出每一个所述存储区域中待同步数据的存储地址信息,具体包括确定出每一个所述存储区域中待同步数据的存储的最小地址和最大地址;将确定出的包含最小地址和最大地址的地址范围存储到一张中间表中。一种同步数据的装置,包括分组单元,用于将源数据表中待同步数据所占用的存储区域划分为若干组;数据同步单元,用于并行启动对应的若干个数据同步进程,由每个数据同步进程同步对应组中的各个所述存储区域中的待同步数据到当前目标数据表中。根据本申请的上述置,所述数据同步单元,具体包括控制执行子单元和判断子单元;控制执行子单元,用于控制每个数据同步进程处理所述对应组中的一个存储区域中的待同步数据;以及当判断子单元判断出未处理完所述对应组内的所有存储区域时,启动处理所述对应组中下一个存储区域中的待同步数据的过程;判断子单元,用于同步所述一个存储区域中的待同步数据并成功提交后,判断是否处理完所述对应组内的所有存储区域。根据本申请的上述置,所述数据同步单元,还包括重启子单元,用于当同步某一个所述存储区域中的待同步数据失败时,重新启动同步该存储区域中的待同步数据的过程;以及当重新启动的次数超过设定阈值时,结束同步该存储区域中的待同步数据的过程。本申请的上述置,还包括存储区域确定单元,用于确定源数据表中待同步数据所占用的若干存储区域;地址信息确定单元,用于确定出每一个所述存储区域中待同步数据的存储地址信肩、ο本申请实施例提供的数据同步方法及装置,通过将源数据表中待同步数据所占用的存储区域划分为若干组;并行启动对应的若干个数据同步进程,由每个数据同步进程同步对应组中的各个所述存储区域中的待同步数据到当前目标数据表中。上述方法采用了多个进程并行处理,一次处理多个存储区域的数据,在提交的时候就可以同时提交这多个存储区域的数据给目标数据表,减少了提交的次数,从而提高了同步数据的提交速度和效率。图1为现有技术中数据同步方法的原理示意图;图2为本申请实施例中数据同步方法的原理示意图;图3为本申请实施例中数据同步方法的流程图;图4为本申请实施例中向t2表中同步数据的原理示意图;图5为本申请实施例中向tl表中同步数据的原理示意图;图6为本申请实施例一中数据同步方法的流程图;图7为本申请实施例二中数据同步方法的流程图;图8为本申请实施例中向当前目标数据表中同步数据的流程图;图9为本申请实施例中oracle数据库的数据存储格式示意图;图10为本申请实施例中采用多进程并行同步数据的流程图;图11为本申请实施例中数据同步装置的结构示意图;图12为本申请实施例中多进程同步数据的装置的结构示意图。具体实施例方式本申请实施例提供的数据同步方法,其原理如图2所示。对同一数据业务,预先建立与一张存储有待同步数据的源数据表对应的两张目标数据表,图2中所示的目标数据表1和目标数据表2。也就是说每一张源数据表对应的目标数据表有两张,两张目标数据表交替使用。使用目标数据表中数据的应用服务器(Application)通过预先建立的上层视图(View)访问上层视图指向的那一张目标数据表。其中,上层视图的作用相当于一个指针,使得服务器可以通过它访问数据表。例如图2中,当上层视图指向目标数据表1时,应用服务器可以通过上层视图访问目标数据表1中的数据,同时,由于目标数据表2此时处于空闲状态,当有待同步数据时,则可以向目标数据表2中同步数据;当上层视图指向目标数据表2时,应用服务器可以通过上层视图访问目标数据表2中的数据,同时,由于目标数据表1此时处于空闲状态,当有待同步数据时,则可以向目标数据表1中同步数据。从而使同步数据和应用服务器访问数据的进程不必在同一张表中进行,可以互不干扰。本申请实施例提供的从源数据表向目标数据表中进行数据同步的方法,具体过程如图3所示,执行步骤如下步骤Sl从两张目标数据表中确定出一张当前目标数据表。可以通过分别计算两张目标数据表中数据的记录数,确定记录数为零的那一张目标数据表为当前目标数据表。例如若目标数据表1中数据的记录数为零,则说明目标数据表1为空表,确定目标数据表1为当前目标数据表;若目标数据表2中数据的记录数为零,则说明目标数据表2为空表,确定目标数据表2为当前目标数据表。特别的,当两张目标数据表中数据的记录数均为零时,可以根据计算顺序确定一张或任选其中一张作为当前目标数据表;当两张目标数据表中数据的记录数均不为零时,显示异常,并结束数据同步流程。步骤S2从源数据表向确定出的当前目标数据表中同步数据。特别的,从源数据表向确定出的当前目标数据表中同步数据时,可以直接向确定出的当前目标数据表(即原有的空的目标数据表)中同步数据;也可以将原来的空的目标数据表删除(drop)掉,并重新建立一个新的目标数据表,作为当前目标数据表,向新建立的当前目标数据表中同步数据。对于新建目标数据表的情况,可以采用如下命令实现createtablet2asselect^fromschema2.tablename@lnk_dw;该命令的操作实际上是一个复合操作,一个DDL(创建t2表),一个数据同步,但ORACLE会把它看成是一个DDL操作,DDL操作基本上不占用撤销/回滚表空间。另外可以采用并行提示,具体命令如下createtablet2asselect/*+parallel(dw_t2,4)*/*fromschema2.tablenameilnk_dwdw_t2;上面命令中的/^+parallel(dw_t2,4)*/表示对dw_t2表的扫描,采用四个进程来处理。采用此种方案,可以进一步减少撤销/回滚表空间被占满的可能,以及可以在一定程度上提高同步数据的效率,但整个DDL操作的时间过长,整个同步数据的容错能力比较差,且同步数据的进度无法监控。从源数据表向当前目标数据表中同步数据的具体过程在后边再进行详细阐述。步骤S3:同步数据成功后,应用服务器转向访问当前目标数据表。具体包括每次同步数据成功后,都需要更新上层视图,使上层视图指向新导入数据的目标数据表,从而保证应用服务器能够顺利访问同步到目标数据表中的数据。特别的,在同步数据成功后,会执行清空两张目标数据表中未同步数据的另一张目标数据表的操作。上述源数据表和目标数据表可以都是后台数据库仓库中的数据表,也可以都是前台ORACLE数据库中的数据表,还可以一个是后台数据库仓库中的数据表,另一个是前台ORACLE数据库中的数据表。下面以从后台数据仓库的数据表(源数据表)向前台ORACLE数据库中的数据表(目标数据表)同步数据为例进行详细阐述。在前台数据库中,对同一数据业务建立两张数据表,即后台数据仓库中的一张数据表对应前台数据库的两张数据表(t1表和t2表),两张数据表格交替使用,即源数据表为后台数据仓库中的一张数据表,目标数据表为前台ORACLE数据库中预先建立的与其对应的两张数据表。其原理如图4和图5所示。其中,图4为应用服务器(Application)访问tl表,从后台数据仓库向空的t2表中同步数据的情况;图5为应用服务器访问t2表,从后台数据仓库向空的tl表中同步数据的情况。图4和图5中数据仓库DW表示后台的数据仓库,tl表和t2表为前台数据库中对应同一数据业务的两张数据表,后台数据仓库DW中的一张数据表对应前台数据库中的两张数据表(tl表和t2表),即可以从后台数据仓库的一个表中向tl表或t2表中同步数据。应用服务器通过上层视图(view)指向tl表或t2表,来确定访问tl表或t2表中的数据。即上层视图指向tl表,则应用服务器通过上层视图访问tl表中的数据;上层视图指向t2表,则应用服务器通过上层视图访问t2表中的数据。从数据仓库DW同步数据到前台ORACLE数据库中,通常都有一定的时间间隔(或说设定的数据同步周期),例如一天同步一次。当要同步数据时,检测tl表和t2表;如果tl表为空,则向tl表中同步数据;如果t2表为空,则向t2表中同步数据。图4所示是应用服务器访问tl表,t2表为空,向t2表中同步数据的情况,待同步数据完成,重新定义上层视图view,使上层视图指向t2表,然后执行如下命令truncatetabletl;将tl表中的数据清空。特别的,由于truncate(删节)方式和删除(delete)方式的原理不同,使用truncate方式比delete方式快很多,大大减少了删除旧数据的时间。当向t2表中同步数据并重定义上层视图后,应用服务器访问t2表中的数据,当下次再需要同步数据时,则将向空的tl表中同步数据。图5所示即为应用服务器访问t2表,tl表为空,向tl表中同步数据的情况。待同步数据完成,重新定义上层视图view,使上层视图指向tl表,然后执行如下命令truncatetablet2;将t2表中的数据清空。当从源数据表(后台数据仓库的数据表)向目标数据表(前台ORACLE数据库中的数据表)中同步数据时,具体可以包括下列实施例一和实施例二所给出的两种具体执行过程。实施例一本申请实施例一所提供的从源数据表(后台数据仓库的数据表)向目标数据表(前台ORACLE数据库中的数据表)中进行同步数据的方法,以tl表作为目标数据表1,t2表作为目标数据表2为例进行说明,其流程如图6所示,执行步骤如下如下步骤SIOi计算ti表中的记录数m。特别的,在处理时,可以使用rownum<2的方式计算tl表的记录数m,具体命令Selectcount(*)intoNlfromtlwhererownum<2。其中,rownum表示数据记录,所说的rownum<2的方式具体为只要检测到数据表中有至少一条记录时即认为数据表中有数据,而不必继续检测更多的数据记录。步骤S102:判断tl表中是否有数据。具体为通过判断计算出的记录数m是否等于零来判断tl表中是否有数据。若是,则执行步骤S103;若否,则执行步骤S111。步骤S103从后台数据仓库向tl表中同步数据。从后台数据仓库中的数据表向tl表中同步数据的具体过程参见后续步骤的详细特别的,进行数据同步时,可以采用现有的数据同步方式,也可以根据ORACLE描述。EXTENT的原理,采用分段提交的方式。步骤S104:判断是否同步成功。若是则执行步骤S105;若否,则执行步骤S108。步骤S105:创建新的上层视图。创建新的上层视图,指向tl表,使得应用服务器能够通过上层视图访问tl表中的步骤S106对t2表执行清空操作。特别的,对t2表执行清空操作时,优选使用上述的truncatetable命令快速删除数据。旧数据,清空t2表。然后执行步骤S107。步骤S107结束数据同步流程。步骤S108显示异常,并结束数据同步流程。步骤Slll计算t2表中的记录数N2。在处理时,也可以使用上述rownum<2的方式计算t2表的记录数N2,具体命令行为Selectcount(^)intoN2fromt2whererownum<2。步骤S112:判断t2表中是否有数据。具体为通过判断计算出的记录数N2是否等于零来判断t2表中是否有数据。若是,则执行步骤S113;若否,说明两张表中均有数据,出现异常,则执行步骤S108。步骤S113从后台数据仓库向t2表中同步数据。从后台数据仓库中的数据表向t2表中同步数据的具体过程参见后续步骤的详细描述。特别的,进行数据同步时,可以采用现有的数据同步方式,也可以根据ORACLEEXTENT的原理,采用分段提交的方式。步骤Sl14判断是否同步成功。若是则执行步骤Sl15;若否,则执行步骤S108。步骤S115创建新的上层视图。如果同步数据成功,则重新创建上层视图,指向刚同步数据的表,即t2表,使得应用服务器能够通过上层视图访问t2表中的数据。步骤Sl16对tl表执行清空操作。特别的,对tl表执行清空操作时,优选使用上述的truncatetable命令快速删除旧数据,清空tl表。然后执行步骤S107。实施例二本申请实施例二所提供的当从源数据表(后台数据仓库的数据表)向目标数据表(前台ORACLE数据库中的数据表)中同步数据的过程,仍以tl表作为目标数据表l,t2表作为目标数据表2为例进行说明,其流程如图7所示,执行步骤如下步骤S201分别计算tl表中的记录数m和t2表中的记录数N2。在处理时,仍然可以使用上述roWnum<2的方式计算tl表的记录数附和t2表中的记录数N2,具体命令行为Selectcount⑷intoNlfromtlwhererownum<2;Selectcount(*)intoN2fromt2whererownum<2。步骤S202判断tl表和t2表中是否有数据。具体包括判断tl表中的记录数附和t2表中的记录数N2是否等于零。若m=0,N2兴0,则说明tl表中没有数据,t2表中有数据,则执行步骤S203;若附兴0,N2=0,则说明tl表中有数据,t2表中没有数据,则执行步骤S213;若附=0,N2=0,则说明tl表和t2表中都没有数据,则执行步骤S223;若附兴0,N2兴0,则说明tl表和t2表中都有数据,则执行步骤S233。步骤S203从后台数据仓库向tl表中同步数据。从后台数据仓库的数据表向tl表中同步数据的具体过程参见后续步骤的详细描述。特别的,进行数据同步时,可以采用现有的数据同步方式,也可以根据ORACLEEXTENT的原理,采用分段提交的方式。步骤S204判断是否同步成功。若是则执行步骤S205;若否,则执行步骤S233。步骤S205创建新的上层视图。常见新的上层视图,指向tl表,使得应用服务器能够通过上层视图访问tl表中的数据。步骤S206对t2表执行清空操作。特别的,对t2表执行清空操作时,优选使用上述的truncatetable命令快速删除旧数据,清空t2表。然后执行步骤S207。步骤S207结束数据同步流程。步骤S213从后台数据仓库向t2表中同步数据。从后台数据仓库的数据表向t2表中同步数据的具体过程参见后续步骤的详细描述。特别的,进行数据同步时,可以采用现有的数据同步方式,也可以根据ORACLEEXTENT的原理,采用分段提交的方式。步骤S214判断是否同步成功。若是则执行步骤S215;若否,则执行步骤S233。步骤S215创建新的上层视图。如果同步数据成功,则重新创建上层视图,指向刚同步数据的表,即t2表,使得应用服务器能够通过上层视图访问t2表中的数据。步骤S216对tl表执行清空操作。特别的,对tl表执行清空操作时,优选使用上述的truncatetable命令快速删除旧数据,清空tl表。然后执行步骤S207。步骤S223从tl表和t2表中选择一个数据表。若选择了tl表,则执行步骤S203-207;若选择了t2表,则执行步骤S213-216及步骤207。步骤S233显示异常,并结束数据同步流程。上述实施例一中对两张目标数据表中的记录数逐一判断,当判断得到第一目标数据表中记录数为零时,则不需再判断另一个目标数据表中的记录数。实施例二中则是同时计算出两个目标数据表中的记录数,并选择其中记录数为零的一个目标数据表。下面具体描述步骤S2中从源数据表向确定出的当前目标数据表中同步数据的过程,如图8所示,包括步骤S31确定源数据表中待同步数据所占用的若干存储区域。特别的,可以从ORACLE数据库的数据字典视图里查询到待同步数据在源数据表中所占用的存储区域。步骤S32确定出上述存储区域中的待同步数据的存储地址信息。其中,存储地址信息至少包括每一个存储区域中存储的待同步数据的地址范围。根据ORACLE数据库的数据字典视图得到的待同步数据在源数据表中所占用的存储区域,可以计算出每一个存储区域内的待同步数据存储的最小地址(e_min_r0Wid)和最大地址(e_max_rowid)。特别的,可以将计算出的每个区域内存储数据的地址范围保存到一张中间表里,例如一个tmp_roWid表。该中间表的表结构可以设计如下createtabletmp_rowid(idnumber;R0WID_MINVARCHAR2(100),R0WID_MAXVARCHAR2(100));当需要时通过查询该中间表,即可获取源数据表中每个存储区域存储的待同步数据的地址信息。步骤S33根据存储地址信息,分别将各存储区域中的待同步数据同步到当前目标数据表中。具体可以选择下列两种方式之一(1)根据存储地址信息,由一个数据同步进程依次同步每一个存储区域中的数据到当前目标数据表中。(2)将确定出的存储区域分为N组,并启动对应的N个数据同步进程,根据存储地址信息,由每个数据同步进程依次同步一组中的各个存储区域的数据到当前目标数据表中。若同步某一个存储区域中数据失败时,重新启动同步该存储区域内数据的过程,当重新启动的次数超过设定阈值时,结束同步该存储区域内数据的过程。实施例一中步骤S103、步骤S113和实施例二中步骤S203、步骤S213执行从后台数据仓库数据表向tl或t2表中同步数据时,就是采用上述数据同步过程。上述方式(1)是常用的方式,而方式(2)则是基于本申请实施例数据同步方法的特点和ORACLE数据库中数据存储的特点才能实现的。具体分析如下首先,本申请实施例的上述数据同步方法用一个上层视图将应用服务器与具体的数据隔离开来,当从数据仓库同步数据到前台ORACLE数据库的数据表时,与业务系统正在使用的表,即应用服务器正在调用的数据所在的表没有任何关系。因此,使得从数据仓库同步数据到前台ORACLE数据库的数据表和上层应用服务器调用数据的操作可以不在同一张数据表中进行,因此可以互不干扰。其次,ORACLE数据库中数据存储具有如下特点ORACLE数据库的数据表由很多个存储区域(EXTENTS)组成,每个EXTENT由多个大小一定的连续的块(block)组成,数据存放在各个块里。EXTENT是数据表空间的最小单位,EXTENT与EXTENT之间在物理位置上不一定是连续的。但在每个EXTENT内部,由一串连续的block组成,每个EXTENT内部各个块的物理地址是连续的。其存储格式如图9所示。在数据同步进程与应用服务器访问进程互不干扰的情况下,结合ORACLE数据库中数据存储的上述特点,从而使得同步数据可以分段提交,即可以采用方式(来实现数据同步过程,这样既可以不影响业务系统所访问的数据的准确性,又能提高数据同步的速度。下面以一个具体实例,详细说明采用方式O)实现数据同步的过程,可以采用分段提交的方式从源数据表(例如后台数据仓库)向当前目标数据表(例如前台的tl表或t2表)中同步数据,如图10所示,包括下列步骤步骤S331查询待同步数据所占用的存储区域。查询源数据表所在的后台数据仓库的数据字典视图,可以获取到待同步数据在源数据表中所占用的存储区域。步骤S332确定出每一个存储区域中的待同步数据在源数据表中的地址范围。可以通过查询存储的中间表,例如tmp_roWid表,确定每一个存储区域中的待同步数据在源数据表中的地址范围。步骤S333将存储有待同步数据的所有存储区域划分为N组。接下来,我们可以对tmp_r0Wid表中的数据进行分组处理,分组的方式很多,比如可以按照标识ID(Identify)取模,分成N组。步骤S334:启动N个数据同步进程分别同步划分出的N组存储区域中的数据到当前目标数据表中。由N个数据同步进程并行处理,其中,每个进程对应一个组的存储区域,执行将对应组内的存储区域中的数据同步到目标数据表中过程,各组互不干扰,同时进行。在同步各存储区域内数据时采用并行处理,提高了数据同步的效率。步骤S335a逐一处理本组(例如第一组)中的各个存储区域中待同步数据。具体为处理本组中的一个存储区域的待同步数据,当得到同步成功的确认消息后,启动同步本组中下一个存储区域中的数据的过程。步骤S336a判断是否同步成功;判断当前存储区域的待同步数据是否被同步成功。若是,执行对应的步骤S338a;若否,则需要回滚以便重新执行同步该存储区域内数据的过程,执行对应的步骤S337a。步骤S337a判断回滚次数是否超过设定阈值。具体为可以预先设置回滚(重试)次数的阈值,并统计重试的次数,当重试次数大于设定的阀值,则不再重试,并立即退出循环,表示同步该存储区域的数据失败。在数据同步过程中,采用重试策略,提高了数据同步的容错能力。若否,则返回重新执行步骤S335a,重新同步该存储区域内的数据到目标数据表中;若是,则执行步骤S339a。步骤S338a提交同步过来的数据。若当前存储区域的数据同步成功,则向目标数据表提交同步过来的数据。步骤S339a判断是否全部完成,即判断是否处理完本组内的所有存储区域。若是,则说明已同步完该组所有存储区域的对应数据,执行步骤S340;若否则说明没有同步完该组所有存储区域的对应数据,返回步骤S335a,继续同步该组中的下一个存储区域的数据。在并行处理的过程中,可以为每组设置一个计数器变量V_d0ne_nUm,用来对应表示每组已经同步完数据的存储区域的个数,这样可以很方便的计算出每个进程同步数据的速度,以及计算出数据同步的总的速度。基于上述统计还可以方便的实现对数据同步的效率进行监控。步骤S335b_S339b为逐一同步第二组中的各个存储区域中的数据的过程;......;步骤S335x-S339x为逐一同步第N组中的各个存储区域中的数据的过程;步骤S335b-S339b,......、步骤S335x-S339x的处理过程与步骤S335a-S339a对应相同,此处不再赘述。步骤S340结束数据同步流程。上述从源数据表向目标数据表中同步数据过程,如果采用了多个进程并行处理,一次处理多个存储区域(EXTENT)的数据,在提交的时候就可以同时提交这多个存储区域的数据给目标数据表,减少了提交的次数,从而提高了同步数据的提交(commit)速度和效率。其中,具体可以同时处理多少个存储区域根据实际情况调整。上述图8、图9、图10所给出的从源数据表向当前目标数据表中同步数据的过程,可以单独用于其他需要从源数据表向目标数据表中同步数据的过程中,而不限于本申请实施例所给出的数据同步过程中。根据本申请实施例的上述数据同步方法,可以构建一种数据同步装置,如图11所示,包括数据表建立模块10、确定模块20、数据同步模块30和访问更新模块40。数据表建立模块10,用于预先建立与一张存储有待同步数据的源数据表对应的两张目标数据表。确定模块20,用于从两张目标数据表中确定出一张当前目标数据表。较佳的,确定模块20进一步可以包括计算单元201和确定单元202。计算单元201,用于分别计算两张目标数据表中数据的记录数。确定单元202,用于确定计算单元201计算出的记录数为零的一张目标数据表为当前目标数据表。确定单元202,还用于当计算单元201计算出的两张目标数据表中数据的记录数均不为零时,显示异常,并结束数据同步流程。数据同步模块30,用于从源数据表向确定模块20确定出的当前目标数据表中同步数据。较佳的,数据同步模块进一步可以包括存储区域确定单元301、地址信息确定单元302和数据同步单元303。存储区域确定单元301,用于根确定源数据表中待同步数据所占用的若干存储区域。地址信息确定单元302,用于确定出每一个存储区域中待同步数据的存储地址信肩、ο数据同步单元303,用于根据地址信息确定单元302确定出的存储地址信息,分别将存储区域中的待同步数据同步到当前目标数据表中。较佳的,数据同步单元303进一步可以包括第一数据同步子单元3031和第二数据同步子单元3032。第一数据同步子单元3031,用于根据地址信息确定单元302确定出的存储地址信息,由一个数据同步进程依次同步每一个存储区域中的数据到当前目标数据表中。第二数据同步子单元3032,用于将存储区域分为N组,启动对应的N个数据同步进程;并根据地址信息确定单元302确定出的存储地址信息,由每个数据同步进程依次同步对应组中的各个存储区域的数据到当前目标数据表中。数据同步单元303,还包括重启子单元3033,用于当同步某一个存储区域的数据失败时,重新启动同步该存储区域中的数据的过程;以及当重新启动的次数超过设定阈值时,结束同步该存储区域中的数据的过程。访问更新模块40,用于当数据同步模块30同步数据成功后,应用服务器转向确定模块20确定出的当前目标数据表。访问更新模块40,具体用于预先建立上层视图,使应用服务器能通过该上层视图访问其指向的一张目标数据表;以及当同步数据完成后,更新所述上层视图,使其指向所述当前目标数据表。上述数据同步装置,还包括数据表清空模块50,用于当数据同步模块30同步数据成功后,清空两张目标数据表中未同步数据的另一张目标数据表。上述数据同步装置中的数据同步模块30可以设置为一个单独的、用于同步数据的装置,并且可以单独用于任何数据转移的过程中。根据上述图8和图10所示的从源数据表向目标数据表同步数据的流程,可以构建一种多进程同步数据的装置,如图12所示,包括分组单元121和数据同步单元122。分组单元121,用于将源数据表中待同步数据所占用的存储区域划分为若干组。数据同步单元122,用于并行启动对应的若干个数据同步进程,由每个数据同步进程同步对应组中的各个1存储区域中的待同步数据到当前目标数据表中。较佳的,数据同步单元122进一步可以包括控制执行子单元1221和判断子单元1222。控制执行子单元1221,用于控制每个数据同步进程处理对应组中的一个存储区域中的待同步数据;以及当判断子单元判断出未处理完对应组内的所有存储区域时,启动处理对应组中下一个存储区域中的待同步数据的过程。判断子单元1222,用于同步一个存储区域中的待同步数据并成功提交后,判断是否处理完对应组内的所有存储区域。数据同步单元122,还包括重启子单元1223,用于当同步某一个存储区域中的待同步数据失败时,重新启动同步该存储区域中的待同步数据的过程;以及当重新启动的次数超过设定阈值时,结束同步该存储区域中的待同步数据的过程。上述同步数据的装置,还包括存储区域确定单元123,用于确定源数据表中待同步数据所占用的若干存储区域。地址信息确定单元124,用于确定出每一个存储区域中待同步数据的存储地址信肩、ο上述数据同步装置在具体实现中可以有多种方式,例如可以通过软件的实现方式,也可以通过软件与硬件结合的方式实现。本申请实施例提供的数据同步方法及装置,通过预先建立与一张存储有待同步数据的源数据表对应的两张目标数据表,应用服务器通过预先建立的上层视图访问所述上层视图指向的一张目标数据表,通过上层视图,应用层不需要去关心数据具体来自哪张表,减少了应用实现的复杂度。当从所述源数据表向所述目标数据表中同步数据时,首先确定出两张目标数据表中空的一张为当前目标数据表;然后从源数据表向当前目标数据表中同步数据;同步数据成功后,更新上层视图,使其指向当前目标数据表。上述方法中,两张目标数据表交替使用,应用服务器访问的数据表和同步数据程序访问的数据表互不干涉,避免了将大量数据转移到撤销/回滚表空间中,有效的避免了撤销/回滚空间被占满后造成排队和拥堵现象,又提高了数据同步速度和效率。在同步数据的过程中,在充分结合ORACLE表的空间分配及存储原理的基础上,并利用ORACLE数据表的内在存储机制,同步各存储区域中的数据到目标数据表,在数据迁移时针对每个存储区域执行,实现按存储区域并行同步数据,分段提交,在数据同步的过程中,减少对前台ORACLE数据库撤销/回滚表空间的长时间占用,使撤销/回滚表空间的总体使用率大大减少,大大降低占满撤销/回滚表空间的可能,确保生产数据库的安全。在同步数据时,也可以对存储区域进行分组,采用并行方式迁移数据来进一步提高迁移数据的效率。当同步某一个存储区域中的数据失败时,采用回滚机制,大大提高了系统的容错能力,同时通过回滚次数控制机制,避免了无限次回滚等死循环的发生。且由于针对每个存储区域进行操作,且不与应用服务器所访问的表空间发生干扰,所使用的当前数据表的初始状态为空没有干扰数据,因此,在数据同步中断时,可以继续同步未同步过来的部分数据,使得同步数据的断点续传成为可能。同时,由于设置了计数器变量统计已经同步完数据的存储区域的个数,从而可以实现对数据同步的进度、速度和效率进行监控。以上所述,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本申请揭露的技术范围内,可轻易想到的变化、替换或应用到其他类似的装置,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求书的保护范围为准。权利要求1.一种同步数据的方法,其特征在于,包括将源数据表中待同步数据所占用的存储区域划分为若干组;并行启动对应的若干个数据同步进程,由每个数据同步进程同步对应组中的各个所述存储区域中的待同步数据到当前目标数据表中。2.如权利要求1所述的方法,其特征在于,所述由每个数据同步进程同步对应组中的各个所述存储区域中的数据是依次进行的,具体包括每个数据同步进程处理所述对应组中的一个存储区域中的待同步数据;同步所述一个存储区域中的待同步数据并成功提交后,判断是否处理完所述对应组内的所有存储区域;当未处理完所述对应组内的所有存储区域时,启动处理所述对应组中下一个存储区域中的待同步数据的过程。3.如权利要求2所述的方法,其特征在于,还包括当同步某一个所述存储区域中的待同步数据失败时,重新启动同步该存储区域中的待同步数据的过程;当重新启动的次数超过设定阈值时,结束同步该存储区域内的待同步数据的过程。4.如权利要求1-3任一所述的方法,其特征在于,将源数据表中待同步数据所占用的存储区域划分为若干组之前,还包括确定源数据表中待同步数据所占用的若干存储区域;以及确定出每一个所述存储区域中待同步数据的存储地址信息。5.如权利要求4所述的方法,其特征在于,所述确定出每一个所述存储区域中待同步数据的存储地址信息,具体包括确定出每一个所述存储区域中待同步数据的存储的最小地址和最大地址;将确定出的包含最小地址和最大地址的地址范围存储到一张中间表中。6.一种同步数据的装置,其特征在于,包括分组单元,用于将源数据表中待同步数据所占用的存储区域划分为若干组;数据同步单元,用于并行启动对应的若干个数据同步进程,由每个数据同步进程同步对应组中的各个所述存储区域中的待同步数据到当前目标数据表中。7.如权利要求6所述的装置,其特征在于,所述数据同步单元,具体包括控制执行子单元和判断子单元;控制执行子单元,用于控制每个数据同步进程处理所述对应组中的一个存储区域中的待同步数据;以及当判断子单元判断出未处理完所述对应组内的所有存储区域时,启动处理所述对应组中下一个存储区域中的待同步数据的过程;判断子单元,用于同步所述一个存储区域中的待同步数据并成功提交后,判断是否处理完所述对应组内的所有存储区域。8.如权利要求7所述的装置,其特征在于,所述数据同步单元,还包括重启子单元,用于当同步某一个所述存储区域中的待同步数据失败时,重新启动同步该存储区域中的待同步数据的过程;以及当重新启动的次数超过设定阈值时,结束同步该存储区域中的待同步数据的过程。9.如权利要求6-8任一所述的装置,其特征在于,还包括存储区域确定单元,用于确定源数据表中待同步数据所占用的若干存储区域;地址信息确定单元,用于确定出每一个所述存储区域中待同步数据的存储地址信息。全文摘要本发明公开了一种数据同步方法及装置,该方法包括将源数据表中待同步数据所占用的存储区域划分为若干组;并行启动对应的若干个数据同步进程,由每个数据同步进程同步对应组中的各个所述存储区域中的待同步数据到当前目标数据表中。上述方法能够同时处理并提交多个存储区域的数据,减少了提交的次数,从而提高了同步数据的提交速度和效率。文档编号G06F17/30GK102081665SQ20111002403公开日2011年6月1日申请日期2008年12月10日优先权日2008年12月10日发明者张依娜,张清,汪海,赵林申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1