本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的技術(shù)。
背景技術(shù):
隨著大數(shù)據(jù)時(shí)代的來臨,數(shù)據(jù)處理量的激增帶動(dòng)了數(shù)據(jù)庫的發(fā)展,一般采用主數(shù)據(jù)庫以及備用數(shù)據(jù)庫共同保障數(shù)據(jù)庫的高可靠性,為保障數(shù)據(jù)安全不丟失,往往數(shù)據(jù)庫的主數(shù)據(jù)庫與備用數(shù)據(jù)庫之間采用同步模式進(jìn)行數(shù)據(jù)備份,其中,現(xiàn)有技術(shù)在提交數(shù)據(jù)庫事務(wù)時(shí),主數(shù)據(jù)庫服務(wù)器需要把事務(wù)的所有日志都發(fā)送到備用數(shù)據(jù)服務(wù)器且備用數(shù)據(jù)庫服務(wù)器反饋已接收后主數(shù)據(jù)庫服務(wù)器才完成數(shù)據(jù)庫事務(wù)提交并通知用戶。
然而,現(xiàn)有技術(shù)在主備同步模式下進(jìn)行數(shù)據(jù)庫事務(wù)提交時(shí),往往主數(shù)據(jù)庫服務(wù)器與備用數(shù)據(jù)庫之間會(huì)存在網(wǎng)絡(luò)延遲,從而導(dǎo)致主數(shù)據(jù)庫服務(wù)器提交數(shù)據(jù)庫事務(wù)非常耗時(shí),進(jìn)而造成數(shù)據(jù)庫事務(wù)完成時(shí)間過長,數(shù)據(jù)庫事務(wù)吞吐量下降,數(shù)據(jù)庫性能大幅下降。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)的目的是提供一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的方法與設(shè)備,用以解決現(xiàn)有主備同步模式下事務(wù)提交完成時(shí)間過長的問題。
為實(shí)現(xiàn)上述目的,根據(jù)本申請(qǐng)的一個(gè)方面,本申請(qǐng)?zhí)峁┝艘环N在主數(shù)據(jù)庫服務(wù)器端用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的方法,該方法解決了現(xiàn)有主備同步模式下事務(wù)提交完成時(shí)間過長的問題,該方法包括:
當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫;
在所述主數(shù)據(jù)庫中執(zhí)行所述事務(wù)的事務(wù)提交操作;
檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息;
當(dāng)所述備用數(shù)據(jù)庫已接收所述事務(wù)對(duì)應(yīng)的在先日志信息,向所述用戶發(fā) 送所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)提交完成通知。
根據(jù)本申請(qǐng)的另一個(gè)方面,本申請(qǐng)?zhí)峁┝艘环N在備用數(shù)據(jù)庫服務(wù)器端用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的方法,該方法解決了現(xiàn)有主備同步模式下事務(wù)提交完成時(shí)間過長的問題,該方法包括:
接收主數(shù)據(jù)庫發(fā)送事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào);
當(dāng)檢測到對(duì)應(yīng)主數(shù)據(jù)庫異常,將備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫,并在提供服務(wù)前,執(zhí)行以下操作:
對(duì)于所述新的主數(shù)據(jù)庫中的待補(bǔ)事務(wù),重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息;
根據(jù)補(bǔ)全后的所述日志信息對(duì)所述新的主數(shù)據(jù)庫執(zhí)行回放操作,以使數(shù)據(jù)庫恢復(fù)一致。
根據(jù)本申請(qǐng)的又一個(gè)方面,本申請(qǐng)?zhí)峁┝艘环N用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的主數(shù)據(jù)庫服務(wù)器端設(shè)備,該設(shè)備解決了現(xiàn)有主備同步模式下事務(wù)提交完成時(shí)間過長的問題,該設(shè)備包括:
發(fā)送裝置,用于當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫;
執(zhí)行裝置,用于在所述主數(shù)據(jù)庫中執(zhí)行所述事務(wù)的事務(wù)提交操作;
檢測裝置,用于檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息;
通知裝置,用于當(dāng)所述備用數(shù)據(jù)庫已接收所述事務(wù)對(duì)應(yīng)的在先日志信息,向所述用戶發(fā)送所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)提交完成通知。
根據(jù)本申請(qǐng)的再一個(gè)方面,本申請(qǐng)?zhí)峁┝艘环N用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的備用數(shù)據(jù)庫服務(wù)器端設(shè)備,該設(shè)備解決了現(xiàn)有主備同步模式下事務(wù)提交完成時(shí)間過長的問題,該設(shè)備包括:
接受裝置,用于接收主數(shù)據(jù)庫發(fā)送事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào);
主備切換裝置,用于當(dāng)檢測到對(duì)應(yīng)主數(shù)據(jù)庫異常,將備用數(shù)據(jù)庫切換為 新的主數(shù)據(jù)庫,并在提供服務(wù)前,執(zhí)行以下操作:
日志補(bǔ)全裝置,用于對(duì)于所述新的主數(shù)據(jù)庫中的待補(bǔ)事務(wù),重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息;
數(shù)據(jù)恢復(fù)裝置,用于根據(jù)補(bǔ)全后的所述日志信息對(duì)所述新的主數(shù)據(jù)庫執(zhí)行回放操作,以使數(shù)據(jù)庫恢復(fù)一致。
根據(jù)本申請(qǐng)的再一方面,還提供了一種實(shí)現(xiàn)主備同步模式下事務(wù)提交的系統(tǒng),解決了現(xiàn)有主備同步模式下事務(wù)提交完成時(shí)間過長的問題,其中,該系統(tǒng)包括如前所述根據(jù)本發(fā)明一個(gè)方面的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的主數(shù)據(jù)庫服務(wù)器端設(shè)備,以及如前所述根據(jù)本發(fā)明另一個(gè)方面的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的備用數(shù)據(jù)庫服務(wù)器端設(shè)備。
與現(xiàn)有技術(shù)相比,本申請(qǐng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求即將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及事務(wù)提交請(qǐng)求之前的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫,并執(zhí)行事務(wù)提交操作,接著檢測所述備用數(shù)據(jù)庫是否已接收所發(fā)送的在先日志信息,若備用數(shù)據(jù)庫已接收則向所述用戶發(fā)送所述事務(wù)提交請(qǐng)求的完成通知,從而不用等待備用數(shù)據(jù)庫將事務(wù)提交請(qǐng)求的日志同步完成即可通知用戶提交完成,解決了現(xiàn)有主備同步模式下事務(wù)提交完成時(shí)間過長的問題,提升了數(shù)據(jù)庫事務(wù)提交的速度,進(jìn)而提升數(shù)據(jù)庫事務(wù)的吞吐量提高數(shù)據(jù)庫性能,優(yōu)化用戶體驗(yàn)。
附圖說明
通過閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1示出根據(jù)本申請(qǐng)一個(gè)方面的主數(shù)據(jù)庫端以及備用數(shù)據(jù)庫端配合實(shí)現(xiàn)的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的方法流程圖;
圖2示出根據(jù)本申請(qǐng)另一個(gè)優(yōu)選實(shí)例的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的方法中的步驟S23流程圖;
圖3示出根據(jù)本申請(qǐng)另一個(gè)方面的主數(shù)據(jù)庫端以及備用數(shù)據(jù)庫端配合實(shí)現(xiàn)的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的設(shè)備示意圖;
圖4示出根據(jù)本申請(qǐng)另一個(gè)優(yōu)選實(shí)例的一種用于實(shí)現(xiàn)主備同步模式下 事務(wù)提交的設(shè)備中日志補(bǔ)全裝置示意圖;
圖5示出根據(jù)本申請(qǐng)另一個(gè)優(yōu)選實(shí)例的主備同步模式下事務(wù)提交示意圖。
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)描述。
在本申請(qǐng)一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
圖1示出根據(jù)本申請(qǐng)一個(gè)方面的主數(shù)據(jù)庫端以及備用數(shù)據(jù)庫端配合實(shí)現(xiàn)的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的方法流程圖。其中,所述主數(shù)據(jù)庫端設(shè)備包括步驟S11、步驟S12、步驟S13以及步驟S14;所述備用數(shù)據(jù)庫端包括步驟S21、步驟S22、步驟S23以及步驟S24。
其中,在步驟S11中主數(shù)據(jù)庫端設(shè)備當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日 志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫;在步驟S21中備用數(shù)據(jù)庫端設(shè)備接收主數(shù)據(jù)庫發(fā)送事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào);在步驟S12中主數(shù)據(jù)庫端設(shè)備在所述主數(shù)據(jù)庫中執(zhí)行所述事務(wù)的事務(wù)提交操作;在步驟S13中主數(shù)據(jù)庫端設(shè)備檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息;在步驟S14中主數(shù)據(jù)庫端設(shè)備當(dāng)所述備用數(shù)據(jù)庫已接收所述事務(wù)對(duì)應(yīng)的在先日志信息,向所述用戶發(fā)送所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)提交完成通知;在步驟S22中備用數(shù)據(jù)庫端設(shè)備當(dāng)檢測到對(duì)應(yīng)主數(shù)據(jù)庫異常,將備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫,并在提供服務(wù)前,執(zhí)行以下操作:在步驟S23中備用數(shù)據(jù)庫端設(shè)備對(duì)于所述新的主數(shù)據(jù)庫中的待補(bǔ)事務(wù),重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息;在步驟S24中備用數(shù)據(jù)庫端設(shè)備根據(jù)補(bǔ)全后的所述日志信息對(duì)所述新的主數(shù)據(jù)庫執(zhí)行回放操作,以使數(shù)據(jù)庫恢復(fù)一致。
具體地,在步驟S11中主數(shù)據(jù)庫端設(shè)備當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫。其中,所述用戶的事務(wù)提交請(qǐng)求是指將數(shù)據(jù)庫事務(wù)執(zhí)行完后進(jìn)行提交的操作,在大部分?jǐn)?shù)據(jù)庫中為一個(gè)commit語句,如圖5中事務(wù)T1所接收到commit命令。所述事務(wù)號(hào)與所述用戶的事務(wù)請(qǐng)求所對(duì)應(yīng)的事務(wù)號(hào)為同一個(gè)事務(wù)號(hào),例如圖5中所示,事務(wù)T1接收到commit命令后發(fā)送事務(wù)T1所對(duì)應(yīng)的事務(wù)號(hào)到主數(shù)據(jù)庫對(duì)應(yīng)的備用數(shù)據(jù)庫,在此,圖5中的主數(shù)據(jù)庫服務(wù)器對(duì)應(yīng)主數(shù)據(jù)庫,從數(shù)據(jù)庫服務(wù)器對(duì)應(yīng)備用數(shù)據(jù)庫。所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)是指所述事務(wù)的在接收到用戶事務(wù)提交請(qǐng)求之前最后日志的日志號(hào),不包括用戶事務(wù)提交請(qǐng)求所對(duì)應(yīng)的日志號(hào),例如圖5中所示,事務(wù)T1發(fā)送除commit命令以外的最后日志號(hào)。在此,所述對(duì)應(yīng)備用數(shù)據(jù)庫是指與主數(shù)據(jù)庫在同一主備同步模式下的備用數(shù)據(jù)庫。所述發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)可以采用單獨(dú)的連接異步進(jìn)行發(fā)送,所述發(fā)送的方式包括數(shù)據(jù)庫主備同步模式下的正常發(fā)送方式,或采用單獨(dú)的數(shù)據(jù)連接進(jìn)行異步發(fā)送但不限于此。在發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的同時(shí)或 者之前,主數(shù)據(jù)庫仍然正常進(jìn)行對(duì)所述用戶的事務(wù)提交請(qǐng)求之前的日志向備用數(shù)據(jù)庫的發(fā)送,例如圖5所示,主數(shù)據(jù)庫正常發(fā)送事務(wù)T1除commit命令以外的其他日志,在此,發(fā)送除commit命令以外的其他日志與發(fā)送事務(wù)號(hào)、發(fā)送除commit命令以外的最后日志號(hào)不一定具有相互依賴關(guān)系,即兩者可以是異步進(jìn)行發(fā)送的。當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫使得備用數(shù)據(jù)庫優(yōu)先保障事務(wù)的主體日志以及相關(guān)信息的備份,從而在主數(shù)據(jù)庫故障后可據(jù)此及時(shí)對(duì)事務(wù)數(shù)據(jù)進(jìn)行補(bǔ)全和回放。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述發(fā)送對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的發(fā)送對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟S21中備用數(shù)據(jù)庫端設(shè)備接收主數(shù)據(jù)庫發(fā)送事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)。即備用數(shù)據(jù)接收主數(shù)據(jù)庫所發(fā)送事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),例如圖5中所示,箭頭的方向指向備用數(shù)據(jù)庫表示備用數(shù)據(jù)庫在接收所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)。在此,接收所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式包括但不限于可以采用單獨(dú)的連接異步進(jìn)行接收,所述接收的方式包括數(shù)據(jù)庫主備同步模式下的正常接收方式,或采用單獨(dú)的數(shù)據(jù)連接進(jìn)行異步接收。且備用數(shù)據(jù)庫仍然正常對(duì)所述用戶的事務(wù)提交請(qǐng)求之前的日志進(jìn)行接收,例如圖5所示,備用數(shù)據(jù)庫正常接收事務(wù)T1除commit命令以外的其他日志,在此,接收除commit命令以外的其他日志與接收事務(wù)號(hào)、接收除commit命令以外的最后日志號(hào)不一定具有相互依賴關(guān)系,即兩者可以是異步進(jìn)行接收的。備用數(shù)據(jù)庫接收對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)使得備用數(shù)據(jù)庫優(yōu)先保障事務(wù)的主體日志以及相關(guān)信息的備份,從而在主數(shù)據(jù)庫故障后可據(jù)此及時(shí)對(duì)事務(wù)數(shù)據(jù)進(jìn)行補(bǔ)全和回放。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述接收對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的接收對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟S12中主數(shù)據(jù)庫端設(shè)備在所述主數(shù)據(jù)庫中執(zhí)行所述事務(wù)的事務(wù)提交操作。其中,所述事務(wù)的事務(wù)提交操作是指所述用戶的事務(wù)提交請(qǐng)求所對(duì)應(yīng)的相關(guān)操作,例如圖5中commit命令對(duì)應(yīng)的事務(wù)提交操作,生成commit語句對(duì)應(yīng)的日志以及將日志寫入磁盤等操作,但不限于此,所有所述用戶的事務(wù)提交請(qǐng)求所對(duì)應(yīng)的相關(guān)操作均包括在內(nèi)。在此,執(zhí)行所述事務(wù)的事務(wù)提交操作后向備用數(shù)據(jù)庫發(fā)送相應(yīng)的執(zhí)行所述事務(wù)提交操作的對(duì)應(yīng)的日志,所述日志的發(fā)送與所述日志信息的發(fā)送是并行的。且數(shù)據(jù)庫執(zhí)行所述事務(wù)的事務(wù)提交操作與前文所述將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫、發(fā)送用戶的事務(wù)提交請(qǐng)求之前的日志是并行的,即不一定需要等待主數(shù)據(jù)庫完成提交才發(fā)生提交信息到備庫,例如圖5舉例,在發(fā)送除commit命令以外的其他日志與發(fā)送事務(wù)號(hào)、發(fā)送除commit命令以外的最后日志號(hào)的同時(shí)執(zhí)行commit語句。因?yàn)閳?zhí)行所述事務(wù)的事務(wù)提交操作與前文所述將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫、發(fā)送用戶的事務(wù)提交請(qǐng)求之前的日志的操作均會(huì)因?yàn)閷憯?shù)據(jù)、操作磁盤以及發(fā)送時(shí)的網(wǎng)絡(luò)延遲導(dǎo)致操作較為耗時(shí),此處并行可以大幅度提高所述用戶的事務(wù)提交請(qǐng)求所對(duì)應(yīng)操作的速度。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述執(zhí)行所述事務(wù)的事務(wù)提交操作的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的執(zhí)行所述事務(wù)的事務(wù)提交操作的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
選優(yōu)地,在步驟S12中主數(shù)據(jù)庫端設(shè)備生成所述事務(wù)提交操作對(duì)應(yīng)的日志信息,并存儲(chǔ)所述日志信息是指根據(jù)所述用戶的事務(wù)提交請(qǐng)求執(zhí)行所述事務(wù)的事務(wù)提交操作,其中包括生成所述事務(wù)提交操作如commit命令等提交語 句對(duì)應(yīng)的日志信息,并在例如磁盤等存儲(chǔ)設(shè)備中存儲(chǔ)所述日志信息。從而使得寫數(shù)據(jù)、操作磁盤等相對(duì)較耗時(shí)的操作與前文所述的主數(shù)據(jù)庫將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫的操作并行,提升數(shù)據(jù)庫事務(wù)的提交效率。
接著,在步驟S13中主數(shù)據(jù)庫端設(shè)備檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息。是指主數(shù)據(jù)庫檢測上文所述的發(fā)送至備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),以及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息是否被備用數(shù)據(jù)庫接收完成。其中,所述在先日志信息包括發(fā)送至備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),以及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息,如圖5中舉例,即主數(shù)據(jù)庫檢測備考是否已接收除commit命令以外的其他日志,是否已接受所述commit命令所在事務(wù)的事務(wù)號(hào),是否已經(jīng)接收除commit命令以外的最后日志號(hào)。所述檢測操作包括但不限于主數(shù)據(jù)庫周期檢測備用數(shù)據(jù)庫是否已經(jīng)接受完成,或主數(shù)據(jù)庫發(fā)送完成即向主數(shù)據(jù)庫反饋發(fā)送完成,或備用數(shù)據(jù)庫接收完成即向主數(shù)據(jù)庫,反饋接收完成通過所述檢測操作可以確認(rèn)是否可以通知用戶所述事務(wù)提交請(qǐng)求已完成。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
在此,所述事務(wù)對(duì)應(yīng)的在先日志信息包括:所述事務(wù)號(hào)及所述日志號(hào);所述事務(wù)在所述日志號(hào)之前的日志信息。其中,所述事務(wù)號(hào)及所示日志號(hào)是指對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),即為如圖5示例中的commit命令所在事務(wù)的事務(wù)號(hào)以及除commit命令以外的最后日志號(hào)。所述事務(wù)在所述日志號(hào)之前的日志信息是指所述事務(wù)在接收所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息以及相關(guān)日志信息,其中,日志信息是指需要備份的所述事務(wù)在接收所述事務(wù) 提交請(qǐng)求前的最新日志以及相關(guān)日志信息的相關(guān)信息。
優(yōu)選地,在步驟S13中主數(shù)據(jù)庫端設(shè)備接收所述備用數(shù)據(jù)庫發(fā)送的反饋信息,其中,所述反饋信息表示所述備用數(shù)據(jù)庫已接收所述事務(wù)對(duì)應(yīng)的在先日志信息。是指檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方法為接收所述備用數(shù)據(jù)庫發(fā)送的反饋信息,所述反饋信息中包括備用數(shù)據(jù)庫是否接收完成所述事務(wù)對(duì)應(yīng)的在先日志信息,例如圖5中所示,主數(shù)據(jù)庫接收日志號(hào)已接受反饋。其中,所述反饋信息包括但不限于周期性反饋,或依據(jù)一定的條件例如完成后發(fā)送反饋進(jìn)行反饋,所述反饋信息的作用在于幫助主數(shù)據(jù)庫及時(shí)獲得備用數(shù)據(jù)庫對(duì)所述事務(wù)對(duì)應(yīng)的在先日志信息的接收情況,從而確認(rèn)是否可以通知用戶所述事務(wù)提交請(qǐng)求已完成。
進(jìn)一步地,所述方法包括步驟S25(未示出),在步驟S25中備用數(shù)據(jù)庫端設(shè)備向所述主數(shù)據(jù)庫發(fā)送確認(rèn)已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的反饋信息。是指所述備用數(shù)據(jù)庫向主數(shù)據(jù)庫發(fā)送反饋信息使得主數(shù)據(jù)庫獲得所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的情況,所述反饋信息中包括備用數(shù)據(jù)庫是否接收完成所述事務(wù)對(duì)應(yīng)的在先日志信息。其中,所述反饋信息包括但不限于周期性反饋,或依據(jù)一定的條件例如完成后發(fā)送反饋進(jìn)行反饋,所述反饋信息的作用在于幫助主數(shù)據(jù)庫及時(shí)獲得備用數(shù)據(jù)庫對(duì)所述事務(wù)對(duì)應(yīng)的在先日志信息的接收情況,從而確認(rèn)是否可以通知用戶所述事務(wù)提交請(qǐng)求已完成。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟S14中主數(shù)據(jù)庫端設(shè)備當(dāng)所述備用數(shù)據(jù)庫已接收所述事務(wù)對(duì)應(yīng)的在先日志信息,向所述用戶發(fā)送所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)提交完成通知。即在主數(shù)據(jù)庫確認(rèn)備用數(shù)據(jù)庫已經(jīng)接收完成所述事務(wù)對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),以及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息,此時(shí),所述 事務(wù)提交請(qǐng)求對(duì)應(yīng)的所述事務(wù)的事務(wù)提交操作不一定已執(zhí)行完成,所述事務(wù)提交請(qǐng)求之前的所有信息,包括所述事務(wù)號(hào)、所述日志號(hào)以及日志等若尚未被備用數(shù)據(jù)庫備份,可等待完成后通知用戶所述事務(wù)提交請(qǐng)求操作已完成,因?yàn)闊o須等待最后的事務(wù)提交操作以及對(duì)應(yīng)的日志備份完成,從而節(jié)約了等待最后的事務(wù)提交操作對(duì)應(yīng)的日志提交的時(shí)間,提升數(shù)據(jù)庫事務(wù)提交操作的速度。
接著,在步驟S22中備用數(shù)據(jù)庫端設(shè)備當(dāng)檢測到對(duì)應(yīng)主數(shù)據(jù)庫異常,將備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫。即在數(shù)據(jù)庫主備同步模式下當(dāng)滿足主備切換條件后,例如連接主數(shù)據(jù)庫執(zhí)行更新心跳表的操作,如果超時(shí)判斷為主庫異常,發(fā)生了主數(shù)據(jù)庫故障或宕機(jī)無法正常提供服務(wù)的情況但不限于此,切換的方式包括但不限于斷開主數(shù)據(jù)庫服務(wù),使用備用數(shù)據(jù)庫取代主數(shù)據(jù)庫與相關(guān)應(yīng)用或服務(wù)建立連接。切換過程中,備用數(shù)據(jù)庫可遍歷尚未應(yīng)用的所有日志,進(jìn)行回訪,如果有些事務(wù)缺少提交操作,則會(huì)在回訪過程中處于未提交狀態(tài)?;卦L完成后,檢查所有事務(wù)狀態(tài),未提交的事務(wù)則為可能需要補(bǔ)全提交操作的事務(wù)。
其中,所述備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫后,在提供服務(wù)前,在步驟S23以及步驟S24中備用數(shù)據(jù)庫端設(shè)備執(zhí)行以下操作:
其中,在步驟S23中備用數(shù)據(jù)庫端設(shè)備對(duì)于所述新的主數(shù)據(jù)庫中的待補(bǔ)事務(wù),重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息。因?yàn)樵谥鲾?shù)據(jù)庫通知用戶已完成事務(wù)提交請(qǐng)求所對(duì)應(yīng)的操作之前,事務(wù)提交請(qǐng)求對(duì)應(yīng)的所述事務(wù)的事務(wù)提交操作主數(shù)據(jù)庫已執(zhí)行完成,且所述事務(wù)提交請(qǐng)求之前的所有信息,包括所述事務(wù)號(hào)、所述日志號(hào)以及日志等均被備用數(shù)據(jù)庫備份,因此保障當(dāng)主數(shù)據(jù)庫通知用戶事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作完成時(shí),所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)的主體日志均已發(fā)送至備用數(shù)據(jù)庫,但由于未等待事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作日志同步完成即可發(fā)出所述通知,所以有可能備用數(shù)據(jù)庫并未接收到所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作日志,此時(shí)將備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫會(huì)出現(xiàn)相較于原本的主數(shù)據(jù)庫而言缺失了所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作日志,因此,所述備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫后,在提供服務(wù)前需要對(duì)所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事 務(wù)提交請(qǐng)求前的最新日志的日志號(hào)以及所述事務(wù)對(duì)應(yīng)的所有日志進(jìn)行檢測,若檢測到所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),但未檢測到事務(wù)提交操作對(duì)應(yīng)的日志,則從日志號(hào)和事務(wù)號(hào)重新生成一條事務(wù)提交請(qǐng)求放入事務(wù)對(duì)應(yīng)的日志中,以補(bǔ)全事務(wù)對(duì)應(yīng)的日志。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述根據(jù)所述日志號(hào)和事務(wù)號(hào)補(bǔ)全日志的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的根據(jù)所述日志號(hào)和事務(wù)號(hào)補(bǔ)全日志的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟S24中備用數(shù)據(jù)庫端設(shè)備根據(jù)補(bǔ)全后的所述日志信息對(duì)所述新的主數(shù)據(jù)庫執(zhí)行回放操作,以使數(shù)據(jù)庫恢復(fù)一致。即根據(jù)所述日志信息中的相關(guān)操作信息,對(duì)新的主數(shù)據(jù)庫中尚未備份的部分進(jìn)行回放,使得在日志中所記錄的曾經(jīng)在主數(shù)據(jù)庫做出的數(shù)據(jù)變動(dòng)且未在新的主數(shù)據(jù)庫同步變動(dòng)的部分可以進(jìn)行同步變動(dòng),例如,所述日志信息包括了事務(wù)提交請(qǐng)求,但備用數(shù)據(jù)庫中尚未進(jìn)行提交,因此,根據(jù)所述日志信息中的事務(wù)提交請(qǐng)求對(duì)新的主數(shù)據(jù)庫中的所述相同事務(wù)進(jìn)行提交,從而補(bǔ)全缺失的數(shù)據(jù)信息,使得數(shù)據(jù)庫數(shù)據(jù)恢復(fù)到之前主數(shù)據(jù)庫的狀態(tài)保障無數(shù)據(jù)丟失。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述使得數(shù)據(jù)庫恢復(fù)一致的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的使得數(shù)據(jù)庫恢復(fù)一致的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
圖2示出根據(jù)本申請(qǐng)另一個(gè)優(yōu)選實(shí)例的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的方法中的步驟S23流程圖。所述日志補(bǔ)全裝置包括步驟S231以及步驟S232。
其中,在步驟S231中備用數(shù)據(jù)庫端設(shè)備根據(jù)所述新的主數(shù)據(jù)庫中的日志號(hào)信息與事務(wù)號(hào)信息,確定待補(bǔ)事務(wù),其中,所述待補(bǔ)事務(wù)已被提交但對(duì)應(yīng)日志尚未發(fā)送到所述新的主數(shù)據(jù)庫;在步驟S232中備用數(shù)據(jù)庫端設(shè)備根據(jù)所述待補(bǔ)事務(wù)的日志號(hào)與事務(wù)號(hào)重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求,并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息。
具體地,在步驟S231中備用數(shù)據(jù)庫端設(shè)備根據(jù)所述新的主數(shù)據(jù)庫中的日志號(hào)信息與事務(wù)號(hào)信息,確定待補(bǔ)事務(wù),其中,所述待補(bǔ)事務(wù)已被提交但對(duì) 應(yīng)日志尚未發(fā)送到所述新的主數(shù)據(jù)庫。即根據(jù)所述的新的主數(shù)據(jù)庫中的日志號(hào)信息與事務(wù)號(hào)信息確定新的主數(shù)據(jù)庫中是否有缺失的需要進(jìn)行重新補(bǔ)全的日志信息。例如,所述備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫后,在提供服務(wù)前對(duì)所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)以及所述事務(wù)對(duì)應(yīng)的所有日志進(jìn)行檢測,因?yàn)橹暗闹鲾?shù)據(jù)庫在接到用戶的事務(wù)提交請(qǐng)求后,會(huì)立即發(fā)送對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)至備用數(shù)據(jù)庫也就是現(xiàn)在的新的主數(shù)據(jù)庫,因此若檢測到對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),則判定之前的主數(shù)據(jù)庫已接受到用戶的事務(wù)提交請(qǐng)求,繼續(xù)檢測事務(wù)提交操作對(duì)應(yīng)的日志,若未檢測到則表明所述待補(bǔ)事務(wù)已被提交但對(duì)應(yīng)日志尚未發(fā)送到所述新的主數(shù)據(jù)庫,從而確定待補(bǔ)事務(wù)避免出現(xiàn)新的主數(shù)據(jù)庫不一致導(dǎo)致的數(shù)據(jù)缺失。其中,確定待補(bǔ)事務(wù)的方法還包括備用數(shù)據(jù)庫遍歷尚未應(yīng)用的所有日志,進(jìn)行回訪,如果有些事務(wù)缺少提交操作,則會(huì)在回訪過程中處于未提交狀態(tài),回訪完成后,檢查所有事務(wù)狀態(tài),未提交的事務(wù)則為可能需要補(bǔ)全提交操作的事務(wù)。
接著,在步驟S232中備用數(shù)據(jù)庫端設(shè)備根據(jù)所述待補(bǔ)事務(wù)的日志號(hào)與事務(wù)號(hào)重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求,并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息。因?yàn)樗笔У氖亲詈蟮氖聞?wù)提交請(qǐng)求所對(duì)應(yīng)的日志,因此從日志號(hào)和事務(wù)號(hào)重新生成一條事務(wù)提交請(qǐng)求,例如重新生成一條commit語句對(duì)應(yīng)的日志放入事務(wù)對(duì)應(yīng)的日志中,即可補(bǔ)全事務(wù)對(duì)應(yīng)的日志。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述確定待補(bǔ)事務(wù)以及補(bǔ)全日志信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的確定待補(bǔ)事務(wù)以及補(bǔ)全日志信息的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述開發(fā)項(xiàng)目中開發(fā)授權(quán)的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的開發(fā)項(xiàng)目中開發(fā)授權(quán)的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
圖3示出根據(jù)本申請(qǐng)另一個(gè)方面的主數(shù)據(jù)庫端以及備用數(shù)據(jù)庫端配合實(shí)現(xiàn)的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的設(shè)備示意圖。其中,所述 主數(shù)據(jù)庫端設(shè)備包括發(fā)送裝置111、執(zhí)行裝置112、檢測裝置113以及通知裝置114;所述備用數(shù)據(jù)庫端包括接受裝置121、主備切換裝置122、日志補(bǔ)全裝置123以及數(shù)據(jù)恢復(fù)裝置124。
其中,發(fā)送裝置111當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫;接受裝置121接收主數(shù)據(jù)庫發(fā)送的事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào);執(zhí)行裝置112在所述主數(shù)據(jù)庫中執(zhí)行所述事務(wù)的事務(wù)提交操作;檢測裝置113檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息;通知裝置114當(dāng)所述備用數(shù)據(jù)庫已接收所述事務(wù)對(duì)應(yīng)的在先日志信息,向所述用戶發(fā)送所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)提交完成通知;主備切換裝置122當(dāng)檢測到對(duì)應(yīng)主數(shù)據(jù)庫異常,將備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫,并在提供服務(wù)前,執(zhí)行以下操作:日志補(bǔ)全裝置123對(duì)于所述新的主數(shù)據(jù)庫中的待補(bǔ)事務(wù),重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息;數(shù)據(jù)恢復(fù)裝置124根據(jù)補(bǔ)全后的所述日志信息對(duì)所述新的主數(shù)據(jù)庫執(zhí)行回放操作,以使數(shù)據(jù)庫恢復(fù)一致。
具體地,所述主數(shù)據(jù)庫端中發(fā)送裝置111當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫。其中,所述用戶的事務(wù)提交請(qǐng)求是指將數(shù)據(jù)庫事務(wù)執(zhí)行完后進(jìn)行提交的操作,在大部分?jǐn)?shù)據(jù)庫中為一個(gè)commit語句,如圖5中事務(wù)T1所接收到commit命令。所述事務(wù)號(hào)與所述用戶的事務(wù)請(qǐng)求所對(duì)應(yīng)的事務(wù)號(hào)為同一個(gè)事務(wù)號(hào),例如圖5中所示,事務(wù)T1接收到commit命令后發(fā)送事務(wù)T1所對(duì)應(yīng)的事務(wù)號(hào)到主數(shù)據(jù)庫對(duì)應(yīng)的備用數(shù)據(jù)庫,在此,圖5中的主數(shù)據(jù)庫服務(wù)器對(duì)應(yīng)主數(shù)據(jù)庫,從數(shù)據(jù)庫服務(wù)器對(duì)應(yīng)備用數(shù)據(jù)庫。所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)是指所述事務(wù)的在接收到用戶事務(wù)提交請(qǐng)求之前最后日志的日志號(hào),不包括用戶事務(wù)提交請(qǐng)求所對(duì)應(yīng)的日志號(hào),例如圖5中所示,事務(wù)T1發(fā)送除commit命令以外的最后日志號(hào)。在此,所述對(duì)應(yīng)備用數(shù)據(jù)庫是指與主數(shù)據(jù)庫在同一主備同步模式下的備用數(shù)據(jù)庫。所述發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所 述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)可以采用單獨(dú)的連接異步進(jìn)行發(fā)送,所述發(fā)送的方式包括數(shù)據(jù)庫主備同步模式下的正常發(fā)送方式,或采用單獨(dú)的數(shù)據(jù)連接進(jìn)行異步發(fā)送但不限于此。在發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的同時(shí)或者之前,主數(shù)據(jù)庫仍然正常進(jìn)行對(duì)所述用戶的事務(wù)提交請(qǐng)求之前的日志向備用數(shù)據(jù)庫的發(fā)送,例如圖5所示,主數(shù)據(jù)庫正常發(fā)送事務(wù)T1除commit命令以外的其他日志,在此,發(fā)送除commit命令以外的其他日志與發(fā)送事務(wù)號(hào)、發(fā)送除commit命令以外的最后日志號(hào)不一定具有相互依賴關(guān)系,即兩者可以是異步進(jìn)行發(fā)送的。當(dāng)主數(shù)據(jù)庫接收到用戶的事務(wù)提交請(qǐng)求,將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫使得備用數(shù)據(jù)庫優(yōu)先保障事務(wù)的主體日志以及相關(guān)信息的備份,從而在主數(shù)據(jù)庫故障后可據(jù)此及時(shí)對(duì)事務(wù)數(shù)據(jù)進(jìn)行補(bǔ)全和回放。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述發(fā)送對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的發(fā)送對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,所述備用數(shù)據(jù)庫端中接受裝置121接收主數(shù)據(jù)庫發(fā)送事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)。即備用數(shù)據(jù)接收主數(shù)據(jù)庫所發(fā)送事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),例如圖5中所示,箭頭的方向指向備用數(shù)據(jù)庫表示備用數(shù)據(jù)庫在接收所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)。在此,接收所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式包括但不限于可以采用單獨(dú)的連接異步進(jìn)行接收,所述接收的方式包括數(shù)據(jù)庫主備同步模式下的正常接收方式,或采用單獨(dú)的數(shù)據(jù)連接進(jìn)行異步接收。且備用數(shù)據(jù)庫仍然正常對(duì)所述用戶的事務(wù)提交請(qǐng)求之前的日志進(jìn)行接收,例如圖5所示,備用數(shù)據(jù)庫正常接收事務(wù)T1除commit命令以外的其他日志,在此,接收除commit命令以外的其他日志與接收事務(wù)號(hào)、接收除commit命令以外的最后日志號(hào)不一定 具有相互依賴關(guān)系,即兩者可以是異步進(jìn)行接收的。備用數(shù)據(jù)庫接收對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)使得備用數(shù)據(jù)庫優(yōu)先保障事務(wù)的主體日志以及相關(guān)信息的備份,從而在主數(shù)據(jù)庫故障后可據(jù)此及時(shí)對(duì)事務(wù)數(shù)據(jù)進(jìn)行補(bǔ)全和回放。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述接收對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的接收對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,所述主數(shù)據(jù)庫端中執(zhí)行裝置112在所述主數(shù)據(jù)庫中執(zhí)行所述事務(wù)的事務(wù)提交操作。其中,所述事務(wù)的事務(wù)提交操作是指所述用戶的事務(wù)提交請(qǐng)求所對(duì)應(yīng)的相關(guān)操作,例如圖5中commit命令對(duì)應(yīng)的事務(wù)提交操作,生成commit語句對(duì)應(yīng)的日志以及將日志寫入磁盤等操作,但不限于此,所有所述用戶的事務(wù)提交請(qǐng)求所對(duì)應(yīng)的相關(guān)操作均包括在內(nèi)。在此,執(zhí)行所述事務(wù)的事務(wù)提交操作后向備用數(shù)據(jù)庫發(fā)送相應(yīng)的執(zhí)行所述事務(wù)提交操作的對(duì)應(yīng)的日志,所述日志的發(fā)送與所述日志信息的發(fā)送是并行的。且數(shù)據(jù)庫執(zhí)行所述事務(wù)的事務(wù)提交操作與前文所述將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫、發(fā)送用戶的事務(wù)提交請(qǐng)求之前的日志是并行的,即不一定需要等待主數(shù)據(jù)庫完成提交才發(fā)生提交信息到備庫,例如圖5舉例,在發(fā)送除commit命令以外的其他日志與發(fā)送事務(wù)號(hào)、發(fā)送除commit命令以外的最后日志號(hào)的同時(shí)執(zhí)行commit語句。因?yàn)閳?zhí)行所述事務(wù)的事務(wù)提交操作與前文所述將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫、發(fā)送用戶的事務(wù)提交請(qǐng)求之前的日志的操作均會(huì)因?yàn)閷憯?shù)據(jù)、操作磁盤以及發(fā)送時(shí)的網(wǎng)絡(luò)延遲導(dǎo)致操作較為耗時(shí),此處并行可以大幅度提高所述用戶的事務(wù)提交請(qǐng)求所對(duì)應(yīng)操作的速度。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述執(zhí)行所述事務(wù)的事務(wù)提交操作的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的執(zhí)行所述事務(wù)的事務(wù)提交操作的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方 式包含于此。
選優(yōu)地,執(zhí)行裝置112生成所述事務(wù)提交操作對(duì)應(yīng)的日志信息,并存儲(chǔ)所述日志信息是指根據(jù)所述用戶的事務(wù)提交請(qǐng)求執(zhí)行所述事務(wù)的事務(wù)提交操作,其中包括生成所述事務(wù)提交操作如commit命令等提交語句對(duì)應(yīng)的日志信息,并在例如磁盤等存儲(chǔ)設(shè)備中存儲(chǔ)所述日志信息。從而使得寫數(shù)據(jù)、操作磁盤等相對(duì)較耗時(shí)的操作與前文所述的主數(shù)據(jù)庫將對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)發(fā)送至對(duì)應(yīng)備用數(shù)據(jù)庫的操作并行,提升數(shù)據(jù)庫事務(wù)的提交效率。
接著,所述主數(shù)據(jù)庫端中檢測裝置113檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息。是指主數(shù)據(jù)庫檢測上文所述的發(fā)送至備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),以及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息是否被備用數(shù)據(jù)庫接收完成。其中,所述在先日志信息包括發(fā)送至備用數(shù)據(jù)庫的對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),以及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息,如圖5中舉例,即主數(shù)據(jù)庫檢測備考是否已接收除commit命令以外的其他日志,是否已接受所述commit命令所在事務(wù)的事務(wù)號(hào),是否已經(jīng)接收除commit命令以外的最后日志號(hào)。所述檢測操作包括但不限于主數(shù)據(jù)庫周期檢測備用數(shù)據(jù)庫是否已經(jīng)接受完成,或主數(shù)據(jù)庫發(fā)送完成即向主數(shù)據(jù)庫反饋發(fā)送完成,或備用數(shù)據(jù)庫接收完成即向主數(shù)據(jù)庫,反饋接收完成通過所述檢測操作可以確認(rèn)是否可以通知用戶所述事務(wù)提交請(qǐng)求已完成。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
在此,所述事務(wù)對(duì)應(yīng)的在先日志信息包括:所述事務(wù)號(hào)及所述日志號(hào);所述事務(wù)在所述日志號(hào)之前的日志信息。其中,所述事務(wù)號(hào)及所示日志號(hào)是指對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日 志號(hào),即為如圖5示例中的commit命令所在事務(wù)的事務(wù)號(hào)以及除commit命令以外的最后日志號(hào)。所述事務(wù)在所述日志號(hào)之前的日志信息是指所述事務(wù)在接收所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息以及相關(guān)日志信息,其中,日志信息是指需要備份的所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息的相關(guān)信息。
優(yōu)選地,檢測裝置113接收所述備用數(shù)據(jù)庫發(fā)送的反饋信息,其中,所述反饋信息表示所述備用數(shù)據(jù)庫已接收所述事務(wù)對(duì)應(yīng)的在先日志信息。是指檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方法為接收所述備用數(shù)據(jù)庫發(fā)送的反饋信息,所述反饋信息中包括備用數(shù)據(jù)庫是否接收完成所述事務(wù)對(duì)應(yīng)的在先日志信息,例如圖5中所示,主數(shù)據(jù)庫接收日志號(hào)已接受反饋。其中,所述反饋信息包括但不限于周期性反饋,或依據(jù)一定的條件例如完成后發(fā)送反饋進(jìn)行反饋,所述反饋信息的作用在于幫助主數(shù)據(jù)庫及時(shí)獲得備用數(shù)據(jù)庫對(duì)所述事務(wù)對(duì)應(yīng)的在先日志信息的接收情況,從而確認(rèn)是否可以通知用戶所述事務(wù)提交請(qǐng)求已完成。
進(jìn)一步地,所述備用數(shù)據(jù)庫端中包括反饋裝置125(未示出),所述反饋裝置125向所述主數(shù)據(jù)庫發(fā)送確認(rèn)已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的反饋信息。是指所述備用數(shù)據(jù)庫向主數(shù)據(jù)庫發(fā)送反饋信息使得主數(shù)據(jù)庫獲得所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的情況,所述反饋信息中包括備用數(shù)據(jù)庫是否接收完成所述事務(wù)對(duì)應(yīng)的在先日志信息。其中,所述反饋信息包括但不限于周期性反饋,或依據(jù)一定的條件例如完成后發(fā)送反饋進(jìn)行反饋,所述反饋信息的作用在于幫助主數(shù)據(jù)庫及時(shí)獲得備用數(shù)據(jù)庫對(duì)所述事務(wù)對(duì)應(yīng)的在先日志信息的接收情況,從而確認(rèn)是否可以通知用戶所述事務(wù)提交請(qǐng)求已完成。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的檢測所述備用數(shù)據(jù)庫是否已接收所述事務(wù)對(duì)應(yīng)的在先日志信息的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,所述主數(shù)據(jù)庫端中通知裝置114當(dāng)所述備用數(shù)據(jù)庫已接收所述事 務(wù)對(duì)應(yīng)的在先日志信息,向所述用戶發(fā)送所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)提交完成通知。即在主數(shù)據(jù)庫確認(rèn)備用數(shù)據(jù)庫已經(jīng)接收完成所述事務(wù)對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),以及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志以及相關(guān)日志信息,此時(shí),所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的所述事務(wù)的事務(wù)提交操作不一定已執(zhí)行完成,所述事務(wù)提交請(qǐng)求之前的所有信息,包括所述事務(wù)號(hào)、所述日志號(hào)以及日志等若尚未被備用數(shù)據(jù)庫備份,可等待完成后通知用戶所述事務(wù)提交請(qǐng)求操作已完成,因?yàn)闊o須等待最后的事務(wù)提交操作以及對(duì)應(yīng)的日志備份完成,從而節(jié)約了等待最后的事務(wù)提交操作對(duì)應(yīng)的日志提交的時(shí)間,提升數(shù)據(jù)庫事務(wù)提交操作的速度。
接著,所述備用數(shù)據(jù)庫端中主備切換裝置122當(dāng)檢測到對(duì)應(yīng)主數(shù)據(jù)庫異常,將備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫。即在數(shù)據(jù)庫主備同步模式下當(dāng)滿足主備切換條件后,例如連接主數(shù)據(jù)庫執(zhí)行更新心跳表的操作,如果超時(shí)判斷為主庫異常,發(fā)生了主數(shù)據(jù)庫故障或宕機(jī)無法正常提供服務(wù)的情況但不限于此,切換的方式包括但不限于斷開主數(shù)據(jù)庫服務(wù),使用備用數(shù)據(jù)庫取代主數(shù)據(jù)庫與相關(guān)應(yīng)用或服務(wù)建立連接。切換過程中,備用數(shù)據(jù)庫可遍歷尚未應(yīng)用的所有日志,進(jìn)行回訪,如果有些事務(wù)缺少提交操作,則會(huì)在回訪過程中處于未提交狀態(tài)?;卦L完成后,檢查所有事務(wù)狀態(tài),未提交的事務(wù)則為可能需要補(bǔ)全提交操作的事務(wù)。
其中,所述備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫后,在提供服務(wù)前,日志補(bǔ)全裝置123以及數(shù)據(jù)恢復(fù)裝置124執(zhí)行以下操作:
其中,日志補(bǔ)全裝置123對(duì)于所述新的主數(shù)據(jù)庫中的待補(bǔ)事務(wù),重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息。因?yàn)樵谥鲾?shù)據(jù)庫通知用戶已完成事務(wù)提交請(qǐng)求所對(duì)應(yīng)的操作之前,事務(wù)提交請(qǐng)求對(duì)應(yīng)的所述事務(wù)的事務(wù)提交操作主數(shù)據(jù)庫已執(zhí)行完成,且所述事務(wù)提交請(qǐng)求之前的所有信息,包括所述事務(wù)號(hào)、所述日志號(hào)以及日志等均被備用數(shù)據(jù)庫備份,因此保障當(dāng)主數(shù)據(jù)庫通知用戶事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作完成時(shí),所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的事務(wù)的主體日志均已發(fā)送至備用數(shù)據(jù)庫,但由于未等待事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作日志同步完成即可發(fā)出所述通知,所以有可能備 用數(shù)據(jù)庫并未接收到所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作日志,此時(shí)將備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫會(huì)出現(xiàn)相較于原本的主數(shù)據(jù)庫而言缺失了所述事務(wù)提交請(qǐng)求對(duì)應(yīng)的操作日志,因此,所述備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫后,在提供服務(wù)前需要對(duì)所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)以及所述事務(wù)對(duì)應(yīng)的所有日志進(jìn)行檢測,若檢測到所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),但未檢測到事務(wù)提交操作對(duì)應(yīng)的日志,則從日志號(hào)和事務(wù)號(hào)重新生成一條事務(wù)提交請(qǐng)求放入事務(wù)對(duì)應(yīng)的日志中,以補(bǔ)全事務(wù)對(duì)應(yīng)的日志。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述根據(jù)所述日志號(hào)和事務(wù)號(hào)補(bǔ)全日志的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的根據(jù)所述日志號(hào)和事務(wù)號(hào)補(bǔ)全日志的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,數(shù)據(jù)恢復(fù)裝置124根據(jù)補(bǔ)全后的所述日志信息對(duì)所述新的主數(shù)據(jù)庫執(zhí)行回放操作,以使數(shù)據(jù)庫恢復(fù)一致。即根據(jù)所述日志信息中的相關(guān)操作信息,對(duì)新的主數(shù)據(jù)庫中尚未備份的部分進(jìn)行回放,使得在日志中所記錄的曾經(jīng)在主數(shù)據(jù)庫做出的數(shù)據(jù)變動(dòng)且未在新的主數(shù)據(jù)庫同步變動(dòng)的部分可以進(jìn)行同步變動(dòng),例如,所述日志信息包括了事務(wù)提交請(qǐng)求,但備用數(shù)據(jù)庫中尚未進(jìn)行提交,因此,根據(jù)所述日志信息中的事務(wù)提交請(qǐng)求對(duì)新的主數(shù)據(jù)庫中的所述相同事務(wù)進(jìn)行提交,從而補(bǔ)全缺失的數(shù)據(jù)信息,使得數(shù)據(jù)庫數(shù)據(jù)恢復(fù)到之前主數(shù)據(jù)庫的狀態(tài)保障無數(shù)據(jù)丟失。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述使得數(shù)據(jù)庫恢復(fù)一致的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的使得數(shù)據(jù)庫恢復(fù)一致的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
圖4示出根據(jù)本申請(qǐng)另一個(gè)優(yōu)選實(shí)例的一種用于實(shí)現(xiàn)主備同步模式下事務(wù)提交的設(shè)備中日志補(bǔ)全裝置示意圖。所述日志補(bǔ)全裝置包括待補(bǔ)事務(wù)確定單元1231以及日志補(bǔ)全單元1232。
其中,待補(bǔ)事務(wù)確定單元1231根據(jù)所述新的主數(shù)據(jù)庫中的日志號(hào)信息與事務(wù)號(hào)信息,確定待補(bǔ)事務(wù),其中,所述待補(bǔ)事務(wù)已被提交但對(duì)應(yīng)日志尚未發(fā)送到所述新的主數(shù)據(jù)庫;日志補(bǔ)全單元1232根據(jù)所述待補(bǔ)事務(wù)的日志號(hào)與 事務(wù)號(hào)重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求,并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息。
具體地,待補(bǔ)事務(wù)確定單元1231根據(jù)所述新的主數(shù)據(jù)庫中的日志號(hào)信息與事務(wù)號(hào)信息,確定待補(bǔ)事務(wù),其中,所述待補(bǔ)事務(wù)已被提交但對(duì)應(yīng)日志尚未發(fā)送到所述新的主數(shù)據(jù)庫。即根據(jù)所述的新的主數(shù)據(jù)庫中的日志號(hào)信息與事務(wù)號(hào)信息確定新的主數(shù)據(jù)庫中是否有缺失的需要進(jìn)行重新補(bǔ)全的日志信息。例如,所述備用數(shù)據(jù)庫切換為新的主數(shù)據(jù)庫后,在提供服務(wù)前對(duì)所述對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)以及所述事務(wù)對(duì)應(yīng)的所有日志進(jìn)行檢測,因?yàn)橹暗闹鲾?shù)據(jù)庫在接到用戶的事務(wù)提交請(qǐng)求后,會(huì)立即發(fā)送對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào)至備用數(shù)據(jù)庫也就是現(xiàn)在的新的主數(shù)據(jù)庫,因此若檢測到對(duì)應(yīng)事務(wù)的事務(wù)號(hào)及所述事務(wù)在接收所述事務(wù)提交請(qǐng)求前的最新日志的日志號(hào),則判定之前的主數(shù)據(jù)庫已接受到用戶的事務(wù)提交請(qǐng)求,繼續(xù)檢測事務(wù)提交操作對(duì)應(yīng)的日志,若未檢測到則表明所述待補(bǔ)事務(wù)已被提交但對(duì)應(yīng)日志尚未發(fā)送到所述新的主數(shù)據(jù)庫,從而確定待補(bǔ)事務(wù)避免出現(xiàn)新的主數(shù)據(jù)庫不一致導(dǎo)致的數(shù)據(jù)缺失。其中,確定待補(bǔ)事務(wù)的方法還包括備用數(shù)據(jù)庫遍歷尚未應(yīng)用的所有日志,進(jìn)行回訪,如果有些事務(wù)缺少提交操作,則會(huì)在回訪過程中處于未提交狀態(tài),回訪完成后,檢查所有事務(wù)狀態(tài),未提交的事務(wù)則為可能需要補(bǔ)全提交操作的事務(wù)。
接著,日志補(bǔ)全單元1232根據(jù)所述待補(bǔ)事務(wù)的日志號(hào)與事務(wù)號(hào)重新生成對(duì)應(yīng)的事務(wù)提交請(qǐng)求,并執(zhí)行事務(wù)提交操作,以獲得補(bǔ)全后的日志信息。因?yàn)樗笔У氖亲詈蟮氖聞?wù)提交請(qǐng)求所對(duì)應(yīng)的日志,因此從日志號(hào)和事務(wù)號(hào)重新生成一條事務(wù)提交請(qǐng)求,例如重新生成一條commit語句對(duì)應(yīng)的日志放入事務(wù)對(duì)應(yīng)的日志中,即可補(bǔ)全事務(wù)對(duì)應(yīng)的日志。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述確定待補(bǔ)事務(wù)以及補(bǔ)全日志信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的確定待補(bǔ)事務(wù)以及補(bǔ)全日志信息的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述開發(fā)項(xiàng)目中開發(fā)授權(quán)的方式僅為舉例, 其他現(xiàn)有的或今后可能出現(xiàn)的開發(fā)項(xiàng)目中開發(fā)授權(quán)的方式如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)的精神和范圍。這樣,倘若本申請(qǐng)的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。
需要注意的是,本申請(qǐng)可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(ASIC)、通用目的計(jì)算機(jī)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本申請(qǐng)的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請(qǐng)的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤及類似設(shè)備。另外,本申請(qǐng)的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。
另外,本申請(qǐng)的一部分可被應(yīng)用為計(jì)算機(jī)程序產(chǎn)品,例如計(jì)算機(jī)程序指令,當(dāng)其被計(jì)算機(jī)執(zhí)行時(shí),通過該計(jì)算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請(qǐng)的方法和/或技術(shù)方案。而調(diào)用本申請(qǐng)的方法的程序指令,可能被存儲(chǔ)在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過廣播或其他信號(hào)承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲(chǔ)在根據(jù)所述程序指令運(yùn)行的計(jì)算機(jī)設(shè)備的工作存儲(chǔ)器中。在此,根據(jù)本申請(qǐng)的一個(gè)實(shí)施例包括一個(gè)裝置,該裝置包括用于存儲(chǔ)計(jì)算機(jī)程序指令的存儲(chǔ)器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計(jì)算機(jī)程序指令被該處理器執(zhí)行時(shí),觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請(qǐng)的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本申請(qǐng)不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請(qǐng)的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請(qǐng)。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請(qǐng)的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請(qǐng)內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。 裝置權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。