專利名稱:數(shù)據(jù)復(fù)制方法、數(shù)據(jù)恢復(fù)方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明實施例涉及計算機(jī)技術(shù),尤其涉及一種數(shù)據(jù)復(fù)制方法、數(shù)據(jù)恢復(fù)方法及裝置。
背景技術(shù):
復(fù)制是將一組數(shù)據(jù)從一個數(shù)據(jù)源拷貝到多個數(shù)據(jù)源的技術(shù)。使用復(fù)制技術(shù),用戶可以將一份數(shù)據(jù)發(fā)布到多臺服務(wù)器上,從而使不同的服務(wù)器用戶都可以在權(quán)限的許可的范圍內(nèi)共享這份數(shù)據(jù)。復(fù)制技術(shù)可以確保分布在不同地點的數(shù)據(jù)自動同步更新,從而保證源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫的一致。數(shù)據(jù)庫復(fù)制可以在同一服務(wù)器的不同數(shù)據(jù)庫之間進(jìn)行,也可 以在由LAN、WAN或Internet連接的不同的服務(wù)器之間進(jìn)行。在事務(wù)復(fù)制中,當(dāng)源數(shù)據(jù)庫發(fā)生變化時,這種變化就會立即傳遞給目標(biāo)數(shù)據(jù)庫。并在較短時間內(nèi)完成,因此,事務(wù)復(fù)制是一種接近實時地從源到目標(biāo)分發(fā)數(shù)據(jù)的方法。由于某種原因事務(wù)復(fù)制的頻率較高。所以必須保證在訂閱者與出版者之間要有可靠的網(wǎng)絡(luò)連接。但是在數(shù)據(jù)事務(wù)比較多或者網(wǎng)絡(luò)擁塞的情況下,SQL Server的事務(wù)復(fù)制仍會存在一定的滯后,如果在源數(shù)據(jù)庫的數(shù)據(jù)發(fā)生了變更,且變更的事務(wù)由于復(fù)制延遲還沒有被源主機(jī)同步給目標(biāo)主機(jī)的目標(biāo)數(shù)據(jù)庫的情況下,如果源主機(jī)出現(xiàn)了故障或源主機(jī)的部分操作失敗,會導(dǎo)致目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫不一致。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種數(shù)據(jù)復(fù)制方法、數(shù)據(jù)恢復(fù)方法及裝置,用以解決現(xiàn)有的數(shù)據(jù)復(fù)制過程中,目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫有可能不一致的缺陷。一方面,本發(fā)明實施例提供一種數(shù)據(jù)復(fù)制方法,包括源主機(jī)在源數(shù)據(jù)庫為一業(yè)務(wù)啟動事務(wù)后,在所述源數(shù)據(jù)庫上執(zhí)行業(yè)務(wù)的操作后,在源數(shù)據(jù)庫的事務(wù)記錄表中添加所述業(yè)務(wù)的標(biāo)識;所述源主機(jī)在目標(biāo)數(shù)據(jù)庫上為添加日志操作啟動一事務(wù)后,在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為所述業(yè)務(wù)添加日志,并將所述業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,向所述目標(biāo)數(shù)據(jù)庫提交為所述添加日志操作啟動的事務(wù);所述源主機(jī)向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù);所述源主機(jī)在所述事務(wù)日志表中將所述業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,將所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫;其中,將所述業(yè)務(wù)的標(biāo)識復(fù)制到所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中,所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù)。一方面,本發(fā)明實施例還提供一種數(shù)據(jù)復(fù)制裝置,包括源數(shù)據(jù)庫,用于存儲事務(wù)記錄表和業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù);所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù);業(yè)務(wù)執(zhí)行模塊,用于在源數(shù)據(jù)庫為一業(yè)務(wù)啟動事務(wù)后,在所述源數(shù)據(jù)庫上執(zhí)行所述業(yè)務(wù)的操作,在所述源數(shù)據(jù)庫的事務(wù)記錄表中添加所述業(yè)務(wù)的標(biāo)識;日志添加模塊,用于在目標(biāo)數(shù)據(jù)庫上為添加日志操作啟動一事務(wù)后,在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為所述業(yè)務(wù)添加日志,并將所述業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,向所述目標(biāo)數(shù)據(jù)庫提交為所述添加日志操作啟動的事務(wù);業(yè)務(wù)提交模塊,用于向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù);復(fù)制模塊,用于若向所述源數(shù)據(jù)庫提交所述事務(wù)成功,在所述事務(wù)日志表中將所述業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,將所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫;其中,將所述業(yè)務(wù)的標(biāo)識復(fù)制到所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中,所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù)。本發(fā)明實施例提供的數(shù)據(jù)復(fù)制方法和裝置,源主機(jī)在向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)之前,先在源數(shù)據(jù)庫的事務(wù)記錄表中為該業(yè)務(wù)添加標(biāo)識,再向目標(biāo)數(shù)據(jù)庫提交在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為該業(yè)務(wù)添加日志并待處理狀態(tài)的事務(wù)。在源主機(jī)向源數(shù)據(jù)庫提 交為業(yè)務(wù)啟動的事務(wù)后,該業(yè)務(wù)的日志和狀態(tài)已被保存到目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中,同時該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和標(biāo)識也被保存到源數(shù)據(jù)庫中,由于該業(yè)務(wù)已被成功執(zhí)行,將該業(yè)務(wù)在事務(wù)日志表中的狀態(tài)標(biāo)識為成功。如果源主機(jī)后續(xù)沒有將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)成功復(fù)制到目標(biāo)數(shù)據(jù)庫,例如源主機(jī)出現(xiàn)故障導(dǎo)致的復(fù)制失敗,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的待處理狀態(tài)可確定目標(biāo)數(shù)據(jù)庫沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),再根據(jù)源數(shù)據(jù)庫的事務(wù)記錄表中該業(yè)務(wù)的標(biāo)識可確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)已保存在在源數(shù)據(jù)庫中。為使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。源主機(jī)在向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)之后,源主機(jī)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將該業(yè)務(wù)的狀態(tài)標(biāo)識為已成功,再將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫同時在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中添加該業(yè)務(wù)的標(biāo)識。目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的已成功狀態(tài),可確定該業(yè)務(wù)已被成功提交到源數(shù)據(jù)庫,如果目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中沒有該業(yè)務(wù)的標(biāo)識,則目標(biāo)數(shù)據(jù)庫中也沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),為使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)曰 志表中該業(yè)務(wù)的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。因此,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表和事務(wù)記錄表以及源數(shù)據(jù)庫的事務(wù)記錄表,可確定源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫是否保持一致,如果不一致,目標(biāo)主機(jī)可根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表為該業(yè)務(wù)添加的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),從而使源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫保持一致。另一方面,本發(fā)明實施例提供一種數(shù)據(jù)恢復(fù)方法,包括目標(biāo)主機(jī)檢測到源主機(jī)故障后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為已成功的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功;所述目標(biāo)主機(jī)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中查詢狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識;所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)的標(biāo)識; 若沒有查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。另一方面,本發(fā)明實施例提供一種數(shù)據(jù)恢復(fù)裝置,包括
目標(biāo)數(shù)據(jù)庫,用于存儲事務(wù)日志表和事務(wù)記錄表以及從源主機(jī)復(fù)制的業(yè)務(wù)數(shù)據(jù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功,所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)的標(biāo)識;檢測模塊,用于檢測源主機(jī)是否出現(xiàn)故障;查詢模塊,用于在所述檢測模塊檢測到所述源主機(jī)出現(xiàn)故障后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)標(biāo)識為已成功的業(yè)務(wù);所述查詢模塊,還用于在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中查詢狀態(tài)標(biāo)識為已成功的業(yè)務(wù)的標(biāo)識;業(yè)務(wù)執(zhí)行模塊,用于若沒有查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。本發(fā)明實施例提供的數(shù)據(jù)恢復(fù)方法和裝置,檢測到源主機(jī)出現(xiàn)故障后,目標(biāo)主機(jī) 根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的狀態(tài),來確定該業(yè)務(wù)已被源主機(jī)成功提交到源數(shù)據(jù)庫,或者確定當(dāng)前不能明確源主機(jī)對該業(yè)務(wù)的執(zhí)行狀態(tài)。并進(jìn)一步通過目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中記錄的業(yè)務(wù)的標(biāo)識,來判斷已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù),其業(yè)務(wù)數(shù)據(jù)是否已成功復(fù)制到目標(biāo)數(shù)據(jù)庫,以確定是否需要根據(jù)事務(wù)日志表中的日志在本機(jī)執(zhí)行這些業(yè)務(wù),從而使目標(biāo)數(shù)據(jù)庫也保存源數(shù)據(jù)庫中沒有復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)。又一方面,本發(fā)明實施例提供一種數(shù)據(jù)恢復(fù)方法,包括目標(biāo)主機(jī)檢測到源主機(jī)從故障恢復(fù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為待處理的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功;所述目標(biāo)主機(jī)在源數(shù)據(jù)庫的事務(wù)記錄表查詢狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識;所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù);若查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,所述目標(biāo)主機(jī)執(zhí)行所述業(yè)務(wù)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。又一方面,本發(fā)明實施例提供一種數(shù)據(jù)恢復(fù)裝置,包括目標(biāo)數(shù)據(jù)庫,用于存儲事務(wù)日志表和事務(wù)記錄表以及從源主機(jī)復(fù)制的業(yè)務(wù)數(shù)據(jù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功;檢測模塊,用于主機(jī)檢測到源主機(jī)是否從故障恢復(fù);查詢模塊,用于所述檢測模塊檢測到源主機(jī)從故障恢復(fù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為待處理的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功;所述查詢模塊,用于源數(shù)據(jù)庫的事務(wù)記錄表查詢狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識;所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù);業(yè)務(wù)執(zhí)行模塊,用于若查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,所述目標(biāo)主機(jī)執(zhí)行所述業(yè)務(wù)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。本發(fā)明實施例提供的數(shù)據(jù)恢復(fù)方法和裝置,檢測到源主機(jī)從故障恢復(fù)后,目標(biāo)主機(jī)訪問目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表,通過其中記錄的業(yè)務(wù)標(biāo)識,判斷狀態(tài)為待處理的業(yè)務(wù)是否成功提交到源數(shù)據(jù)庫,以確定是否需要根據(jù)事務(wù)日志表中的日志在本機(jī)執(zhí)行該業(yè)務(wù)。因此,在源主機(jī)出現(xiàn)故障后,目標(biāo)主機(jī)執(zhí)行事務(wù)日志表中狀態(tài)為成功且標(biāo)識沒有記錄在本機(jī)數(shù)據(jù)庫的事務(wù)記錄表的事務(wù)。在檢測到源主機(jī)恢復(fù)故障后,目標(biāo)主機(jī)執(zhí)行該事務(wù)日志表中狀態(tài)為待處理且標(biāo)識記錄在源數(shù)據(jù)庫的事務(wù)記錄表的事務(wù)。從而,目標(biāo)數(shù)據(jù)庫也保存源數(shù)據(jù)庫中沒有復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)。使目標(biāo)數(shù)據(jù)庫中數(shù)據(jù)與源數(shù)據(jù)庫中數(shù)據(jù)保持一致。本發(fā)明通過目標(biāo)數(shù)據(jù)庫的事務(wù)日志表和事務(wù)記錄表以及源數(shù)據(jù)庫的事務(wù)記錄表,避免了源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫不一致的現(xiàn)象。
圖I為本發(fā)明實施例提供的一種數(shù)據(jù)復(fù)制方法流程圖;圖2A為本發(fā)明實施例提供的一種數(shù)據(jù)恢復(fù)方法流程圖;圖2B為本發(fā)明實施例提供的另一種數(shù)據(jù)恢復(fù)方法流程圖; 圖3A為本發(fā)明實施例提供的另一種數(shù)據(jù)復(fù)制方法流程圖;圖3B為本發(fā)明實施例提供的又一種數(shù)據(jù)復(fù)制方法流程圖;圖3C為本發(fā)明實施例提供的再一種數(shù)據(jù)復(fù)制方法流程圖;圖4為本發(fā)明實施例提供的另一種數(shù)據(jù)恢復(fù)方法流程圖;圖5為本發(fā)明實施例提供的又一種數(shù)據(jù)恢復(fù)方法流程圖;圖6為本發(fā)明實施例提供的再一種數(shù)據(jù)恢復(fù)方法流程圖;圖7A為本發(fā)明實施例提供的一種數(shù)據(jù)復(fù)制裝置結(jié)構(gòu)示意圖;圖7B為本發(fā)明實施例提供的另一種數(shù)據(jù)復(fù)制裝置結(jié)構(gòu)示意圖;圖8為本發(fā)明實施例提供的一種數(shù)據(jù)恢復(fù)裝置結(jié)構(gòu)示意圖;圖9A為本發(fā)明實施例提供的另一種數(shù)據(jù)恢復(fù)裝置結(jié)構(gòu)示意圖;圖9B為本發(fā)明實施例提供的又一種數(shù)據(jù)恢復(fù)裝置結(jié)構(gòu)示意圖。
具體實施例方式本發(fā)明實施例中,源主機(jī)為一臺服務(wù)器,例如對外提供服務(wù)的發(fā)布服務(wù)器,源數(shù)據(jù)庫為源主機(jī)的本機(jī)數(shù)據(jù)庫,例如,在源主機(jī)上安裝SQL SERVER軟件之后所形成的數(shù)據(jù)庫;目標(biāo)主機(jī)也為一臺服務(wù)器,例如訂購發(fā)布服務(wù)器所提供的服務(wù)的訂閱服務(wù)器,目標(biāo)數(shù)據(jù)庫為目標(biāo)主機(jī)的本地數(shù)據(jù)庫,例如在目標(biāo)主機(jī)上安裝SQL SERVER軟件之后所形成的數(shù)據(jù)庫。本發(fā)明實施例在源數(shù)據(jù)庫中添加了事務(wù)記錄表,在目標(biāo)數(shù)據(jù)庫中增加了事務(wù)記錄表和事務(wù)曰志表。圖I為本發(fā)明實施例提供的一種數(shù)據(jù)復(fù)制方法流程圖。本實施例主要說明源主機(jī)在執(zhí)行業(yè)務(wù)的過程中,如何將在本機(jī)數(shù)據(jù)庫中產(chǎn)生的業(yè)務(wù)數(shù)據(jù)復(fù)制到目標(biāo)主機(jī)的本機(jī)數(shù)據(jù)庫。如圖I所示,本實施例包括步驟10 :源主機(jī)在源數(shù)據(jù)庫為一業(yè)務(wù)啟動事務(wù)后,在所述源數(shù)據(jù)庫上執(zhí)行所述業(yè)務(wù)的操作。本發(fā)明實施例將每個業(yè)務(wù)設(shè)置為一個事務(wù),由于事務(wù)的原子性,只有向數(shù)據(jù)庫成功提交該業(yè)務(wù)后,數(shù)據(jù)庫中該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)才能生效;否則,需要回滾該業(yè)務(wù),從而刪除數(shù)據(jù)庫中該業(yè)務(wù)在執(zhí)行過程中產(chǎn)生的中間數(shù)據(jù)。源主機(jī)在源數(shù)據(jù)庫中為一業(yè)務(wù)啟動事務(wù)后,執(zhí)行當(dāng)前業(yè)務(wù)的操作。如果源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫是SQL SERVER,則本發(fā)明實施例中事務(wù)特指SQL SERVER事務(wù)。步驟11 :源主機(jī)在源數(shù)據(jù)庫的事務(wù)記錄表中添加該業(yè)務(wù)的標(biāo)識。本發(fā)明實施例在源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫中分別增加了一個事務(wù)記錄表,源主機(jī)有可能同時執(zhí)行多個業(yè)務(wù),源主機(jī)執(zhí)行業(yè)務(wù)操作后,在源數(shù)據(jù)庫的事務(wù)記錄表中添加該業(yè)務(wù)的標(biāo)識,在未向源數(shù)據(jù)庫成功提交為該業(yè)務(wù)啟動的事務(wù)之前,事務(wù)記錄表記錄源主機(jī)已執(zhí)行的業(yè)務(wù)的標(biāo)識。如果源主機(jī)向源數(shù)據(jù)庫提交為該業(yè)務(wù)啟動的事務(wù)失敗,需要回滾該業(yè)務(wù),源數(shù)據(jù)庫中該業(yè)務(wù)的中間數(shù)據(jù)會被刪除,源數(shù)據(jù)庫的事務(wù)記錄表中該業(yè)務(wù)的標(biāo)識也會被刪除。如果源主機(jī)向源數(shù)據(jù)庫成功提交了為該業(yè)務(wù)啟動的事務(wù),則該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)保存在源數(shù)據(jù)庫中,即在源數(shù)據(jù)庫中生效,該業(yè)務(wù)的標(biāo)識成功記錄在源數(shù)據(jù)庫的事務(wù)記錄表中。其中,業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù)。需要說明的是,步驟11也可以在步驟12之后,也就是說,源主機(jī)只要在步驟10與步驟13之間執(zhí)行步驟11即可。步驟12 :源主機(jī)在目標(biāo)數(shù)據(jù)庫上為添加日志操作啟動一事務(wù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為該業(yè)務(wù)添加日志,并將該業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,向目標(biāo)數(shù)據(jù)庫提交為所述添加日志操作啟動的事務(wù)。本發(fā)明實施例將源主機(jī)將業(yè)務(wù)作為事務(wù)進(jìn)行處理,向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)后,該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和標(biāo)識才會保存到源數(shù)據(jù)庫中,同樣,源主機(jī)也將在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為該業(yè)務(wù)添加日志并將狀態(tài)標(biāo)識為待處理作為事務(wù)進(jìn)行處理。步驟13 :源主機(jī)向源數(shù)據(jù)庫提交為該業(yè)務(wù)啟動的事務(wù)。本發(fā)明實施例在源主機(jī)向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)之前,在目標(biāo)數(shù)據(jù)庫中啟動為添加日志操作啟動一事務(wù)。為添加日志操作啟動事務(wù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為該業(yè)務(wù)添加日志,由于該業(yè)務(wù)還沒有向源數(shù)據(jù)庫成功提交,因此,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將該業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,之后,源主機(jī)向該目標(biāo)數(shù)據(jù)庫提交為添加日志操作啟動的事務(wù)。源主機(jī)向目標(biāo)數(shù)據(jù)庫成功提交為添加日志操作啟動的事務(wù)后,該業(yè)務(wù)的日志和標(biāo)識在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中生效。業(yè)務(wù)的日志和標(biāo)識中只要有一項沒有添加成功,事務(wù)就會回滾,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中有關(guān)該業(yè)務(wù)的記錄會被刪除。源主機(jī)向目標(biāo)數(shù)據(jù)庫成功提交為添加日志操作啟動的事務(wù)后,向源數(shù)據(jù)庫提交為該業(yè)務(wù)啟動的事務(wù),使該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)在源數(shù)據(jù)庫上生效。優(yōu)選地,如果源主機(jī)向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)失敗,則源主機(jī)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志和狀態(tài)。進(jìn)一步,若所述目標(biāo)主機(jī)檢測到所述源主機(jī)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除為所述業(yè)務(wù)添加的日志和狀態(tài)失敗,在所述事務(wù)日志表中查找所述業(yè)務(wù)的狀態(tài);若所述業(yè)務(wù)的狀態(tài)為待處理,所述目標(biāo)主機(jī)在所述事務(wù)日志表中刪除所述業(yè)務(wù)的日志和狀態(tài)。如果源主機(jī)在向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)之后,為該業(yè)務(wù)在目標(biāo)數(shù)據(jù)庫中添加日志,當(dāng)添加日志過程中源主機(jī)出現(xiàn)故障致使該業(yè)務(wù)的日志在目標(biāo)數(shù)據(jù)庫中添加失敗的情況下,會導(dǎo)致目標(biāo)主機(jī)無法獲知該業(yè)務(wù)已被源主機(jī)成功提交到源數(shù)據(jù)庫。從而,在源主 機(jī)從故障恢復(fù)后,目標(biāo)主機(jī)不會從源數(shù)據(jù)庫讀取該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),致使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫不一致。因此,應(yīng)該在源主機(jī)向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)之前,在目標(biāo)數(shù)據(jù)庫中為已執(zhí)行過的業(yè)務(wù)添加日志和狀態(tài)。步驟14 :源主機(jī)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將該業(yè)務(wù)的狀態(tài)設(shè)置為已成功。源主機(jī)向源數(shù)據(jù)庫成功提交為該業(yè)務(wù)啟動的事務(wù)之前,該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)還未保存到源數(shù)據(jù)庫中,該業(yè)務(wù)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中的狀態(tài)為待處理。源主機(jī)向源數(shù)據(jù)庫成功提交為該業(yè)務(wù)啟動的事務(wù)后,源數(shù) 據(jù)庫已保存有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),因此,將目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將該業(yè)務(wù)的狀態(tài)標(biāo)識為已成功,以表明源數(shù)據(jù)庫已保存有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。步驟15 :源主機(jī)將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和該業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫;將該業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中。將目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的狀態(tài)標(biāo)識為已成功后,源主機(jī)將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和該業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫,其中,將該業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中。如果業(yè)務(wù)的標(biāo)識記錄在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中,目標(biāo)主機(jī)可確定源主機(jī)已將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)成功復(fù)制到目標(biāo)數(shù)據(jù)庫;否則,目標(biāo)主機(jī)可確定源主機(jī)沒有將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)成功復(fù)制到目標(biāo)數(shù)據(jù)庫,即目標(biāo)數(shù)據(jù)庫中沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。優(yōu)選地,為節(jié)省目標(biāo)數(shù)據(jù)庫的空間,在源主機(jī)在所述源主機(jī)將所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)的標(biāo)識成功復(fù)制到目標(biāo)數(shù)據(jù)庫之后,所述目標(biāo)主機(jī)在所述事務(wù)日志表中刪除所述業(yè)務(wù)的日志和狀態(tài),在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中刪除所述業(yè)務(wù)的標(biāo)識。目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的狀態(tài)確定業(yè)務(wù)是否被成功提交到源數(shù)據(jù)庫,如果該業(yè)務(wù)已成功提交到源數(shù)據(jù)庫,但在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中沒有查詢到該業(yè)務(wù)的標(biāo)識,確定目標(biāo)數(shù)據(jù)庫中沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),為使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù);如果該業(yè)務(wù)提交到源數(shù)據(jù)庫,目標(biāo)主機(jī)如果從源數(shù)據(jù)庫的事務(wù)記錄表中查詢到該業(yè)務(wù)的標(biāo)識,確定源數(shù)據(jù)庫中已保存有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),為使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù);如果該業(yè)務(wù)沒有提交到源數(shù)據(jù)庫,目標(biāo)主機(jī)如果從源數(shù)據(jù)庫的事務(wù)記錄表中沒有查詢到該業(yè)務(wù)的標(biāo)識,確定源數(shù)據(jù)庫中沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),則在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志和狀態(tài)。本發(fā)明實施例,源主機(jī)在向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)之前,先在源數(shù)據(jù)庫的事務(wù)記錄表中為該業(yè)務(wù)添加標(biāo)識,再向目標(biāo)數(shù)據(jù)庫提交在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為該業(yè)務(wù)添加日志并待處理狀態(tài)的事務(wù)。在源主機(jī)向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)后,該業(yè)務(wù)的日志和狀態(tài)被保存到目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中,同時該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和標(biāo)識也被保存到源數(shù)據(jù)庫中,由于該業(yè)務(wù)已被成功執(zhí)行,將該業(yè)務(wù)在事務(wù)日志表中的狀態(tài)標(biāo)識為成功。如果源主機(jī)后續(xù)沒有將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)成功復(fù)制到目標(biāo)數(shù)據(jù)庫,例如源主機(jī)出現(xiàn)故障導(dǎo)致的復(fù)制失敗,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的待處理狀態(tài)可確定目標(biāo)數(shù)據(jù)庫沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),根據(jù)源數(shù)據(jù)庫的事務(wù)記錄表中該業(yè)務(wù)的標(biāo)識可確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)已保存在在源數(shù)據(jù)庫中。為使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。源主機(jī)在向源數(shù)據(jù)庫提交為業(yè)務(wù)啟動的事務(wù)之后,源主機(jī)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將該業(yè)務(wù)的狀態(tài)標(biāo)識為已成功,再將該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫同時在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中添加該業(yè)務(wù)的標(biāo)識。目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的已成功狀態(tài),可確定該業(yè)務(wù)已被成功提交到源數(shù)據(jù)庫,如果目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中沒有該業(yè)務(wù)的標(biāo)識,則目標(biāo)數(shù)據(jù)庫中也沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),為使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。因此,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表和事務(wù)記錄表以及源數(shù)據(jù)庫的事務(wù)記錄表,可確定源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫是否保持一致,如果不一致,目標(biāo)主機(jī)可根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表為該業(yè)務(wù)添加的日志執(zhí)行該業(yè)務(wù),在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),從而使源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫保持一致。本發(fā)明通過目標(biāo)數(shù)據(jù)庫的事務(wù)日志表和事務(wù)記錄表以及源數(shù)據(jù)庫的事務(wù)記錄表,避免了源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫不一致的現(xiàn)象。由于關(guān)鍵業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)在復(fù)制過程中不容許丟失,對于關(guān)鍵業(yè)務(wù)可采用本發(fā)明提供的數(shù)據(jù)復(fù)制方法。因此,本發(fā)明實施例尤其適用于復(fù)制關(guān)鍵業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。圖2A和圖2B實施例主要說明目標(biāo)主機(jī)檢測到源主機(jī)出現(xiàn)故障后,如何使目標(biāo)數(shù) 據(jù)庫與源數(shù)據(jù)庫中數(shù)據(jù)保持一致。圖2A為本發(fā)明實施例提供的一種數(shù)據(jù)恢復(fù)方法流程圖。如圖2A所示,本實施例包括步驟21A:目標(biāo)主機(jī)檢測到源主機(jī)故障后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為已成功的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功。步驟22A :所述目標(biāo)主機(jī)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中查詢狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識;所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)的標(biāo)識。目標(biāo)主機(jī)檢測到源主機(jī)故障后,遍歷目標(biāo)數(shù)據(jù)庫中的事務(wù)日志表中每個業(yè)務(wù)。若業(yè)務(wù)的狀態(tài)為已成功,在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中查找該業(yè)務(wù)的標(biāo)識,目標(biāo)主機(jī)檢測到源主機(jī)出現(xiàn)故障后,如果目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的狀態(tài)為已成功,則確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)已在源數(shù)據(jù)庫中生效,步驟23A :若沒有查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。若沒有查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該事務(wù)的日志,執(zhí)行該業(yè)務(wù),以在目標(biāo)數(shù)據(jù)庫中產(chǎn)生該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。其中,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中,業(yè)務(wù)的狀態(tài)為待處理,表明該業(yè)務(wù)已被源主機(jī)執(zhí)行過,但為該業(yè)務(wù)啟動的事務(wù)未提交到源數(shù)據(jù)庫,即該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)未在源數(shù)據(jù)庫中生效;若業(yè)務(wù)的狀態(tài)為已成功,表明為該業(yè)務(wù)啟動的事務(wù)已被源主機(jī)成功提交到源數(shù)據(jù)庫,即該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)已在源數(shù)據(jù)庫中生效。如果在目標(biāo)數(shù)庫的事務(wù)記錄表中查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,可確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)已被成功復(fù)制到目標(biāo)數(shù)據(jù)庫,對于該業(yè)務(wù)目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫是一致的;如果在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中沒有查詢到已成功的業(yè)務(wù)的標(biāo)識,可確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)還沒有被源主機(jī)復(fù)制到目標(biāo)數(shù)據(jù)庫,為使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中訪業(yè)務(wù)的標(biāo)識執(zhí)行該業(yè)務(wù),以在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。目標(biāo)主機(jī)檢測到源主機(jī)出現(xiàn)故障后,如果目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的狀態(tài)為待處理,目標(biāo)主機(jī)不能確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)是否已在源數(shù)據(jù)庫中生效,只有在源主機(jī)從故障恢復(fù)后,通過源數(shù)據(jù)庫的事務(wù)記錄表來判斷該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)是否已在源數(shù)據(jù)庫中生效,具體見圖2B實施例提供的方法。本實施例提供的數(shù)據(jù)恢復(fù)方法,檢測到源主機(jī)出現(xiàn)故障后,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的狀態(tài),來確定該業(yè)務(wù)已被源主機(jī)成功提交到源數(shù)據(jù)庫,或者確定當(dāng)前不能明確源主機(jī)對該業(yè)務(wù)的執(zhí)行狀態(tài)。并進(jìn)一步通過目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中記錄的業(yè)務(wù)的標(biāo)識,來判斷已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù),其業(yè)務(wù)數(shù)據(jù)是否已成功復(fù)制到目標(biāo)數(shù)據(jù)庫,以確定是否需要根據(jù)事務(wù)日志表中的日志在本機(jī)執(zhí)行這些業(yè)務(wù),從而使目標(biāo)數(shù)據(jù)庫也保存源數(shù)據(jù)庫中沒有復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)。圖2B為本發(fā)明實施例提供的另一種數(shù)據(jù)恢復(fù)方法流程圖。如圖2B所示,本實施 例包括步驟21B 目標(biāo)主機(jī)檢測到源主機(jī)從故障恢復(fù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為待處理的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功。步驟22B :所述目標(biāo)主機(jī)在源數(shù)據(jù)庫的事務(wù)記錄表查詢狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識;所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù),以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。目標(biāo)主機(jī)檢測到源主機(jī)故障恢復(fù)后,遍歷目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中每個業(yè)務(wù)。若業(yè)務(wù)的狀態(tài)為待處理,在源數(shù)據(jù)庫的事務(wù)記錄表中查找該業(yè)務(wù)的標(biāo)識。如果目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的狀態(tài)為待處理,目標(biāo)主機(jī)不能確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)是否已在源數(shù)據(jù)庫中生效,需要結(jié)合源數(shù)據(jù)庫的事務(wù)記錄表進(jìn)行判斷。步驟23B :若查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,所述目標(biāo)主機(jī)執(zhí)行所述業(yè)務(wù)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。若在源數(shù)據(jù)庫的事務(wù)記錄表查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,目標(biāo)主機(jī)根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志,執(zhí)行該業(yè)務(wù),以在以在目標(biāo)數(shù)據(jù)庫中生成該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),從而使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持一致。進(jìn)一步,在目標(biāo)主機(jī)檢測到源主機(jī)從故障恢復(fù)之后,還包括目標(biāo)主機(jī)刪除目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中狀態(tài)為待處理且標(biāo)識沒有記錄在源數(shù)據(jù)庫的事務(wù)記錄表的業(yè)務(wù)的日志和狀態(tài)。若目標(biāo)主機(jī)在源數(shù)據(jù)庫的事務(wù)記錄表中沒有查找狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,確定源主機(jī)在出現(xiàn)故障之前沒有將為該業(yè)務(wù)啟動的事務(wù)成功提交到源數(shù)據(jù)庫,即源數(shù)據(jù)庫中沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。對于該業(yè)務(wù)來說,目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫是一致的,因而,目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中不需要保留訪業(yè)務(wù)的日志和狀態(tài),在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志和狀態(tài)。本實施例提供的數(shù)據(jù)恢復(fù)方法,檢測到源主機(jī)從故障恢復(fù)后,目標(biāo)主機(jī)訪問目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表,通過其中記錄的業(yè)務(wù)標(biāo)識,判斷狀態(tài)為待處理的業(yè)務(wù)是否成功提交到源數(shù)據(jù)庫,以確定是否需要根據(jù)事務(wù)日志表中的日志在本機(jī)執(zhí)行該業(yè)務(wù)。因此,在源主機(jī)出現(xiàn)故障后,目標(biāo)主機(jī)執(zhí)行事務(wù)日志表中狀態(tài)為成功且標(biāo)識沒有記錄在本機(jī)數(shù)據(jù)庫的事務(wù)記錄表的事務(wù)。在檢測到源主機(jī)恢復(fù)故障后,目標(biāo)主機(jī)執(zhí)行該事務(wù)日志表中狀態(tài)為待處理且標(biāo)識記錄在源數(shù)據(jù)庫的事務(wù)記錄表的事務(wù)。從而,目標(biāo)數(shù)據(jù)庫也保存源數(shù)據(jù)庫中沒有復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)。使目標(biāo)數(shù)據(jù)庫中數(shù)據(jù)與源數(shù)據(jù)庫中數(shù)據(jù)保持一致。圖3A為本發(fā)明實施例提供的另一種數(shù)據(jù)復(fù)制方法流程圖。如圖3A所示,源主機(jī)安裝有源應(yīng)用程序和源數(shù)據(jù)庫,目標(biāo)主機(jī)上安裝有目標(biāo)應(yīng)用程序和目標(biāo)數(shù)據(jù)庫,以下方法說明源主機(jī)上的源應(yīng)用程序如何將一個業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)復(fù)制到目標(biāo)主機(jī)上的目標(biāo)數(shù)據(jù)庫。如圖3A所示,本實施例提供的方法包括步驟Ia :源應(yīng)用程序在源數(shù)據(jù)庫上啟動事務(wù)。步驟2a :源應(yīng)用程序執(zhí)行業(yè)務(wù)操作。
步驟3a :源應(yīng)用程序在源數(shù)據(jù)庫的事務(wù)記錄表中添加該業(yè)務(wù)的標(biāo)識。步驟4a :源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫上啟動事務(wù)。步驟5a:源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為該業(yè)務(wù)添加日志,并將該業(yè)務(wù)的狀態(tài)標(biāo)識為待處理。步驟6a :源應(yīng)用程序向目標(biāo)數(shù)據(jù)庫提交事務(wù)。步驟7a :源應(yīng)用程序向源數(shù)據(jù)庫提交事務(wù);步驟8a:源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將該業(yè)務(wù)的狀態(tài)設(shè)置為已成功。步驟9a :源應(yīng)用程序?qū)⒃摌I(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和該業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫;其中,將該業(yè)務(wù)的標(biāo)識復(fù)制到該目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中。步驟IOa 目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中查詢業(yè)務(wù)的狀態(tài)。步驟Ila :目標(biāo)應(yīng)用程序獲知業(yè)務(wù)的狀態(tài)為成功。步驟12a :目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表查找狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識。步驟13a 目標(biāo)應(yīng)用程序獲取到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識。步驟14a:目標(biāo)應(yīng)用程序從目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志,從目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表刪除該業(yè)務(wù)的標(biāo)識。目標(biāo)應(yīng)用程序從目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查詢到狀態(tài)為成功的業(yè)務(wù),且確定目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表記錄有該業(yè)務(wù)的標(biāo)識,則可確定該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)已從源數(shù)據(jù)庫成功復(fù)制到目標(biāo)數(shù)據(jù)庫。為節(jié)省空間,可從目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表和事務(wù)日志表刪除不需要再保存的該業(yè)務(wù)的相關(guān)信息。源應(yīng)用程序執(zhí)行Ia 5a任意步驟出現(xiàn)失敗,則視為本次業(yè)務(wù)執(zhí)行失敗,同時回滾源應(yīng)用程序在源數(shù)據(jù)庫啟動的事務(wù)和在目標(biāo)應(yīng)用程序上啟動的事務(wù)。如果步驟7a即源應(yīng)用程序向源數(shù)據(jù)庫提交的事務(wù)失敗,源應(yīng)用程序的處理方法如圖3B所示。如圖3B所示,在步驟7a之后還包括步驟BI :源應(yīng)用程序獲知向源數(shù)據(jù)庫提交的事務(wù)失敗。步驟B2 :源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志和狀態(tài)。由于源應(yīng)用程序向源數(shù)據(jù)庫提交事務(wù)失敗,因此源數(shù)據(jù)庫中沒有保存該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),目標(biāo)數(shù)據(jù)庫中不需要保存該業(yè)務(wù)的日志和狀態(tài)。如果步驟B2失敗,目標(biāo)應(yīng)用程序的處理方法如圖3C所示。如圖3C所示,在圖3B基礎(chǔ)上還包括步驟Cl 目標(biāo)應(yīng)用程序檢測到源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志和狀態(tài)失敗時,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中查詢該業(yè)務(wù)的狀態(tài)。步驟C2 目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的狀態(tài)為待處理。步驟C3 目標(biāo)應(yīng)用程序在源數(shù)據(jù)庫的事務(wù)記錄表查詢該業(yè)務(wù)的標(biāo)識。步驟C4 目標(biāo)應(yīng)用程序沒有查詢到該業(yè)務(wù)的標(biāo)識。步驟C5 :目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志。目標(biāo)應(yīng)用程序在源數(shù)據(jù)庫的事務(wù)記錄表中沒有查詢到該業(yè)務(wù)的標(biāo)識,確定該業(yè)務(wù)沒有被源應(yīng)用程序成功提交到源數(shù)據(jù)庫,源數(shù)據(jù)庫沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志。
圖4為本發(fā)明實施例提供的另一種數(shù)據(jù)恢復(fù)方法流程圖。本實施例主要說明在圖3B中步驟B2失敗后,如果目標(biāo)主機(jī)檢測到源主機(jī)出現(xiàn)故障,目標(biāo)主機(jī)對于該業(yè)務(wù)的處理過程。如圖4所示,本實施例包括步驟Ia :源應(yīng)用程序在源數(shù)據(jù)庫上啟動事務(wù)。步驟2a :源應(yīng)用程序執(zhí)行業(yè)務(wù)操作。步驟3a :源應(yīng)用程序在源數(shù)據(jù)庫的事務(wù)記錄表中添加該業(yè)務(wù)的標(biāo)識。步驟4a :源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫上啟動事務(wù)。步驟5a :源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為該業(yè)務(wù)添加日志,并將該業(yè)務(wù)的狀態(tài)標(biāo)識為待處理。步驟6a :源應(yīng)用程序向該目標(biāo)數(shù)據(jù)庫提交事務(wù);步驟BI :源應(yīng)用程序獲知向目標(biāo)數(shù)據(jù)庫提交事務(wù)失敗。步驟B2 :源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志和狀態(tài)。步驟41 :目標(biāo)應(yīng)用程序檢測到源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除該業(yè)務(wù)的日志和狀態(tài)失敗后,檢測到源主機(jī)出現(xiàn)故障。目標(biāo)應(yīng)用程序?qū)υ粗鳈C(jī)進(jìn)行存活心跳檢測,確定源主機(jī)出現(xiàn)故障。步驟42 目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫中刪除從源主機(jī)復(fù)制數(shù)據(jù)的配置信息。目標(biāo)應(yīng)用程序刪除從源應(yīng)用程序復(fù)制數(shù)據(jù)的配置信息,以避免源應(yīng)用程序從故障恢復(fù)后,將重新執(zhí)行該業(yè)務(wù)后產(chǎn)生的業(yè)務(wù)數(shù)據(jù)再次復(fù)制到目標(biāo)數(shù)據(jù)庫。步驟43 :目標(biāo)應(yīng)用程序在事務(wù)日志表中查詢該業(yè)務(wù)的狀態(tài)。步驟44 目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的狀態(tài)為待處理。步驟45 目標(biāo)應(yīng)用程序鎖定與該業(yè)務(wù)相關(guān)的業(yè)務(wù)對象。目標(biāo)應(yīng)用程序不允許對鎖定業(yè)務(wù)對象對該項業(yè)務(wù)進(jìn)行操作。步驟46 目標(biāo)應(yīng)用程序切換為執(zhí)行業(yè)務(wù)的活動應(yīng)用程序。步驟47 ;目標(biāo)應(yīng)用程序?qū)υ粗鳈C(jī)進(jìn)行存活心跳檢測,確定源主機(jī)從故障恢復(fù)。步驟48 ;目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中查詢該業(yè)務(wù)的狀態(tài)。步驟49 目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的狀態(tài)為待處理。步驟410 目標(biāo)應(yīng)用程序在源數(shù)據(jù)庫的事務(wù)記錄表查詢該業(yè)務(wù)的標(biāo)識。步驟411 目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的標(biāo)識不存在。步驟412 目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表刪除該業(yè)務(wù)的標(biāo)識,并在事務(wù)日志表刪除該業(yè)務(wù)的日志。
步驟413 目標(biāo)應(yīng)用程序解鎖與該業(yè)務(wù)相關(guān)的業(yè)務(wù)對象。步驟414:目標(biāo)應(yīng)用程序重新在目標(biāo)數(shù)據(jù)庫中配置從源主機(jī)復(fù)制數(shù)據(jù)的配置信肩、O目標(biāo)應(yīng)用程序重新配置從源應(yīng)用程序復(fù)制數(shù)據(jù)的配置信息,以便接收源應(yīng)用程序復(fù)制的數(shù)據(jù),即目標(biāo)應(yīng)用程序與源應(yīng)用程序互換角色。如果源應(yīng)用程序向目標(biāo)數(shù)據(jù)庫成功提交業(yè)務(wù)后,即圖3A中步驟6a成功后,目標(biāo)應(yīng)用程序檢測到源主機(jī)出現(xiàn)故障,此時目標(biāo)應(yīng)用程序的處理結(jié)果與圖4中步驟41至步驟413的處理結(jié)果相同。圖5為本發(fā)明實施例提供的又一種數(shù)據(jù)恢復(fù)方法流程圖。本實施例主要說明在步驟7a后即源應(yīng)用程序向源數(shù)據(jù)庫提交業(yè)務(wù)后,如果源主機(jī)出現(xiàn)故障,目標(biāo)應(yīng)用程序?qū)τ谠摌I(yè)務(wù)的處理過程。如圖5所示,本實施例包括 步驟Ia至步驟7a參見圖3A對應(yīng)實施例說明,在此不再贅述。步驟51 目標(biāo)應(yīng)用程序檢測到源主機(jī)出現(xiàn)故障。步驟52 ;目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫中刪除從源主機(jī)復(fù)制數(shù)據(jù)的配置信息。步驟53 :目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中查詢該業(yè)務(wù)的狀態(tài)。步驟54 目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的狀態(tài)為待處理。由于目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的狀態(tài)為待處理,根據(jù)源應(yīng)用程序向目標(biāo)數(shù)據(jù)庫復(fù)制數(shù)據(jù)的流程可知,在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中沒有該業(yè)務(wù)的標(biāo)識,因此,該業(yè) 務(wù)的業(yè)務(wù)數(shù)據(jù)還沒有復(fù)制到目標(biāo)數(shù)據(jù)庫。步驟55 目標(biāo)應(yīng)用程序鎖定與該業(yè)務(wù)相關(guān)的業(yè)務(wù)對象。步驟56 目標(biāo)應(yīng)用程序切換為執(zhí)行業(yè)務(wù)的活動應(yīng)用程序。步驟57 ;目標(biāo)應(yīng)用程序檢測到源主機(jī)從故障恢復(fù)。步驟58 ;目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中查詢該業(yè)務(wù)的狀態(tài)。步驟59 目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的狀態(tài)為待處理。步驟510 目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表查詢該業(yè)務(wù)的標(biāo)識。步驟511 目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的標(biāo)識存在。目標(biāo)應(yīng)用程序在源數(shù)據(jù)庫的事務(wù)記錄表查詢到該業(yè)務(wù)的標(biāo)識,確定源應(yīng)用程序已成功向源數(shù)據(jù)庫提交該業(yè)務(wù),源數(shù)據(jù)庫中保存有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。由于目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的狀態(tài)為待處理,根據(jù)源應(yīng)用程序向目標(biāo)數(shù)據(jù)庫復(fù)制數(shù)據(jù)的流程可知,在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中沒有該業(yè)務(wù)的標(biāo)識,因此,該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)還沒有復(fù)制到目標(biāo)數(shù)據(jù)庫。為使目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)與目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)保持一致,目標(biāo)應(yīng)用程序需要根據(jù)該業(yè)務(wù)的日志在目標(biāo)數(shù)據(jù)庫上執(zhí)行該業(yè)務(wù),從而使目標(biāo)數(shù)據(jù)庫中也保存該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。步驟512 :目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫上啟動事務(wù)。步驟513 :目標(biāo)應(yīng)用程序根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志,執(zhí)行該業(yè)務(wù)。步驟514 目標(biāo)應(yīng)用程序向目標(biāo)數(shù)據(jù)庫提交事務(wù)。進(jìn)一步,為節(jié)省空間,在步驟513之后,目標(biāo)應(yīng)用程序還可從目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表和事務(wù)日志表刪除不需要再保存的該業(yè)務(wù)的相關(guān)信息,例如,業(yè)務(wù)的標(biāo)識、日志和狀態(tài)坐寸O步驟515 目標(biāo)應(yīng)用程序解鎖與該業(yè)務(wù)相關(guān)的業(yè)務(wù)對象。步驟516 :目標(biāo)應(yīng)用程序重新在目標(biāo)數(shù)據(jù)庫中配置從源主機(jī)復(fù)制數(shù)據(jù)的配置信
肩、O在步驟7a后即源應(yīng)用程序向本機(jī)數(shù)據(jù)庫提交業(yè)務(wù)后,如果源主機(jī)出現(xiàn)故障,目標(biāo)應(yīng)用程序檢測到源應(yīng)用程序從故障恢復(fù)時,需要根據(jù)該業(yè)務(wù)的日志在目標(biāo)數(shù)據(jù)庫上執(zhí)行該業(yè)務(wù),從而使目標(biāo)數(shù)據(jù)庫中也保存該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。圖6為本發(fā)明實施例提供的再一種數(shù)據(jù)恢復(fù)方法流程圖。本實施例主要說明在步驟8a后即在源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,如果源主機(jī)出現(xiàn)故障,目標(biāo)應(yīng)用程序?qū)τ谠摌I(yè)務(wù)的處理過程。如圖6所示,本實施例包括 步驟Ia至步驟8a參見圖3A對應(yīng)實施例中說明。步驟61 :目標(biāo)應(yīng)用程序檢測到源主機(jī)出現(xiàn)故障。步驟62 ;目標(biāo)應(yīng)用程序刪除從源主機(jī)復(fù)制數(shù)據(jù)的配置信息。步驟63 :目標(biāo)應(yīng)用程序在事務(wù)日志表中查詢該業(yè)務(wù)的狀態(tài)。步驟64 :目標(biāo)應(yīng)用程序獲知該業(yè)務(wù)的狀態(tài)為成功。步驟65 目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表查詢該業(yè)務(wù)的標(biāo)識。步驟66 目標(biāo)應(yīng)用程序獲知目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中不存在該業(yè)務(wù)的標(biāo)識。目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表不存在該業(yè)務(wù)的標(biāo)識,但在事務(wù)日志表中該業(yè)務(wù)的狀態(tài)為成功,則目標(biāo)應(yīng)用程序確定源應(yīng)用程序已將該業(yè)務(wù)成功到源數(shù)據(jù)庫,即源數(shù)據(jù)庫中包括該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),而在目標(biāo)數(shù)據(jù)庫中沒有該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。為使目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)與目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)保持一致,目標(biāo)應(yīng)用程序需要根據(jù)該業(yè)務(wù)的日志在本機(jī)數(shù)據(jù)庫上執(zhí)行該業(yè)務(wù),從而使目標(biāo)數(shù)據(jù)庫中也保存該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。步驟67 :目標(biāo)應(yīng)用程序在目標(biāo)數(shù)據(jù)庫上啟動事務(wù)。步驟68 :目標(biāo)應(yīng)用程序根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中該業(yè)務(wù)的日志,執(zhí)行該業(yè)務(wù)。步驟69 目標(biāo)應(yīng)用程序向目標(biāo)數(shù)據(jù)庫提交事務(wù)。進(jìn)一步,為節(jié)省空間,在步驟69之后,目標(biāo)應(yīng)用程序還可從目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表和事務(wù)日志表刪除不需要再保存的該業(yè)務(wù)的相關(guān)信息。步驟610 目標(biāo)應(yīng)用程序切換為執(zhí)行業(yè)務(wù)的活動應(yīng)用程序。步驟611 ;目標(biāo)應(yīng)用程序檢測到源主機(jī)從故障恢復(fù)。步驟612 :目標(biāo)應(yīng)用程序重新在目標(biāo)數(shù)據(jù)庫中配置從源主機(jī)復(fù)制數(shù)據(jù)的配置信
肩、O在步驟8a后即該源應(yīng)用程序在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中將業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,如果源主機(jī)出現(xiàn)故障,目標(biāo)應(yīng)用程序根據(jù)該業(yè)務(wù)的日志在本機(jī)數(shù)據(jù)庫上執(zhí)行該業(yè)務(wù),從而使目標(biāo)數(shù)據(jù)庫中也保存該業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。本發(fā)明實施例對其它異常情況的處理如果在源主機(jī)在執(zhí)行業(yè)務(wù)過程中目標(biāo)主機(jī)出現(xiàn)故障,源主機(jī)訪問目標(biāo)數(shù)據(jù)庫,即停止訪問目標(biāo)數(shù)據(jù)庫的事務(wù)日志表和事務(wù)記錄表。目標(biāo)主機(jī)在恢復(fù)后主動從主機(jī)獲取所有數(shù)據(jù)。如果雙機(jī)同時出現(xiàn)故障,源主機(jī)從故障恢復(fù)后,立即斷開復(fù)制,根據(jù)源數(shù)據(jù)庫的事務(wù)日志表和事務(wù)記錄表,參照以上實施例給出的各種異常情況進(jìn)行處理。圖7A為本發(fā)明實施例提供的一種數(shù)據(jù)復(fù)制裝置結(jié)構(gòu)示意圖。如圖7A所示,本實施例提供的裝置包括源數(shù)據(jù)庫71、業(yè)務(wù)執(zhí)行模塊72和日志添加模塊73、業(yè)務(wù)提交模塊74和復(fù)制模塊75。
源數(shù)據(jù)庫71,用于存儲事務(wù)記錄表和業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù);所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù)。業(yè)務(wù)執(zhí)行模塊72,用于在源數(shù)據(jù)庫為一業(yè)務(wù)啟動事務(wù)后,在所述源數(shù)據(jù)庫上執(zhí)行所述業(yè)務(wù)的操作,在所述源數(shù)據(jù)庫的事務(wù)記錄表中添加所述業(yè)務(wù)的標(biāo)識。日志添加模塊73,用于在目標(biāo)數(shù)據(jù)庫上為添加日志操作啟動一事務(wù)后,在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為所述業(yè)務(wù)添加日志,并將所述業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,向所述目標(biāo)數(shù)據(jù)庫提交為所述添加日志操作啟動的事務(wù);業(yè)務(wù)提交模塊74,用于向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù)。復(fù)制模塊75,用于若向所述源數(shù)據(jù)庫提交所述事務(wù)成功,在所述事務(wù)日志表中將所述業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,將所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫;其中,將所述業(yè)務(wù)的標(biāo)識復(fù)制到所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中,所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù)。如圖7B所示,在圖7A的基礎(chǔ)上還包括刪除模塊76。刪除模塊76,用于在向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù)之后,若向所述源數(shù)據(jù)庫提交所述事務(wù)失敗,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除為所述業(yè)務(wù)添加的日志和狀態(tài)。圖8為本發(fā)明實施例提供的一種數(shù)據(jù)恢復(fù)裝置結(jié)構(gòu)示意圖。如圖8所示,本實施例提供的裝置包括目標(biāo)數(shù)據(jù)庫81、檢測模塊82、查詢模塊83和業(yè)務(wù)執(zhí)行模塊84。目標(biāo)數(shù)據(jù)庫81,用于存儲事務(wù)日志表和事務(wù)記錄表以及從源主機(jī)復(fù)制的業(yè)務(wù)數(shù)據(jù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功,所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)的標(biāo)識。檢測模塊82,用于檢測源主機(jī)是否出現(xiàn)故障。查詢模塊83,用于在所述檢測模塊檢測到所述源主機(jī)出現(xiàn)故障后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)標(biāo)識為已成功的業(yè)務(wù)。所述查詢模塊83,還用于在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中查詢狀態(tài)標(biāo)識為已成功的業(yè)務(wù)的標(biāo)識。業(yè)務(wù)執(zhí)行模塊84,用于若查詢模塊83沒有查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。本發(fā)明實施例提供的數(shù)據(jù)恢復(fù)裝置,檢測到源主機(jī)出現(xiàn)故障后,根據(jù)目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中業(yè)務(wù)的狀態(tài),來確定該業(yè)務(wù)已被源主機(jī)成功提交到源數(shù)據(jù)庫,或者確定當(dāng)前不能明確源主機(jī)對該業(yè)務(wù)的執(zhí)行狀態(tài)。并進(jìn)一步通過目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中記錄的業(yè)務(wù)的標(biāo)識,來判斷已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù),其業(yè)務(wù)數(shù)據(jù)是否已成功復(fù)制到目標(biāo)數(shù)據(jù)庫,以確定是否需要根據(jù)事務(wù)日志表中的日志在本機(jī)執(zhí)行這些業(yè)務(wù),從而使目標(biāo)數(shù)據(jù)庫也保存源數(shù)據(jù)庫中沒有復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)。圖9A為本發(fā)明實施例提供的另一種數(shù)據(jù)恢復(fù)裝置結(jié)構(gòu)示意圖。如圖9所示,本實施例提供的裝置包括目標(biāo)數(shù)據(jù)庫91、檢測模塊92、查詢模塊93和業(yè)務(wù)執(zhí)行模塊94。目標(biāo)數(shù)據(jù)庫91,用于存儲事務(wù)日志表和事務(wù)記錄表以及從源主機(jī)復(fù)制的業(yè)務(wù)數(shù)據(jù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功。檢測模塊92,用于主機(jī)檢測到源主機(jī)是否從故障恢復(fù)。查詢模塊93,用于所述檢測模塊檢測到源主機(jī)從故障恢復(fù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為待處理的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功。所述查詢模塊93,用于源數(shù)據(jù)庫的事務(wù)記錄表查詢狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識;所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù)。業(yè)務(wù)執(zhí)行模塊94,用于若查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。如圖9B所示,本實施例提供的裝置還可包括刪除模塊95。刪除模塊95,用于若所述查詢模塊沒有查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,在所述事務(wù)日志表中刪除所述業(yè)務(wù)的日志和狀態(tài)。本發(fā)明實施例提供的數(shù)據(jù)恢復(fù),檢測到源主機(jī)從故障恢復(fù)后,訪問目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表,通過其中記錄的業(yè)務(wù)標(biāo)識,判斷狀態(tài)為待處理的業(yè)務(wù)是否成功提交到源數(shù)據(jù)庫,以確定是否需要根據(jù)事務(wù)日志表中的日志在本機(jī)執(zhí)行該業(yè)務(wù)。因此,在源主機(jī)出現(xiàn)故障后,執(zhí)行事務(wù)日志表中狀態(tài)為成功且標(biāo)識沒有記錄在本機(jī)數(shù)據(jù)庫的事務(wù)記錄表的事務(wù)。在檢測到源主機(jī)恢復(fù)故障后,執(zhí)行該事務(wù)日志表中狀態(tài)為待處理且標(biāo)識記錄在源數(shù)據(jù)庫的事務(wù)記錄表的事務(wù)。從而,目標(biāo)數(shù)據(jù)庫也保存源數(shù)據(jù)庫中沒有復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)。使目標(biāo)數(shù)據(jù)庫中數(shù)據(jù)與源數(shù)據(jù)庫中數(shù)據(jù)保持一致。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。最后應(yīng)說明的是以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范 圍。
權(quán)利要求
1.ー種數(shù)據(jù)復(fù)制方法,其特征在于,包括 源主機(jī)在源數(shù)據(jù)庫為一業(yè)務(wù)啟動事務(wù)后,在所述源數(shù)據(jù)庫上執(zhí)行所述業(yè)務(wù)的操作,在所述源數(shù)據(jù)庫的事務(wù)記錄表中添加所述業(yè)務(wù)的標(biāo)識; 所述源主機(jī)在目標(biāo)數(shù)據(jù)庫上為添加日志操作啟動一事務(wù)后,在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為所述業(yè)務(wù)添加日志,并將所述業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,向所述目標(biāo)數(shù)據(jù)庫提交為所述添加日志操作啟動的事務(wù); 所述源主機(jī)向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù); 若所述源主機(jī)向所述源數(shù)據(jù)庫提交所述事務(wù)成功,所述源主機(jī)在所述事務(wù)日志表中將所述業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,將所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫;其中,將所述業(yè)務(wù)的標(biāo)識復(fù)制到所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中,所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù)。
2.根據(jù)權(quán)利要求I所述方法,其特征在于,在所述源主機(jī)向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù)之后,還包括 若所述源主機(jī)向所述源數(shù)據(jù)庫提交所述事務(wù)失敗,所述源主機(jī)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除為所述業(yè)務(wù)添加的日志和狀態(tài)。
3.根據(jù)權(quán)利要求I或2所述方法,其特征在于,還包括 若所述目標(biāo)主機(jī)檢測到所述源主機(jī)在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除為所述業(yè)務(wù)添加的日志和狀態(tài)失敗,在所述事務(wù)日志表中查找所述業(yè)務(wù)的狀態(tài); 若所述業(yè)務(wù)的狀態(tài)為待處理,所述目標(biāo)主機(jī)在所述事務(wù)日志表中刪除所述業(yè)務(wù)的日志和狀態(tài)。
4.根據(jù)權(quán)利要求I或2所述方法,其特征在于,在所述源主機(jī)將所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫之后,還包括 所述目標(biāo)主機(jī)在所述事務(wù)日志表中刪除所述業(yè)務(wù)的日志和狀態(tài),在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中刪除所述業(yè)務(wù)的標(biāo)識。
5.ー種數(shù)據(jù)恢復(fù)方法,其特征在于,包括 目標(biāo)主機(jī)檢測到源主機(jī)故障后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為已成功的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功; 所述目標(biāo)主機(jī)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中查詢狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識;所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)的標(biāo)識; 若沒有查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。
6.ー種數(shù)據(jù)恢復(fù)方法,其特征在于,包括 目標(biāo)主機(jī)檢測到源主機(jī)從故障恢復(fù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為待處理的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功; 所述目標(biāo)主機(jī)在源數(shù)據(jù)庫的事務(wù)記錄表查詢狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識;所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù); 若查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,所述目標(biāo)主機(jī)執(zhí)行所述業(yè)務(wù)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述方法,其特征在于,還包括 若沒有查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,所述目標(biāo)主機(jī)在所述事務(wù)日志表中刪除所述業(yè)務(wù)的日志和狀態(tài)。
8.一種數(shù)據(jù)復(fù)制裝置,其特征在于,包括 源數(shù)據(jù)庫,用于存儲事務(wù)記錄表和業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù),所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù);所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù); 業(yè)務(wù)執(zhí)行模塊,用于在源數(shù)據(jù)庫為一業(yè)務(wù)啟動事務(wù)后,在所述源數(shù)據(jù)庫上執(zhí)行所述業(yè)務(wù)的操作,在所述源數(shù)據(jù)庫的事務(wù)記錄表中添加所述業(yè)務(wù)的標(biāo)識; 日志添加模塊,用于在目標(biāo)數(shù)據(jù)庫上為添加日志操作啟動一事務(wù)后,在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為所述業(yè)務(wù)添加日志,并將所述業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,向所述目標(biāo)數(shù)據(jù)庫提交為所述添加日志操作啟動的事務(wù); 業(yè)務(wù)提交模塊,用于向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù); 復(fù)制模塊,用于若向所述源數(shù)據(jù)庫提交所述事務(wù)成功,在所述事務(wù)日志表中將所述業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,將所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和所述業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫;其中,將所述業(yè)務(wù)的標(biāo)識復(fù)制到所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中,所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)為所述業(yè)務(wù)被執(zhí)行后得到的業(yè)務(wù)數(shù)據(jù)。
9.根據(jù)權(quán)利要求8所述裝置,其特征在于,還包括 刪除模塊,用于在向所述源數(shù)據(jù)庫提交為所述業(yè)務(wù)啟動的事務(wù)之后,若向所述源數(shù)據(jù)庫提交所述事務(wù)失敗,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中刪除為所述業(yè)務(wù)添加的日志和狀態(tài)。
10.一種數(shù)據(jù)恢復(fù)裝置,其特征在于,包括 目標(biāo)數(shù)據(jù)庫,用于存儲事務(wù)日志表和事務(wù)記錄表以及從源主機(jī)復(fù)制的業(yè)務(wù)數(shù)據(jù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功,所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功復(fù)制到目標(biāo)數(shù)據(jù)庫的業(yè)務(wù)的標(biāo)識; 檢測模塊,用于檢測源主機(jī)是否出現(xiàn)故障; 查詢模塊,用于在所述檢測模塊檢測到所述源主機(jī)出現(xiàn)故障后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)標(biāo)識為已成功的業(yè)務(wù); 所述查詢模塊,還用于在所述目標(biāo)數(shù)據(jù)庫的事務(wù)記錄表中查詢狀態(tài)標(biāo)識為已成功的業(yè)務(wù)的標(biāo)識; 業(yè)務(wù)執(zhí)行模塊,用于若沒有查找到狀態(tài)為已成功的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。
11.一種數(shù)據(jù)恢復(fù)裝置,其特征在于,包括 目標(biāo)數(shù)據(jù)庫,用于存儲事務(wù)日志表和事務(wù)記錄表以及從源主機(jī)復(fù)制的業(yè)務(wù)數(shù)據(jù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功; 檢測模塊,用于主機(jī)檢測到源主機(jī)是否從故障恢復(fù); 查詢模塊,用于所述檢測模塊檢測到源主機(jī)從故障恢復(fù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表查找狀態(tài)為待處理的業(yè)務(wù);所述事務(wù)日志表中包括業(yè)務(wù)的狀態(tài)和日志,所述業(yè)務(wù)的狀態(tài)包括待處理或已成功;所述查詢模塊,用于源數(shù)據(jù)庫的事務(wù)記錄表查詢狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識;所述源數(shù)據(jù)庫的事務(wù)記錄表用于記錄業(yè)務(wù)數(shù)據(jù)已被源主機(jī)成功提交到源數(shù)據(jù)庫的業(yè)務(wù); 業(yè)務(wù)執(zhí)行模塊,用于若查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,執(zhí)行所述業(yè)務(wù)在所述目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中的日志,以使所述目標(biāo)數(shù)據(jù)庫保存所述業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)。
12.根據(jù)權(quán)利要求11所述裝置,其特征在于,還包括 刪除模塊,用于若所述查詢模塊沒有查找到狀態(tài)為待處理的業(yè)務(wù)的標(biāo)識,在所述事務(wù)日志表中刪除所述業(yè)務(wù)的日志和狀態(tài)。
全文摘要
本發(fā)明提供一種數(shù)據(jù)復(fù)制方法、數(shù)據(jù)恢復(fù)方法及裝置。該數(shù)據(jù)復(fù)制方法包括源主機(jī)在源數(shù)據(jù)庫啟動事務(wù)后,在源數(shù)據(jù)庫上執(zhí)行業(yè)務(wù)的操作,在源數(shù)據(jù)庫的事務(wù)記錄表中添加業(yè)務(wù)的標(biāo)識;在目標(biāo)數(shù)據(jù)庫上啟動事務(wù)后,在目標(biāo)數(shù)據(jù)庫的事務(wù)日志表中為業(yè)務(wù)添加日志,并將業(yè)務(wù)的狀態(tài)標(biāo)識為待處理,向目標(biāo)數(shù)據(jù)庫提交事務(wù);向源數(shù)據(jù)庫提交事務(wù);在事務(wù)日志表中將業(yè)務(wù)的狀態(tài)設(shè)置為已成功后,將業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)的標(biāo)識復(fù)制到目標(biāo)數(shù)據(jù)庫。本發(fā)明通過目標(biāo)數(shù)據(jù)庫的事務(wù)日志表和事務(wù)記錄表以及源數(shù)據(jù)庫的事務(wù)記錄表,避免了源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫不一致的現(xiàn)象。
文檔編號G06F17/30GK102708166SQ201210127660
公開日2012年10月3日 申請日期2012年4月26日 優(yōu)先權(quán)日2012年4月26日
發(fā)明者楊鑫偉, 諶衡化 申請人:北京星網(wǎng)銳捷網(wǎng)絡(luò)技術(shù)有限公司