数据复制方法、数据恢复方法及装置的制作方法

文档序号:6368764阅读:305来源:国知局
专利名称:数据复制方法、数据恢复方法及装置的制作方法
技术领域
本发明实施例涉及计算机技术,尤其涉及一种数据复制方法、数据恢复方法及装置。
背景技术
复制是将一组数据从一个数据源拷贝到多个数据源的技术。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证源数据库和目标数据库的一致。数据库复制可以在同一服务器的不同数据库之间进行,也可 以在由LAN、WAN或Internet连接的不同的服务器之间进行。在事务复制中,当源数据库发生变化时,这种变化就会立即传递给目标数据库。并在较短时间内完成,因此,事务复制是一种接近实时地从源到目标分发数据的方法。由于某种原因事务复制的频率较高。所以必须保证在订阅者与出版者之间要有可靠的网络连接。但是在数据事务比较多或者网络拥塞的情况下,SQL Server的事务复制仍会存在一定的滞后,如果在源数据库的数据发生了变更,且变更的事务由于复制延迟还没有被源主机同步给目标主机的目标数据库的情况下,如果源主机出现了故障或源主机的部分操作失败,会导致目标数据库与源数据库不一致。

发明内容
本发明实施例提供一种数据复制方法、数据恢复方法及装置,用以解决现有的数据复制过程中,目标数据库与源数据库有可能不一致的缺陷。一方面,本发明实施例提供一种数据复制方法,包括源主机在源数据库为一业务启动事务后,在所述源数据库上执行业务的操作后,在源数据库的事务记录表中添加所述业务的标识;所述源主机在目标数据库上为添加日志操作启动一事务后,在所述目标数据库的事务日志表中为所述业务添加日志,并将所述业务的状态标识为待处理,向所述目标数据库提交为所述添加日志操作启动的事务;所述源主机向所述源数据库提交为所述业务启动的事务;所述源主机在所述事务日志表中将所述业务的状态设置为已成功后,将所述业务的业务数据和所述业务的标识复制到目标数据库;其中,将所述业务的标识复制到所述目标数据库的事务记录表中,所述业务的业务数据为所述业务被执行后得到的业务数据。一方面,本发明实施例还提供一种数据复制装置,包括源数据库,用于存储事务记录表和业务的业务数据,所述业务的业务数据为所述业务被执行后得到的业务数据;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务;业务执行模块,用于在源数据库为一业务启动事务后,在所述源数据库上执行所述业务的操作,在所述源数据库的事务记录表中添加所述业务的标识;日志添加模块,用于在目标数据库上为添加日志操作启动一事务后,在所述目标数据库的事务日志表中为所述业务添加日志,并将所述业务的状态标识为待处理,向所述目标数据库提交为所述添加日志操作启动的事务;业务提交模块,用于向所述源数据库提交为所述业务启动的事务;复制模块,用于若向所述源数据库提交所述事务成功,在所述事务日志表中将所述业务的状态设置为已成功后,将所述业务的业务数据和所述业务的标识复制到目标数据库;其中,将所述业务的标识复制到所述目标数据库的事务记录表中,所述业务的业务数据为所述业务被执行后得到的业务数据。本发明实施例提供的数据复制方法和装置,源主机在向源数据库提交为业务启动的事务之前,先在源数据库的事务记录表中为该业务添加标识,再向目标数据库提交在目标数据库的事务日志表中为该业务添加日志并待处理状态的事务。在源主机向源数据库提 交为业务启动的事务后,该业务的日志和状态已被保存到目标数据库的事务日志表中,同时该业务的业务数据和标识也被保存到源数据库中,由于该业务已被成功执行,将该业务在事务日志表中的状态标识为成功。如果源主机后续没有将该业务的业务数据成功复制到目标数据库,例如源主机出现故障导致的复制失败,目标主机根据目标数据库的事务日志表中业务的待处理状态可确定目标数据库没有该业务的业务数据,再根据源数据库的事务记录表中该业务的标识可确定该业务的业务数据已保存在在源数据库中。为使目标数据库与源数据库保持一致,目标主机根据目标数据库的事务日志表中该业务的日志执行该业务,在目标数据库中生成该业务的业务数据。源主机在向源数据库提交为业务启动的事务之后,源主机在目标数据库的事务日志表中将该业务的状态标识为已成功,再将该业务的业务数据复制到目标数据库同时在目标数据库的事务记录表中添加该业务的标识。目标主机根据目标数据库的事务日志表中该业务的已成功状态,可确定该业务已被成功提交到源数据库,如果目标数据库的事务记录表中没有该业务的标识,则目标数据库中也没有该业务的业务数据,为使目标数据库与源数据库保持一致,目标主机根据目标数据库的事务曰 志表中该业务的日志执行该业务,在目标数据库中生成该业务的业务数据。因此,目标主机根据目标数据库的事务日志表和事务记录表以及源数据库的事务记录表,可确定源数据库与目标数据库是否保持一致,如果不一致,目标主机可根据目标数据库的事务日志表为该业务添加的日志执行该业务,在目标数据库中生成该业务的业务数据,从而使源数据库与目标数据库保持一致。另一方面,本发明实施例提供一种数据恢复方法,包括目标主机检测到源主机故障后,在目标数据库的事务日志表查找状态为已成功的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功;所述目标主机在所述目标数据库的事务记录表中查询状态为已成功的业务的标识;所述目标数据库的事务记录表用于记录业务数据已被源主机成功复制到目标数据库的业务的标识; 若没有查找到状态为已成功的业务的标识,执行所述业务在所述事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。另一方面,本发明实施例提供一种数据恢复装置,包括
目标数据库,用于存储事务日志表和事务记录表以及从源主机复制的业务数据;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功,所述目标数据库的事务记录表用于记录业务数据已被源主机成功复制到目标数据库的业务的标识;检测模块,用于检测源主机是否出现故障;查询模块,用于在所述检测模块检测到所述源主机出现故障后,在目标数据库的事务日志表查找状态标识为已成功的业务;所述查询模块,还用于在所述目标数据库的事务记录表中查询状态标识为已成功的业务的标识;业务执行模块,用于若没有查找到状态为已成功的业务的标识,执行所述业务在所述事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。本发明实施例提供的数据恢复方法和装置,检测到源主机出现故障后,目标主机 根据目标数据库的事务日志表中业务的状态,来确定该业务已被源主机成功提交到源数据库,或者确定当前不能明确源主机对该业务的执行状态。并进一步通过目标数据库的事务记录表中记录的业务的标识,来判断已被源主机成功提交到源数据库的业务,其业务数据是否已成功复制到目标数据库,以确定是否需要根据事务日志表中的日志在本机执行这些业务,从而使目标数据库也保存源数据库中没有复制到目标数据库的业务数据。又一方面,本发明实施例提供一种数据恢复方法,包括目标主机检测到源主机从故障恢复后,在目标数据库的事务日志表查找状态为待处理的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功;所述目标主机在源数据库的事务记录表查询状态为待处理的业务的标识;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务;若查找到状态为待处理的业务的标识,所述目标主机执行所述业务在所述目标数据库的事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。又一方面,本发明实施例提供一种数据恢复装置,包括目标数据库,用于存储事务日志表和事务记录表以及从源主机复制的业务数据;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功;检测模块,用于主机检测到源主机是否从故障恢复;查询模块,用于所述检测模块检测到源主机从故障恢复后,在目标数据库的事务日志表查找状态为待处理的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功;所述查询模块,用于源数据库的事务记录表查询状态为待处理的业务的标识;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务;业务执行模块,用于若查找到状态为待处理的业务的标识,所述目标主机执行所述业务在所述目标数据库的事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。本发明实施例提供的数据恢复方法和装置,检测到源主机从故障恢复后,目标主机访问目标数据库的事务记录表,通过其中记录的业务标识,判断状态为待处理的业务是否成功提交到源数据库,以确定是否需要根据事务日志表中的日志在本机执行该业务。因此,在源主机出现故障后,目标主机执行事务日志表中状态为成功且标识没有记录在本机数据库的事务记录表的事务。在检测到源主机恢复故障后,目标主机执行该事务日志表中状态为待处理且标识记录在源数据库的事务记录表的事务。从而,目标数据库也保存源数据库中没有复制到目标数据库的业务数据。使目标数据库中数据与源数据库中数据保持一致。本发明通过目标数据库的事务日志表和事务记录表以及源数据库的事务记录表,避免了源数据库与目标数据库不一致的现象。


