META 對(duì)應(yīng) TSK_META ;CMD_C0MPLETE對(duì)應(yīng)任務(wù)TSK_COMPLETE<XMD_CONTINUE指繼續(xù)執(zhí)行當(dāng)前操作,可當(dāng)作空命令,不做任何處理;CMD_ST0P指中止當(dāng)前操作,用于設(shè)置全局變量global_stop_flag = TRUE,當(dāng)前執(zhí)行操作取到這個(gè)標(biāo)識(shí)后,中止當(dāng)前操作,也不需要相應(yīng)任務(wù)。
[0115]第一判斷單元42,用于判斷備份主進(jìn)程是否讀取到備份子進(jìn)程返回的執(zhí)行操作完成?目息O
[0116]等待單元43,用于若是,確定備份主進(jìn)程讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息時(shí)為在預(yù)設(shè)第一等待時(shí)段內(nèi),確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份沒(méi)有結(jié)束,則所述備份主進(jìn)程順序發(fā)送下一備份階段命令給備份子進(jìn)程;若否,確定備份主進(jìn)程在預(yù)設(shè)第一等待時(shí)段內(nèi)未讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息,則清空已備份數(shù)據(jù)并結(jié)束所述備份子進(jìn)程,
[0117]具體的,判斷備份主進(jìn)程是否讀取到備份子進(jìn)程返回的執(zhí)行操作完成信息,若是,確定備份主進(jìn)程讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息時(shí)為在預(yù)設(shè)第一等待時(shí)段內(nèi),且確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份沒(méi)有結(jié)束,則所述備份主進(jìn)程順序發(fā)送下一備份階段命令給備份子進(jìn)程,其中,備份階段命令是按照數(shù)據(jù)庫(kù)聯(lián)機(jī)備份的操作過(guò)程預(yù)先設(shè)置好順序的,備份主進(jìn)程每收到執(zhí)行操作完成信息,則順序發(fā)送下一備份階段命令給備份子進(jìn)程,確保備份操作按順序進(jìn)行。若否,確定備份主進(jìn)程在預(yù)設(shè)第一等待時(shí)段內(nèi)未讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息,則返回子進(jìn)程故障信息給用戶;清空備份子進(jìn)程已備份的數(shù)據(jù);銷毀備份子進(jìn)程。通過(guò)上述過(guò)程以確保備份的失敗也不會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)異常。
[0118]例如,備份主進(jìn)程和子進(jìn)程之間通過(guò)管道(PIPE)技術(shù)進(jìn)行通訊。備份主進(jìn)程將命令發(fā)送給備份子進(jìn)程后,測(cè)試備份主進(jìn)程是否讀取到備份子進(jìn)程返回的執(zhí)行操作完成信息,即等待備份子進(jìn)程執(zhí)行操作完成信息的反饋;備份子進(jìn)程執(zhí)行一個(gè)階段命令后,將執(zhí)行操作完成信息的反饋通過(guò)管道(PIPE)返回給備份主進(jìn)程,并等待主進(jìn)程的下一命令,若數(shù)據(jù)庫(kù)聯(lián)機(jī)備份沒(méi)有結(jié)束,則主進(jìn)程發(fā)送下一備份階段命令給備份子進(jìn)程。若主進(jìn)程在預(yù)設(shè)第一等待時(shí)段內(nèi)沒(méi)有讀取到備份子進(jìn)程返回的信息,則清空已備份數(shù)據(jù),并銷毀備份子進(jìn)程,以確保備份的失敗也不會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)異常。
[0119]優(yōu)選的,等待單元43,具體用于:若是,確定備份主進(jìn)程讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息時(shí)為在預(yù)設(shè)第一等待時(shí)段內(nèi),若確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份沒(méi)有結(jié)束,則所述備份主進(jìn)程順序發(fā)送下一備份階段命令給備份子進(jìn)程,若確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份已完成,則結(jié)束所述備份子進(jìn)程;若否,確定備份主進(jìn)程在預(yù)設(shè)第一等待時(shí)段內(nèi)未讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息,則清空已備份數(shù)據(jù)并結(jié)束所述備份子進(jìn)程。
[0120]具體的,測(cè)試備份主進(jìn)程是否讀取到備份子進(jìn)程返回的執(zhí)行操作完成信息,判斷備份主進(jìn)程讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信時(shí)是否在預(yù)設(shè)第一等待時(shí)段內(nèi),若是,且確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份已完成,聯(lián)機(jī)備份結(jié)束后,主進(jìn)程向子進(jìn)程發(fā)送CMD_C0MPLETE命令,子進(jìn)程自行判斷前一個(gè)階段任務(wù)是否執(zhí)行失敗,若失敗,則清除已經(jīng)備份數(shù)據(jù),退出備份子進(jìn)程,并返回子進(jìn)程故障信息;否則,僅退出備份子進(jìn)程。通過(guò)上述過(guò)程以確保備份的失敗也不會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)異常。
[0121]圖7示出根據(jù)本發(fā)明提供的一種數(shù)據(jù)庫(kù)聯(lián)機(jī)備份系統(tǒng)第二個(gè)實(shí)施例的方法流程圖。本實(shí)施例的一種數(shù)據(jù)庫(kù)聯(lián)機(jī)備份系統(tǒng)主要由數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)實(shí)現(xiàn),包括發(fā)送命令單元51、第一判斷單元52、等待單元53、錯(cuò)誤報(bào)告單元54、用戶干預(yù)解析單元55和用戶干預(yù)執(zhí)行單元56。
[0122]發(fā)送命令單元51,用于備份主進(jìn)程發(fā)送備份階段命令給備份子進(jìn)程,備份階段命令用于命令備份子進(jìn)程執(zhí)行數(shù)據(jù)庫(kù)聯(lián)機(jī)備份中匹配的備份階段操作。該步驟的執(zhí)行過(guò)程與一種數(shù)據(jù)庫(kù)聯(lián)機(jī)備份方法第一個(gè)實(shí)施例步驟12相同,在此不再贅述。
[0123]第一判斷單元52,用于周期性判斷備份主進(jìn)程是否讀取到用戶干預(yù)和備份子進(jìn)程返回的執(zhí)行操作完成信息。
[0124]具體的,按預(yù)設(shè)周期T周期性判斷備份主進(jìn)程是否讀取用戶輸入的干預(yù)指令和備份子進(jìn)程返回的執(zhí)行操作完成信息。其中,備份子進(jìn)程執(zhí)行完備份階段命令對(duì)應(yīng)的備份階段操作后,則進(jìn)入空閑狀態(tài),因此,備份子進(jìn)程返回的執(zhí)行操作完成信息可能有備份子進(jìn)程空閑信息,而用戶輸入的干預(yù)指令可以為用戶輸入的需要進(jìn)行大量數(shù)據(jù)庫(kù)操作的指令,如大批量數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)的指令,用戶輸入中斷備份的命令或者退出用戶會(huì)話等。
[0125]例如,備份主進(jìn)程發(fā)送備份階段命令給備份子進(jìn)程之后,通過(guò)間隔等待的方式每隔周期T測(cè)試等待備份主進(jìn)程讀取到用戶輸入的預(yù)設(shè)指令和備份子進(jìn)程返回的執(zhí)行操作完成信息,其中,等待檢測(cè)實(shí)現(xiàn)可以封裝為一個(gè)函數(shù)&&010^)_¥&;[1:_&11(1_(311601^(),方便調(diào)用。其中函數(shù)backup_wait_and_check()的實(shí)現(xiàn)是,先在預(yù)設(shè)時(shí)間內(nèi)讀取備份子進(jìn)程發(fā)送完成信息,若未讀取到,則認(rèn)為子進(jìn)程異常,向用戶返回子進(jìn)程故障信息;若讀取到,不論什么結(jié)果,則先檢查用戶干預(yù),若需要中止,則向子進(jìn)程發(fā)送CMD_ST0P命令,并返回干預(yù)信息;若不需要中止,則判斷備份子進(jìn)程返回是否空閑狀態(tài)(前一個(gè)階段命令任務(wù)是否已經(jīng)完成),若空閑,則跳出這個(gè)函數(shù),由主進(jìn)程順序發(fā)送下一個(gè)備份階段命令;若不空閑(前一個(gè)階段命令任務(wù)沒(méi)有完成),則向備份子進(jìn)程發(fā)送CMD_C0NTINUE命令,通知備份子進(jìn)程繼續(xù)執(zhí)行前一個(gè)階段命令。
[0126]等待單元53,用于若是,確定備份主進(jìn)程讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息時(shí)為在預(yù)設(shè)第一等待時(shí)段內(nèi),確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份沒(méi)有結(jié)束,則所述備份主進(jìn)程順序發(fā)送下一備份階段命令給備份子進(jìn)程;若否,確定備份主進(jìn)程在預(yù)設(shè)第一等待時(shí)段內(nèi)未讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息,則清空已備份數(shù)據(jù)并結(jié)束所述備份子進(jìn)程。該等待單元53的執(zhí)行過(guò)程與一種數(shù)據(jù)庫(kù)聯(lián)機(jī)備份系統(tǒng)第一個(gè)實(shí)施例等待單元43相同,在此不再贅述。
[0127]優(yōu)選的,等待單元53還具體用于:若是,確定備份主進(jìn)程讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息時(shí)為在預(yù)設(shè)第一等待時(shí)段內(nèi),若確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份沒(méi)有結(jié)束,則所述備份主進(jìn)程順序發(fā)送下一備份階段命令給備份子進(jìn)程,若確定數(shù)據(jù)庫(kù)聯(lián)機(jī)備份已完成,則結(jié)束所述備份子進(jìn)程;若否,確定備份主進(jìn)程在預(yù)設(shè)第一等待時(shí)段內(nèi)未讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息,則清空已備份數(shù)據(jù)并結(jié)束所述備份子進(jìn)程。
[0128]優(yōu)選的,為了更好的監(jiān)測(cè)備份子進(jìn)程中是否有哪一備份階段操作出現(xiàn)錯(cuò)誤,還包括錯(cuò)誤報(bào)告單元54,用于確定備份主進(jìn)程檢測(cè)讀取到備份子進(jìn)程的錯(cuò)誤報(bào)告,則清除已經(jīng)備份數(shù)據(jù),結(jié)束備份子進(jìn)程,并返回子進(jìn)程故障信息。
[0129]其中,錯(cuò)誤報(bào)告單元54和等待單元53中對(duì)備份子進(jìn)程的檢測(cè)可以同時(shí)進(jìn)行,繼續(xù)命令為備份階段命令CMD_C0NTINUE,用于命令備份子進(jìn)程繼續(xù)當(dāng)前的備份階段操作。若備份主進(jìn)程檢測(cè)未讀取到備份子進(jìn)程的錯(cuò)誤報(bào)告,則備份主進(jìn)程發(fā)送繼續(xù)命令給備份子進(jìn)程。
[0130]例如,確定備份主進(jìn)程檢測(cè)讀取到備份子進(jìn)程的錯(cuò)誤報(bào)告,則備份主進(jìn)程發(fā)送終止命令CMD_ST0P,結(jié)束備份子進(jìn)程,并返回子進(jìn)程故障信息,若否,則周期性測(cè)試備份主進(jìn)程是否讀取用戶干預(yù)和備份子進(jìn)程返回的執(zhí)行操作完成信息,如果備份子進(jìn)程返回的執(zhí)行操作完成信息沒(méi)有超過(guò)預(yù)設(shè)的第一時(shí)長(zhǎng),且未讀取到用戶干預(yù),則使備份子進(jìn)程繼續(xù)當(dāng)前的操作。
[0131]為了更好的檢測(cè)備份子進(jìn)程中的用戶干預(yù),防止備份過(guò)程中用戶干預(yù)而造成備份數(shù)據(jù)異常,還包括:用戶干預(yù)解析單元55,用于解析備份主進(jìn)程讀取到的用戶干預(yù)。
[0132]例如,如附圖10所示,預(yù)設(shè)第一等待時(shí)段內(nèi)讀取到備份子進(jìn)程發(fā)送的執(zhí)行操作完成信息或還沒(méi)到預(yù)設(shè)第一等待時(shí)段,且備份主進(jìn)程沒(méi)有讀取到上述錯(cuò)誤報(bào)告單元54中的錯(cuò)誤報(bào)告,此時(shí)獲取到用戶干預(yù),則需要解析備份主進(jìn)程讀取到的用戶干預(yù)。
[0133]用戶干預(yù)執(zhí)行單元56,用于若用戶干預(yù)取消或用戶干預(yù)會(huì)話中斷,則清空已備份數(shù)據(jù)并結(jié)束備份子進(jìn)程。
[0134]優(yōu)選的,還包括用戶干預(yù)取消單元57:若用戶干預(yù)未取消且所述用戶干預(yù)會(huì)話未中斷,且備份主進(jìn)程讀取到備份子進(jìn)程返回的執(zhí)行信息,則所述備份主進(jìn)程向備份子進(jìn)程發(fā)送繼續(xù)命令。
[0135]如上例,如附圖10所示,當(dāng)用戶干預(yù)解析單元55中解析備份主進(jìn)程讀取到的用戶干預(yù)后,檢測(cè)用戶干預(yù)是否取消,如果是,則備份主進(jìn)程向備份子進(jìn)程發(fā)送備份中止命令CMD_ST0P,返回子進(jìn)程故障信息給用戶;清空備份子進(jìn)程已備份的數(shù)據(jù);銷毀備份子進(jìn)程。如果否,則檢測(cè)用戶干預(yù)會(huì)話是否中斷,如果中斷,則備份主進(jìn)程向備份子進(jìn)程發(fā)送備份中止命令CMD_ST0P,返回子進(jìn)程故障信息給用戶;清空備份子進(jìn)程已備份的數(shù)據(jù);銷毀備份子進(jìn)程。如果不中斷,則測(cè)試讀取備份子進(jìn)程當(dāng)前的空閑狀態(tài),若返回空閑信息,則認(rèn)為上一備份階段任務(wù)已經(jīng)完成,返回的空閑信息作為返回的執(zhí)行操作完成信息,備份主進(jìn)程發(fā)送下一備份階段任務(wù)給備份子進(jìn)程,若返回忙碌信息,則認(rèn)為備份子進(jìn)程正執(zhí)行當(dāng)前的備份階段操作,忙碌信息作為執(zhí)行信息,備份主進(jìn)程向備份子進(jìn)程發(fā)送繼續(xù)命令。
[0136]根據(jù)上述實(shí)例,如附圖9所示,本發(fā)明的一種數(shù)據(jù)庫(kù)聯(lián)機(jī)備份方法常規(guī)備份階段操作實(shí)現(xiàn)如下:
[0137]I)解析備份命令,從備份命令中獲取備份參數(shù);
[0138]2)創(chuàng)建備份子進(jìn)程,調(diào)用管道(PIPE)和備份子進(jìn)程創(chuàng)建實(shí)現(xiàn);
[0139]3)發(fā)送CMD_CHECK,通過(guò)管道向子