pflag = O且delflag = 0,表示該主鍵值對(duì)應(yīng)的源表的數(shù)據(jù)沒(méi)有結(jié)轉(zhuǎn)過(guò)。若某一主鍵值對(duì)應(yīng)的upflag = I且delflag = 0,表示該主鍵值對(duì)應(yīng)的源表的數(shù)據(jù)未結(jié)轉(zhuǎn)成功。若某一主鍵值對(duì)應(yīng)的upflag = I且delflag = I,表示該主鍵值對(duì)應(yīng)的源表的數(shù)據(jù)結(jié)轉(zhuǎn)成功。
[0049]步驟203、在下一個(gè)執(zhí)行周期開(kāi)始時(shí),初始化中間表。
[0050]在下一個(gè)執(zhí)行周期開(kāi)始時(shí),首先初始化中間表,將upflag和delflag的取值都置為0,表示源表的數(shù)據(jù)沒(méi)有結(jié)轉(zhuǎn)過(guò)。
[0051]步驟204、根據(jù)中間表獲取源表的數(shù)據(jù)中未結(jié)轉(zhuǎn)的數(shù)據(jù)。
[0052]由于中間表的主鍵值與源表的主鍵值相同,則根據(jù)中間表中delflag = O對(duì)應(yīng)的主鍵值查找源數(shù)據(jù)庫(kù),以獲取源表的數(shù)據(jù)中未結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)。
[0053]步驟205、計(jì)算結(jié)轉(zhuǎn)線程數(shù)。
[0054]參見(jiàn)圖2c所示,根據(jù)上述步驟中獲取的未結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)(即為count)以及用戶預(yù)先設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)(unit),可以確定未結(jié)轉(zhuǎn)的源表的數(shù)據(jù)所需的結(jié)轉(zhuǎn)線程的數(shù)量(記為Nm,Nm = count/unit)。
[0055]步驟206、將結(jié)轉(zhuǎn)線程放入線程池,以執(zhí)行源表的數(shù)據(jù)的結(jié)轉(zhuǎn)線程。
[0056]根據(jù)上述步驟確定的結(jié)轉(zhuǎn)線程的數(shù)量Nm創(chuàng)建結(jié)轉(zhuǎn)線程,將所創(chuàng)建的結(jié)轉(zhuǎn)線程放入源表線程池,通過(guò)所創(chuàng)建的結(jié)轉(zhuǎn)線程并行且各自獨(dú)立的處理未結(jié)轉(zhuǎn)的源表的數(shù)據(jù),將所述未結(jié)轉(zhuǎn)的源表的數(shù)據(jù)迀移至所述目標(biāo)數(shù)據(jù)庫(kù)。
[0057]步驟207、根據(jù)開(kāi)始行號(hào)分頁(yè)查詢中間表的主鍵值。
[0058]開(kāi)始行號(hào)可以根據(jù)結(jié)轉(zhuǎn)線程的數(shù)量(記為count),以及單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)(記為unit)確定,具體為:開(kāi)始行號(hào)N = count*unit+l,其中,count的取值為自然數(shù),unit的值是根據(jù)用戶的設(shè)置確定。比如,用戶設(shè)置單次結(jié)轉(zhuǎn)40條數(shù)據(jù)記錄,根據(jù)用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定中間表的一頁(yè),此時(shí),中間表中一頁(yè)包含的數(shù)據(jù)記錄為40條,該頁(yè)的開(kāi)始行號(hào)為l(count = O),第二頁(yè)的開(kāi)始行號(hào)為41 (count = I),依次類推,可以確定各頁(yè)的開(kāi)始行號(hào)。以開(kāi)始行號(hào)為一頁(yè)的查詢起點(diǎn),分頁(yè)查詢中間表的各頁(yè)的主鍵值。
[0059]步驟208、判斷是否存在待結(jié)轉(zhuǎn)的數(shù)據(jù),若是,則執(zhí)行步驟209,若否,則結(jié)轉(zhuǎn)任務(wù)結(jié)束。
[0060]查詢中間表,確定在中間表中是否存在delflag = O的結(jié)轉(zhuǎn)狀態(tài),若存在,則說(shuō)明存在待結(jié)轉(zhuǎn)的數(shù)據(jù)。
[0061]步驟209、根據(jù)中間表的主鍵值查詢?cè)幢淼臄?shù)據(jù)。
[0062]根據(jù)與上述步驟中delflag = O的結(jié)轉(zhuǎn)狀態(tài)對(duì)應(yīng)的主鍵值,根據(jù)所述主鍵值查詢?cè)磾?shù)據(jù)庫(kù),以獲得源表的數(shù)據(jù)。
[0063]步驟210、根據(jù)源表的數(shù)據(jù)生成目標(biāo)數(shù)據(jù)庫(kù)的插入指令,以將源表的數(shù)據(jù)批量插入目標(biāo)數(shù)據(jù)庫(kù)。
[0064]采用SQL語(yǔ)句,根據(jù)源表的數(shù)據(jù)(包含多個(gè)數(shù)據(jù)片段)生成insert指令,將源表的數(shù)據(jù)批量插入目標(biāo)數(shù)據(jù)庫(kù),在向目標(biāo)數(shù)據(jù)庫(kù)插入數(shù)據(jù)的同時(shí),在目標(biāo)數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)所插入數(shù)據(jù)的歷史表。
[0065]步驟211、更新中間表內(nèi)與源表的數(shù)據(jù)對(duì)應(yīng)的結(jié)轉(zhuǎn)狀態(tài)的標(biāo)識(shí)。
[0066]在數(shù)據(jù)結(jié)轉(zhuǎn)成功后,更新中間表內(nèi)結(jié)轉(zhuǎn)成功的數(shù)據(jù)的主鍵值對(duì)應(yīng)的upflag與delflag的取值,使upflag = I且delflag = I。若數(shù)據(jù)結(jié)轉(zhuǎn)失敗,則使結(jié)轉(zhuǎn)失敗的數(shù)據(jù)的主鍵值對(duì)應(yīng)的upflag = I且delflag = 0,以在結(jié)轉(zhuǎn)任務(wù)的執(zhí)行周期內(nèi)進(jìn)行重新結(jié)轉(zhuǎn)。對(duì)于結(jié)轉(zhuǎn)失敗的數(shù)據(jù),若連續(xù)結(jié)轉(zhuǎn)3次仍未結(jié)轉(zhuǎn)成功,則結(jié)轉(zhuǎn)任務(wù)結(jié)束,提示結(jié)轉(zhuǎn)失敗的消息。
[0067]步驟212、判斷是否存在與源表關(guān)聯(lián)的從表,若是,則執(zhí)行步驟213,若否,則結(jié)轉(zhuǎn)任務(wù)結(jié)束。
[0068]根據(jù)用戶預(yù)先設(shè)置的源表的主鍵,查詢?cè)磾?shù)據(jù)庫(kù),以確定與所述源表關(guān)聯(lián)的從表。若存在從表,則執(zhí)行步驟213,若不存在從表,則結(jié)轉(zhuǎn)任務(wù)結(jié)束。
[0069]步驟213、執(zhí)行從表結(jié)轉(zhuǎn)線程。
[0070]參見(jiàn)圖2c所示,順序獲取與所述源表關(guān)聯(lián)的從表中的一個(gè)作為當(dāng)前從表。將當(dāng)前從表的數(shù)據(jù)記錄數(shù)記為countl,根據(jù)用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)unit以及countl確定當(dāng)前從表的從表結(jié)轉(zhuǎn)線程的數(shù)量Ns1, Ns1= countl/unito將所述當(dāng)前從表的從表結(jié)轉(zhuǎn)線程放入當(dāng)前從表對(duì)應(yīng)的從表線程池(從表線程池的數(shù)量=從表個(gè)數(shù)),采用多線程并行處理的方式將當(dāng)前從表的數(shù)據(jù)從源數(shù)據(jù)庫(kù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù)。
[0071]根據(jù)主鍵值(為從表的外鍵值)查詢?cè)磾?shù)據(jù)庫(kù),獲取從表的數(shù)據(jù)(包含多個(gè)數(shù)據(jù)片段)。采用SQL語(yǔ)句,根據(jù)從表的數(shù)據(jù)生成insert指令,將從表的數(shù)據(jù)批量插入目標(biāo)數(shù)據(jù)庫(kù)且與所述目標(biāo)數(shù)據(jù)庫(kù)中的歷史表相關(guān)聯(lián)。
[0072]本實(shí)施例的技術(shù)方案,通過(guò)中間表確定需要結(jié)轉(zhuǎn)的數(shù)據(jù),采用多線程并行處理的方式,先結(jié)轉(zhuǎn)源表的數(shù)據(jù)后結(jié)轉(zhuǎn)從表的數(shù)據(jù),最終將源數(shù)據(jù)庫(kù)中需要結(jié)轉(zhuǎn)的數(shù)據(jù)結(jié)轉(zhuǎn)到目標(biāo)數(shù)據(jù)庫(kù),保證了數(shù)據(jù)的完整性和結(jié)轉(zhuǎn)任務(wù)整體的運(yùn)行效率。
[0073]實(shí)施例三
[0074]圖3是本發(fā)明實(shí)施例三中的一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)裝置的結(jié)構(gòu)示意圖。所述跨庫(kù)結(jié)轉(zhuǎn)裝置,包括:
[0075]數(shù)據(jù)獲取單元310,用于根據(jù)預(yù)先創(chuàng)建的中間表從源數(shù)據(jù)庫(kù)中獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),其中,所述中間表的主鍵值與源表的主鍵值相同;
[0076]源表結(jié)轉(zhuǎn)單元320,用于根據(jù)所述源表的數(shù)據(jù)記錄數(shù)以及用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定結(jié)轉(zhuǎn)線程的數(shù)量,將所述結(jié)轉(zhuǎn)線程放入源表線程池,采用多線程并行處理的方式將所述源表的數(shù)據(jù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù);
[0077]從表確定單元330,用于根據(jù)用戶設(shè)置的源表與從表之間的關(guān)聯(lián)字段,確定與所述源表關(guān)聯(lián)的從表,根據(jù)所述從表的數(shù)量確定從表線程池的數(shù)量;
[0078]從表結(jié)轉(zhuǎn)單元340,用于在所述從表的數(shù)量大于零時(shí),根據(jù)所述關(guān)聯(lián)字段從源數(shù)據(jù)庫(kù)中獲取與所述源表關(guān)聯(lián)的從表的數(shù)據(jù),根據(jù)各個(gè)從表的數(shù)據(jù)記錄數(shù)以及用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定從表結(jié)轉(zhuǎn)線程的數(shù)量,將所述從表結(jié)轉(zhuǎn)線程放入從表線程池,采用多線程并行處理的方式將所述從表的數(shù)據(jù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù)。
[0079]本實(shí)施例的技術(shù)方案,通過(guò)數(shù)據(jù)獲取單元310預(yù)先創(chuàng)建的中間表從源數(shù)據(jù)庫(kù)中獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),并根據(jù)源表結(jié)轉(zhuǎn)單元320確定結(jié)轉(zhuǎn)線程的數(shù)量并創(chuàng)建相應(yīng)數(shù)量的結(jié)轉(zhuǎn)線程放入源表線程池,通過(guò)從表確定單元330確定與所述源表關(guān)聯(lián)的從表,并創(chuàng)建與所述從表的數(shù)量相應(yīng)的從表線程池,根據(jù)從表結(jié)轉(zhuǎn)單元340確定從表結(jié)轉(zhuǎn)線程的數(shù)量,并創(chuàng)建相應(yīng)數(shù)量的從表結(jié)轉(zhuǎn)線程放入從表線程池,采用多線程并行處理的方式,先結(jié)轉(zhuǎn)源表的數(shù)據(jù)后結(jié)轉(zhuǎn)從表的數(shù)據(jù),將源數(shù)據(jù)庫(kù)中的待結(jié)轉(zhuǎn)數(shù)據(jù)結(jié)轉(zhuǎn)到目標(biāo)數(shù)據(jù)庫(kù),解決了現(xiàn)有的數(shù)據(jù)結(jié)轉(zhuǎn)方式無(wú)法滿足大量數(shù)據(jù)、多種類型的數(shù)據(jù)表在多種數(shù)據(jù)庫(kù)之間協(xié)同導(dǎo)入導(dǎo)出要求的問(wèn)題,實(shí)現(xiàn)根據(jù)用戶自定義的結(jié)轉(zhuǎn)規(guī)則在多種數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)結(jié)轉(zhuǎn),達(dá)到了具有較高通用性、以及較高執(zhí)行效率的效果。
[0080]進(jìn)一步地,所述預(yù)先創(chuàng)建的中間表至少包括:
[0081