图I为本发明实施例提供的一种数据复制方法流程图;图2A为本发明实施例提供的一种数据恢复方法流程图;图2B为本发明实施例提供的另一种数据恢复方法流程图; 图3A为本发明实施例提供的另一种数据复制方法流程图;图3B为本发明实施例提供的又一种数据复制方法流程图;图3C为本发明实施例提供的再一种数据复制方法流程图;图4为本发明实施例提供的另一种数据恢复方法流程图;图5为本发明实施例提供的又一种数据恢复方法流程图;图6为本发明实施例提供的再一种数据恢复方法流程图;图7A为本发明实施例提供的一种数据复制装置结构示意图;图7B为本发明实施例提供的另一种数据复制装置结构示意图;图8为本发明实施例提供的一种数据恢复装置结构示意图;图9A为本发明实施例提供的另一种数据恢复装置结构示意图;图9B为本发明实施例提供的又一种数据恢复装置结构示意图。
具体实施例方式本发明实施例中,源主机为一台服务器,例如对外提供服务的发布服务器,源数据库为源主机的本机数据库,例如,在源主机上安装SQL SERVER软件之后所形成的数据库;目标主机也为一台服务器,例如订购发布服务器所提供的服务的订阅服务器,目标数据库为目标主机的本地数据库,例如在目标主机上安装SQL SERVER软件之后所形成的数据库。本发明实施例在源数据库中添加了事务记录表,在目标数据库中增加了事务记录表和事务曰志表。图I为本发明实施例提供的一种数据复制方法流程图。本实施例主要说明源主机在执行业务的过程中,如何将在本机数据库中产生的业务数据复制到目标主机的本机数据库。如图I所示,本实施例包括步骤10 :源主机在源数据库为一业务启动事务后,在所述源数据库上执行所述业务的操作。本发明实施例将每个业务设置为一个事务,由于事务的原子性,只有向数据库成功提交该业务后,数据库中该业务的业务数据才能生效;否则,需要回滚该业务,从而删除数据库中该业务在执行过程中产生的中间数据。源主机在源数据库中为一业务启动事务后,执行当前业务的操作。如果源数据库和目标数据库是SQL SERVER,则本发明实施例中事务特指SQL SERVER事务。步骤11 :源主机在源数据库的事务记录表中添加该业务的标识。本发明实施例在源数据库和目标数据库中分别增加了一个事务记录表,源主机有可能同时执行多个业务,源主机执行业务操作后,在源数据库的事务记录表中添加该业务的标识,在未向源数据库成功提交为该业务启动的事务之前,事务记录表记录源主机已执行的业务的标识。如果源主机向源数据库提交为该业务启动的事务失败,需要回滚该业务,源数据库中该业务的中间数据会被删除,源数据库的事务记录表中该业务的标识也会被删除。如果源主机向源数据库成功提交了为该业务启动的事务,则该业务的业务数据保存在源数据库中,即在源数据库中生效,该业务的标识成功记录在源数据库的事务记录表中。其中,业务的业务数据为所述业务被执行后得到的业务数据。需要说明的是,步骤11也可以在步骤12之后,也就是说,源主机只要在步骤10与步骤13之间执行步骤11即可。步骤12 :源主机在目标数据库上为添加日志操作启动一事务后,在目标数据库的事务日志表中为该业务添加日志,并将该业务的状态标识为待处理,向目标数据库提交为所述添加日志操作启动的事务。本发明实施例将源主机将业务作为事务进行处理,向源数据库提交为业务启动的事务后,该业务的业务数据和标识才会保存到源数据库中,同样,源主机也将在目标数据库的事务日志表中为该业务添加日志并将状态标识为待处理作为事务进行处理。步骤13 :源主机向源数据库提交为该业务启动的事务。本发明实施例在源主机向源数据库提交为业务启动的事务之前,在目标数据库中启动为添加日志操作启动一事务。为添加日志操作启动事务后,在目标数据库的事务日志表中为该业务添加日志,由于该业务还没有向源数据库成功提交,因此,在目标数据库的事务日志表中将该业务的状态标识为待处理,之后,源主机向该目标数据库提交为添加日志操作启动的事务。源主机向目标数据库成功提交为添加日志操作启动的事务后,该业务的日志和标识在目标数据库的事务日志表中生效。业务的日志和标识中只要有一项没有添加成功,事务就会回滚,在目标数据库的事务日志表中有关该业务的记录会被删除。源主机向目标数据库成功提交为添加日志操作启动的事务后,向源数据库提交为该业务启动的事务,使该业务的业务数据在源数据库上生效。优选地,如果源主机向源数据库提交为业务启动的事务失败,则源主机在目标数据库的事务日志表中删除该业务的日志和状态。进一步,若所述目标主机检测到所述源主机在目标数据库的事务日志表中删除为所述业务添加的日志和状态失败,在所述事务日志表中查找所述业务的状态;若所述业务的状态为待处理,所述目标主机在所述事务日志表中删除所述业务的日志和状态。如果源主机在向源数据库提交为业务启动的事务之后,为该业务在目标数据库中添加日志,当添加日志过程中源主机出现故障致使该业务的日志在目标数据库中添加失败的情况下,会导致目标主机无法获知该业务已被源主机成功提交到源数据库。从而,在源主 机从故障恢复后,目标主机不会从源数据库读取该业务的业务数据,致使目标数据库与源数据库不一致。因此,应该在源主机向源数据库提交为业务启动的事务之前,在目标数据库中为已执行过的业务添加日志和状态。步骤14 :源主机在目标数据库的事务日志表中将该业务的状态设置为已成功。源主机向源数据库成功提交为该业务启动的事务之前,该业务的业务数据还未保存到源数据库中,该业务在目标数据库的事务日志表中的状态为待处理。源主机向源数据库成功提交为该业务启动的事务后,源数 据库已保存有该业务的业务数据,因此,将目标数据库的事务日志表中将该业务的状态标识为已成功,以表明源数据库已保存有该业务的业务数据。步骤15 :源主机将该业务的业务数据和该业务的标识复制到目标数据库;将该业务的标识复制到目标数据库的事务记录表中。将目标数据库的事务日志表中该业务的状态标识为已成功后,源主机将该业务的业务数据和该业务的标识复制到目标数据库,其中,将该业务的标识复制到目标数据库的事务记录表中。如果业务的标识记录在目标数据库的事务记录表中,目标主机可确定源主机已将该业务的业务数据成功复制到目标数据库;否则,目标主机可确定源主机没有将该业务的业务数据成功复制到目标数据库,即目标数据库中没有该业务的业务数据。优选地,为节省目标数据库的空间,在源主机在所述源主机将所述业务的业务数据和所述业务的标识成功复制到目标数据库之后,所述目标主机在所述事务日志表中删除所述业务的日志和状态,在所述目标数据库的事务记录表中删除所述业务的标识。目标主机根据目标数据库的事务日志表中业务的状态确定业务是否被成功提交到源数据库,如果该业务已成功提交到源数据库,但在目标数据库的事务记录表中没有查询到该业务的标识,确定目标数据库中没有该业务的业务数据,为使目标数据库与源数据库保持一致,目标主机根据目标数据库的事务日志表中该业务的日志执行该业务,在目标数据库中生成该业务的业务数据;如果该业务提交到源数据库,目标主机如果从源数据库的事务记录表中查询到该业务的标识,确定源数据库中已保存有该业务的业务数据,为使目标数据库与源数据库保持一致,目标主机根据目标数据库的事务日志表中该业务的日志执行该业务,在目标数据库中生成该业务的业务数据;如果该业务没有提交到源数据库,目标主机如果从源数据库的事务记录表中没有查询到该业务的标识,确定源数据库中没有该业务的业务数据,则在目标数据库的事务日志表中删除该业务的日志和状态。本发明实施例,源主机在向源数据库提交为业务启动的事务之前,先在源数据库的事务记录表中为该业务添加标识,再向目标数据库提交在目标数据库的事务日志表中为该业务添加日志并待处理状态的事务。在源主机向源数据库提交为业务启动的事务后,该业务的日志和状态被保存到目标数据库的事务日志表中,同时该业务的业务数据和标识也被保存到源数据库中,由于该业务已被成功执行,将该业务在事务日志表中的状态标识为成功。如果源主机后续没有将该业务的业务数据成功复制到目标数据库,例如源主机出现故障导致的复制失败,目标主机根据目标数据库的事务日志表中业务的待处理状态可确定目标数据库没有该业务的业务数据,根据源数据库的事务记录表中该业务的标识可确定该业务的业务数据已保存在在源数据库中。为使目标数据库与源数据库保持一致,目标主机根据目标数据库的事务日志表中该业务的日志执行该业务,在目标数据库中生成该业务的业务数据。源主机在向源数据库提交为业务启动的事务之后,源主机在目标数据库的事务日志表中将该业务的状态标识为已成功,再将该业务的业务数据复制到目标数据库同时在目标数据库的事务记录表中添加该业务的标识。目标主机根据目标数据库的事务日志表中该业务的已成功状态,可确定该业务已被成功提交到源数据库,如果目标数据库的事务记录表中没有该业务的标识,则目标数据库中也没有该业务的业务数据,为使目标数据库与源数据库保持一致,目标主机根据目标数据库的事务日志表中该业务的日志执行该业务,在目标数据库中生成该业务的业务数据。因此,目标主机根据目标数据库的事务日志表和事务记录表以及源数据库的事务记录表,可确定源数据库与目标数据库是否保持一致,如果不一致,目标主机可根据目标数据库的事务日志表为该业务添加的日志执行该业务,在目标数据库中生成该业务的业务数据,从而使源数据库与目标数据库保持一致。本发明通过目标数据库的事务日志表和事务记录表以及源数据库的事务记录表,避免了源数据库与目标数据库不一致的现象。由于关键业务的业务数据在复制过程中不容许丢失,对于关键业务可采用本发明提供的数据复制方法。因此,本发明实施例尤其适用于复制关键业务的业务数据。图2A和图2B实施例主要说明目标主机检测到源主机出现故障后,如何使目标数 据库与源数据库中数据保持一致。图2A为本发明实施例提供的一种数据恢复方法流程图。如图2A所示,本实施例包括步骤21A:目标主机检测到源主机故障后,在目标数据库的事务日志表查找状态为已成功的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功。步骤22A :所述目标主机在所述目标数据库的事务记录表中查询状态为已成功的业务的标识;所述目标数据库的事务记录表用于记录业务数据已被源主机成功复制到目标数据库的业务的标识。目标主机检测到源主机故障后,遍历目标数据库中的事务日志表中每个业务。若业务的状态为已成功,在目标数据库的事务记录表中查找该业务的标识,目标主机检测到源主机出现故障后,如果目标数据库的事务日志表中业务的状态为已成功,则确定该业务的业务数据已在源数据库中生效,步骤23A :若没有查找到状态为已成功的业务的标识,执行所述业务在所述事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。若没有查找到状态为已成功的业务的标识,目标主机根据目标数据库的事务日志表中该事务的日志,执行该业务,以在目标数据库中产生该业务的业务数据。其中,在目标数据库的事务日志表中,业务的状态为待处理,表明该业务已被源主机执行过,但为该业务启动的事务未提交到源数据库,即该业务的业务数据未在源数据库中生效;若业务的状态为已成功,表明为该业务启动的事务已被源主机成功提交到源数据库,即该业务的业务数据已在源数据库中生效。如果在目标数库的事务记录表中查找到状态为已成功的业务的标识,可确定该业务的业务数据已被成功复制到目标数据库,对于该业务目标数据库与源数据库是一致的;如果在目标数据库的事务记录表中没有查询到已成功的业务的标识,可确定该业务的业务数据还没有被源主机复制到目标数据库,为使目标数据库与源数据库保持一致,目标主机根据目标数据库的事务日志表中访业务的标识执行该业务,以在目标数据库中生成该业务的业务数据。目标主机检测到源主机出现故障后,如果目标数据库的事务日志表中业务的状态为待处理,目标主机不能确定该业务的业务数据是否已在源数据库中生效,只有在源主机从故障恢复后,通过源数据库的事务记录表来判断该业务的业务数据是否已在源数据库中生效,具体见图2B实施例提供的方法。本实施例提供的数据恢复方法,检测到源主机出现故障后,目标主机根据目标数据库的事务日志表中业务的状态,来确定该业务已被源主机成功提交到源数据库,或者确定当前不能明确源主机对该业务的执行状态。并进一步通过目标数据库的事务记录表中记录的业务的标识,来判断已被源主机成功提交到源数据库的业务,其业务数据是否已成功复制到目标数据库,以确定是否需要根据事务日志表中的日志在本机执行这些业务,从而使目标数据库也保存源数据库中没有复制到目标数据库的业务数据。图2B为本发明实施例提供的另一种数据恢复方法流程图。如图2B所示,本实施 例包括步骤21B 目标主机检测到源主机从故障恢复后,在目标数据库的事务日志表查找状态为待处理的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功。步骤22B :所述目标主机在源数据库的事务记录表查询状态为待处理的业务的标识;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务,以使所述目标数据库保存所述业务的业务数据。目标主机检测到源主机故障恢复后,遍历目标数据库的事务记录表中每个业务。若业务的状态为待处理,在源数据库的事务记录表中查找该业务的标识。如果目标数据库的事务日志表中业务的状态为待处理,目标主机不能确定该业务的业务数据是否已在源数据库中生效,需要结合源数据库的事务记录表进行判断。步骤23B :若查找到状态为待处理的业务的标识,所述目标主机执行所述业务在所述目标数据库的事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。若在源数据库的事务记录表查找到状态为待处理的业务的标识,目标主机根据目标数据库的事务日志表中该业务的日志,执行该业务,以在以在目标数据库中生成该业务的业务数据,从而使目标数据库与源数据库保持一致。进一步,在目标主机检测到源主机从故障恢复之后,还包括目标主机删除目标数据库的事务日志表中状态为待处理且标识没有记录在源数据库的事务记录表的业务的日志和状态。若目标主机在源数据库的事务记录表中没有查找状态为待处理的业务的标识,确定源主机在出现故障之前没有将为该业务启动的事务成功提交到源数据库,即源数据库中没有该业务的业务数据。对于该业务来说,目标数据库与源数据库是一致的,因而,目标数据库的事务日志表中不需要保留访业务的日志和状态,在目标数据库的事务日志表中删除该业务的日志和状态。本实施例提供的数据恢复方法,检测到源主机从故障恢复后,目标主机访问目标数据库的事务记录表,通过其中记录的业务标识,判断状态为待处理的业务是否成功提交到源数据库,以确定是否需要根据事务日志表中的日志在本机执行该业务。因此,在源主机出现故障后,目标主机执行事务日志表中状态为成功且标识没有记录在本机数据库的事务记录表的事务。在检测到源主机恢复故障后,目标主机执行该事务日志表中状态为待处理且标识记录在源数据库的事务记录表的事务。从而,目标数据库也保存源数据库中没有复制到目标数据库的业务数据。使目标数据库中数据与源数据库中数据保持一致。图3A为本发明实施例提供的另一种数据复制方法流程图。如图3A所示,源主机安装有源应用程序和源数据库,目标主机上安装有目标应用程序和目标数据库,以下方法说明源主机上的源应用程序如何将一个业务的业务数据复制到目标主机上的目标数据库。如图3A所示,本实施例提供的方法包括步骤Ia :源应用程序在源数据库上启动事务。步骤2a :源应用程序执行业务操作。
步骤3a :源应用程序在源数据库的事务记录表中添加该业务的标识。步骤4a :源应用程序在目标数据库上启动事务。步骤5a:源应用程序在目标数据库的事务日志表中为该业务添加日志,并将该业务的状态标识为待处理。步骤6a :源应用程序向目标数据库提交事务。步骤7a :源应用程序向源数据库提交事务;步骤8a:源应用程序在目标数据库的事务日志表中将该业务的状态设置为已成功。步骤9a :源应用程序将该业务的业务数据和该业务的标识复制到目标数据库;其中,将该业务的标识复制到该目标数据库的事务记录表中。步骤IOa 目标应用程序在目标数据库的事务日志表中查询业务的状态。步骤Ila :目标应用程序获知业务的状态为成功。步骤12a :目标应用程序在目标数据库的事务记录表查找状态为已成功的业务的标识。步骤13a 目标应用程序获取到状态为已成功的业务的标识。步骤14a:目标应用程序从目标数据库的事务日志表中删除该业务的日志,从目标数据库的事务记录表删除该业务的标识。目标应用程序从目标数据库的事务日志表查询到状态为成功的业务,且确定目标数据库的事务记录表记录有该业务的标识,则可确定该业务的业务数据已从源数据库成功复制到目标数据库。为节省空间,可从目标数据库的事务记录表和事务日志表删除不需要再保存的该业务的相关信息。源应用程序执行Ia 5a任意步骤出现失败,则视为本次业务执行失败,同时回滚源应用程序在源数据库启动的事务和在目标应用程序上启动的事务。如果步骤7a即源应用程序向源数据库提交的事务失败,源应用程序的处理方法如图3B所示。如图3B所示,在步骤7a之后还包括步骤BI :源应用程序获知向源数据库提交的事务失败。步骤B2 :源应用程序在目标数据库的事务日志表中删除该业务的日志和状态。由于源应用程序向源数据库提交事务失败,因此源数据库中没有保存该业务的业务数据,目标数据库中不需要保存该业务的日志和状态。如果步骤B2失败,目标应用程序的处理方法如图3C所示。如图3C所示,在图3B基础上还包括步骤Cl 目标应用程序检测到源应用程序在目标数据库的事务日志表中删除该业务的日志和状态失败时,在目标数据库的事务日志表中查询该业务的状态。步骤C2 目标应用程序获知该业务的状态为待处理。步骤C3 目标应用程序在源数据库的事务记录表查询该业务的标识。步骤C4 目标应用程序没有查询到该业务的标识。步骤C5 :目标应用程序在目标数据库的事务日志表中删除该业务的日志。目标应用程序在源数据库的事务记录表中没有查询到该业务的标识,确定该业务没有被源应用程序成功提交到源数据库,源数据库没有该业务的业务数据,在目标数据库的事务日志表中删除该业务的日志。
图4为本发明实施例提供的另一种数据恢复方法流程图。本实施例主要说明在图3B中步骤B2失败后,如果目标主机检测到源主机出现故障,目标主机对于该业务的处理过程。如图4所示,本实施例包括步骤Ia :源应用程序在源数据库上启动事务。步骤2a :源应用程序执行业务操作。步骤3a :源应用程序在源数据库的事务记录表中添加该业务的标识。步骤4a :源应用程序在目标数据库上启动事务。步骤5a :源应用程序在目标数据库的事务日志表中为该业务添加日志,并将该业务的状态标识为待处理。步骤6a :源应用程序向该目标数据库提交事务;步骤BI :源应用程序获知向目标数据库提交事务失败。步骤B2 :源应用程序在目标数据库的事务日志表中删除该业务的日志和状态。步骤41 :目标应用程序检测到源应用程序在目标数据库的事务日志表中删除该业务的日志和状态失败后,检测到源主机出现故障。目标应用程序对源主机进行存活心跳检测,确定源主机出现故障。步骤42 目标应用程序在目标数据库中删除从源主机复制数据的配置信息。目标应用程序删除从源应用程序复制数据的配置信息,以避免源应用程序从故障恢复后,将重新执行该业务后产生的业务数据再次复制到目标数据库。步骤43 :目标应用程序在事务日志表中查询该业务的状态。步骤44 目标应用程序获知该业务的状态为待处理。步骤45 目标应用程序锁定与该业务相关的业务对象。目标应用程序不允许对锁定业务对象对该项业务进行操作。步骤46 目标应用程序切换为执行业务的活动应用程序。步骤47 ;目标应用程序对源主机进行存活心跳检测,确定源主机从故障恢复。步骤48 ;目标应用程序在目标数据库的事务日志表中查询该业务的状态。步骤49 目标应用程序获知该业务的状态为待处理。步骤410 目标应用程序在源数据库的事务记录表查询该业务的标识。步骤411 目标应用程序获知该业务的标识不存在。步骤412 目标应用程序在目标数据库的事务记录表删除该业务的标识,并在事务日志表删除该业务的日志。
步骤413 目标应用程序解锁与该业务相关的业务对象。步骤414:目标应用程序重新在目标数据库中配置从源主机复制数据的配置信肩、O目标应用程序重新配置从源应用程序复制数据的配置信息,以便接收源应用程序复制的数据,即目标应用程序与源应用程序互换角色。如果源应用程序向目标数据库成功提交业务后,即图3A中步骤6a成功后,目标应用程序检测到源主机出现故障,此时目标应用程序的处理结果与图4中步骤41至步骤413的处理结果相同。图5为本发明实施例提供的又一种数据恢复方法流程图。本实施例主要说明在步骤7a后即源应用程序向源数据库提交业务后,如果源主机出现故障,目标应用程序对于该业务的处理过程。如图5所示,本实施例包括 步骤Ia至步骤7a参见图3A对应实施例说明,在此不再赘述。步骤51 目标应用程序检测到源主机出现故障。步骤52 ;目标应用程序在目标数据库中删除从源主机复制数据的配置信息。步骤53 :目标应用程序在目标数据库的事务日志表中查询该业务的状态。步骤54 目标应用程序获知该业务的状态为待处理。由于目标数据库的事务日志表中该业务的状态为待处理,根据源应用程序向目标数据库复制数据的流程可知,在目标数据库的事务记录表中没有该业务的标识,因此,该业 务的业务数据还没有复制到目标数据库。步骤55 目标应用程序锁定与该业务相关的业务对象。步骤56 目标应用程序切换为执行业务的活动应用程序。步骤57 ;目标应用程序检测到源主机从故障恢复。步骤58 ;目标应用程序在目标数据库的事务日志表中查询该业务的状态。步骤59 目标应用程序获知该业务的状态为待处理。步骤510 目标应用程序在目标数据库的事务记录表查询该业务的标识。步骤511 目标应用程序获知该业务的标识存在。目标应用程序在源数据库的事务记录表查询到该业务的标识,确定源应用程序已成功向源数据库提交该业务,源数据库中保存有该业务的业务数据。由于目标数据库的事务日志表中该业务的状态为待处理,根据源应用程序向目标数据库复制数据的流程可知,在目标数据库的事务记录表中没有该业务的标识,因此,该业务的业务数据还没有复制到目标数据库。为使目标数据库的数据与目标数据库的数据保持一致,目标应用程序需要根据该业务的日志在目标数据库上执行该业务,从而使目标数据库中也保存该业务的业务数据。步骤512 :目标应用程序在目标数据库上启动事务。步骤513 :目标应用程序根据目标数据库的事务日志表中该业务的日志,执行该业务。步骤514 目标应用程序向目标数据库提交事务。进一步,为节省空间,在步骤513之后,目标应用程序还可从目标数据库的事务记录表和事务日志表删除不需要再保存的该业务的相关信息,例如,业务的标识、日志和状态坐寸O步骤515 目标应用程序解锁与该业务相关的业务对象。步骤516 :目标应用程序重新在目标数据库中配置从源主机复制数据的配置信
肩、O在步骤7a后即源应用程序向本机数据库提交业务后,如果源主机出现故障,目标应用程序检测到源应用程序从故障恢复时,需要根据该业务的日志在目标数据库上执行该业务,从而使目标数据库中也保存该业务的业务数据。图6为本发明实施例提供的再一种数据恢复方法流程图。本实施例主要说明在步骤8a后即在源应用程序在目标数据库的事务日志表中将业务的状态设置为已成功后,如果源主机出现故障,目标应用程序对于该业务的处理过程。如图6所示,本实施例包括 步骤Ia至步骤8a参见图3A对应实施例中说明。步骤61 :目标应用程序检测到源主机出现故障。步骤62 ;目标应用程序删除从源主机复制数据的配置信息。步骤63 :目标应用程序在事务日志表中查询该业务的状态。步骤64 :目标应用程序获知该业务的状态为成功。步骤65 目标应用程序在目标数据库的事务记录表查询该业务的标识。步骤66 目标应用程序获知目标数据库的事务记录表中不存在该业务的标识。目标数据库的事务记录表不存在该业务的标识,但在事务日志表中该业务的状态为成功,则目标应用程序确定源应用程序已将该业务成功到源数据库,即源数据库中包括该业务的业务数据,而在目标数据库中没有该业务的业务数据。为使目标数据库的数据与目标数据库的数据保持一致,目标应用程序需要根据该业务的日志在本机数据库上执行该业务,从而使目标数据库中也保存该业务的业务数据。步骤67 :目标应用程序在目标数据库上启动事务。步骤68 :目标应用程序根据目标数据库的事务日志表中该业务的日志,执行该业务。步骤69 目标应用程序向目标数据库提交事务。进一步,为节省空间,在步骤69之后,目标应用程序还可从目标数据库的事务记录表和事务日志表删除不需要再保存的该业务的相关信息。步骤610 目标应用程序切换为执行业务的活动应用程序。步骤611 ;目标应用程序检测到源主机从故障恢复。步骤612 :目标应用程序重新在目标数据库中配置从源主机复制数据的配置信
肩、O在步骤8a后即该源应用程序在目标数据库的事务日志表中将业务的状态设置为已成功后,如果源主机出现故障,目标应用程序根据该业务的日志在本机数据库上执行该业务,从而使目标数据库中也保存该业务的业务数据。本发明实施例对其它异常情况的处理如果在源主机在执行业务过程中目标主机出现故障,源主机访问目标数据库,即停止访问目标数据库的事务日志表和事务记录表。目标主机在恢复后主动从主机获取所有数据。如果双机同时出现故障,源主机从故障恢复后,立即断开复制,根据源数据库的事务日志表和事务记录表,参照以上实施例给出的各种异常情况进行处理。图7A为本发明实施例提供的一种数据复制装置结构示意图。如图7A所示,本实施例提供的装置包括源数据库71、业务执行模块72和日志添加模块73、业务提交模块74和复制模块75。
源数据库71,用于存储事务记录表和业务的业务数据,所述业务的业务数据为所述业务被执行后得到的业务数据;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务。业务执行模块72,用于在源数据库为一业务启动事务后,在所述源数据库上执行所述业务的操作,在所述源数据库的事务记录表中添加所述业务的标识。日志添加模块73,用于在目标数据库上为添加日志操作启动一事务后,在所述目标数据库的事务日志表中为所述业务添加日志,并将所述业务的状态标识为待处理,向所述目标数据库提交为所述添加日志操作启动的事务;业务提交模块74,用于向所述源数据库提交为所述业务启动的事务。复制模块75,用于若向所述源数据库提交所述事务成功,在所述事务日志表中将所述业务的状态设置为已成功后,将所述业务的业务数据和所述业务的标识复制到目标数据库;其中,将所述业务的标识复制到所述目标数据库的事务记录表中,所述业务的业务数据为所述业务被执行后得到的业务数据。如图7B所示,在图7A的基础上还包括删除模块76。删除模块76,用于在向所述源数据库提交为所述业务启动的事务之后,若向所述源数据库提交所述事务失败,在目标数据库的事务日志表中删除为所述业务添加的日志和状态。图8为本发明实施例提供的一种数据恢复装置结构示意图。如图8所示,本实施例提供的装置包括目标数据库81、检测模块82、查询模块83和业务执行模块84。目标数据库81,用于存储事务日志表和事务记录表以及从源主机复制的业务数据;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功,所述目标数据库的事务记录表用于记录业务数据已被源主机成功复制到目标数据库的业务的标识。检测模块82,用于检测源主机是否出现故障。查询模块83,用于在所述检测模块检测到所述源主机出现故障后,在目标数据库的事务日志表查找状态标识为已成功的业务。所述查询模块83,还用于在所述目标数据库的事务记录表中查询状态标识为已成功的业务的标识。业务执行模块84,用于若查询模块83没有查找到状态为已成功的业务的标识,执行所述业务在所述事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。本发明实施例提供的数据恢复装置,检测到源主机出现故障后,根据目标数据库的事务日志表中业务的状态,来确定该业务已被源主机成功提交到源数据库,或者确定当前不能明确源主机对该业务的执行状态。并进一步通过目标数据库的事务记录表中记录的业务的标识,来判断已被源主机成功提交到源数据库的业务,其业务数据是否已成功复制到目标数据库,以确定是否需要根据事务日志表中的日志在本机执行这些业务,从而使目标数据库也保存源数据库中没有复制到目标数据库的业务数据。图9A为本发明实施例提供的另一种数据恢复装置结构示意图。如图9所示,本实施例提供的装置包括目标数据库91、检测模块92、查询模块93和业务执行模块94。目标数据库91,用于存储事务日志表和事务记录表以及从源主机复制的业务数据;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功。检测模块92,用于主机检测到源主机是否从故障恢复。查询模块93,用于所述检测模块检测到源主机从故障恢复后,在目标数据库的事务日志表查找状态为待处理的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功。所述查询模块93,用于源数据库的事务记录表查询状态为待处理的业务的标识;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务。业务执行模块94,用于若查找到状态为待处理的业务的标识,执行所述业务在所述目标数据库的事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。如图9B所示,本实施例提供的装置还可包括删除模块95。删除模块95,用于若所述查询模块没有查找到状态为待处理的业务的标识,在所述事务日志表中删除所述业务的日志和状态。本发明实施例提供的数据恢复,检测到源主机从故障恢复后,访问目标数据库的事务记录表,通过其中记录的业务标识,判断状态为待处理的业务是否成功提交到源数据库,以确定是否需要根据事务日志表中的日志在本机执行该业务。因此,在源主机出现故障后,执行事务日志表中状态为成功且标识没有记录在本机数据库的事务记录表的事务。在检测到源主机恢复故障后,执行该事务日志表中状态为待处理且标识记录在源数据库的事务记录表的事务。从而,目标数据库也保存源数据库中没有复制到目标数据库的业务数据。使目标数据库中数据与源数据库中数据保持一致。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范 围。
权利要求
1.ー种数据复制方法,其特征在于,包括 源主机在源数据库为一业务启动事务后,在所述源数据库上执行所述业务的操作,在所述源数据库的事务记录表中添加所述业务的标识; 所述源主机在目标数据库上为添加日志操作启动一事务后,在所述目标数据库的事务日志表中为所述业务添加日志,并将所述业务的状态标识为待处理,向所述目标数据库提交为所述添加日志操作启动的事务; 所述源主机向所述源数据库提交为所述业务启动的事务; 若所述源主机向所述源数据库提交所述事务成功,所述源主机在所述事务日志表中将所述业务的状态设置为已成功后,将所述业务的业务数据和所述业务的标识复制到目标数据库;其中,将所述业务的标识复制到所述目标数据库的事务记录表中,所述业务的业务数据为所述业务被执行后得到的业务数据。
2.根据权利要求I所述方法,其特征在于,在所述源主机向所述源数据库提交为所述业务启动的事务之后,还包括 若所述源主机向所述源数据库提交所述事务失败,所述源主机在目标数据库的事务日志表中删除为所述业务添加的日志和状态。
3.根据权利要求I或2所述方法,其特征在于,还包括 若所述目标主机检测到所述源主机在目标数据库的事务日志表中删除为所述业务添加的日志和状态失败,在所述事务日志表中查找所述业务的状态; 若所述业务的状态为待处理,所述目标主机在所述事务日志表中删除所述业务的日志和状态。
4.根据权利要求I或2所述方法,其特征在于,在所述源主机将所述业务的业务数据和所述业务的标识复制到目标数据库之后,还包括 所述目标主机在所述事务日志表中删除所述业务的日志和状态,在所述目标数据库的事务记录表中删除所述业务的标识。
5.ー种数据恢复方法,其特征在于,包括 目标主机检测到源主机故障后,在目标数据库的事务日志表查找状态为已成功的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功; 所述目标主机在所述目标数据库的事务记录表中查询状态为已成功的业务的标识;所述目标数据库的事务记录表用于记录业务数据已被源主机成功复制到目标数据库的业务的标识; 若没有查找到状态为已成功的业务的标识,执行所述业务在所述事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。
6.ー种数据恢复方法,其特征在于,包括 目标主机检测到源主机从故障恢复后,在目标数据库的事务日志表查找状态为待处理的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功; 所述目标主机在源数据库的事务记录表查询状态为待处理的业务的标识;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务; 若查找到状态为待处理的业务的标识,所述目标主机执行所述业务在所述目标数据库的事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。
7.根据权利要求6所述方法,其特征在于,还包括 若没有查找到状态为待处理的业务的标识,所述目标主机在所述事务日志表中删除所述业务的日志和状态。
8.一种数据复制装置,其特征在于,包括 源数据库,用于存储事务记录表和业务的业务数据,所述业务的业务数据为所述业务被执行后得到的业务数据;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务; 业务执行模块,用于在源数据库为一业务启动事务后,在所述源数据库上执行所述业务的操作,在所述源数据库的事务记录表中添加所述业务的标识; 日志添加模块,用于在目标数据库上为添加日志操作启动一事务后,在所述目标数据库的事务日志表中为所述业务添加日志,并将所述业务的状态标识为待处理,向所述目标数据库提交为所述添加日志操作启动的事务; 业务提交模块,用于向所述源数据库提交为所述业务启动的事务; 复制模块,用于若向所述源数据库提交所述事务成功,在所述事务日志表中将所述业务的状态设置为已成功后,将所述业务的业务数据和所述业务的标识复制到目标数据库;其中,将所述业务的标识复制到所述目标数据库的事务记录表中,所述业务的业务数据为所述业务被执行后得到的业务数据。
9.根据权利要求8所述装置,其特征在于,还包括 删除模块,用于在向所述源数据库提交为所述业务启动的事务之后,若向所述源数据库提交所述事务失败,在目标数据库的事务日志表中删除为所述业务添加的日志和状态。
10.一种数据恢复装置,其特征在于,包括 目标数据库,用于存储事务日志表和事务记录表以及从源主机复制的业务数据;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功,所述目标数据库的事务记录表用于记录业务数据已被源主机成功复制到目标数据库的业务的标识; 检测模块,用于检测源主机是否出现故障; 查询模块,用于在所述检测模块检测到所述源主机出现故障后,在目标数据库的事务日志表查找状态标识为已成功的业务; 所述查询模块,还用于在所述目标数据库的事务记录表中查询状态标识为已成功的业务的标识; 业务执行模块,用于若没有查找到状态为已成功的业务的标识,执行所述业务在所述事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。
11.一种数据恢复装置,其特征在于,包括 目标数据库,用于存储事务日志表和事务记录表以及从源主机复制的业务数据;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功; 检测模块,用于主机检测到源主机是否从故障恢复; 查询模块,用于所述检测模块检测到源主机从故障恢复后,在目标数据库的事务日志表查找状态为待处理的业务;所述事务日志表中包括业务的状态和日志,所述业务的状态包括待处理或已成功;所述查询模块,用于源数据库的事务记录表查询状态为待处理的业务的标识;所述源数据库的事务记录表用于记录业务数据已被源主机成功提交到源数据库的业务; 业务执行模块,用于若查找到状态为待处理的业务的标识,执行所述业务在所述目标数据库的事务日志表中的日志,以使所述目标数据库保存所述业务的业务数据。
12.根据权利要求11所述装置,其特征在于,还包括 删除模块,用于若所述查询模块没有查找到状态为待处理的业务的标识,在所述事务日志表中删除所述业务的日志和状态。
全文摘要
本发明提供一种数据复制方法、数据恢复方法及装置。该数据复制方法包括源主机在源数据库启动事务后,在源数据库上执行业务的操作,在源数据库的事务记录表中添加业务的标识;在目标数据库上启动事务后,在目标数据库的事务日志表中为业务添加日志,并将业务的状态标识为待处理,向目标数据库提交事务;向源数据库提交事务;在事务日志表中将业务的状态设置为已成功后,将业务的业务数据和业务的标识复制到目标数据库。本发明通过目标数据库的事务日志表和事务记录表以及源数据库的事务记录表,避免了源数据库与目标数据库不一致的现象。
文档编号G06F17/30GK102708166SQ201210127660
公开日2012年10月3日 申请日期2012年4月26日 优先权日2012年4月26日
发明者杨鑫伟, 谌衡化 申请人:北京星网锐捷网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1