專利名稱:遠(yuǎn)程數(shù)據(jù)庫的可靠下載與使用本地數(shù)據(jù)庫無沖突的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)庫應(yīng)用、計算機(jī)軟件開發(fā)領(lǐng)域,涉及一種遠(yuǎn)程數(shù)據(jù)庫的可靠下載與使用本地數(shù)據(jù)庫無沖突的方法。
背景技術(shù):
目前,數(shù)據(jù)庫技術(shù)已經(jīng)成為各行業(yè)、各企業(yè)進(jìn)行數(shù)據(jù)管理所不可或缺的技術(shù)。對于眾多的大型集團(tuán)公司,其業(yè)務(wù)范圍廣泛,分公司遍布全國甚至世界多個地區(qū),如何利用網(wǎng)絡(luò)高效率地傳輸數(shù)據(jù)和使用遠(yuǎn)程數(shù)據(jù)是一個棘手的問題。大型集團(tuán)的分公司通常在各地分散開展業(yè)務(wù),需要用到的業(yè)務(wù)數(shù)據(jù)大多由本地數(shù)據(jù)和遠(yuǎn)程數(shù)據(jù)組成。本地數(shù)據(jù)由分公司建立本地數(shù)據(jù)庫存儲,而遠(yuǎn)程數(shù)據(jù)則由總公司建立一個集中的遠(yuǎn)程數(shù)據(jù)庫加以管理,一般來說,本地數(shù)據(jù)庫服務(wù)器位于各分公司所在地,而遠(yuǎn)程數(shù)據(jù)庫服務(wù)器則位于總公司所在地。分公司如果需要使用遠(yuǎn)程數(shù)據(jù),則連接到遠(yuǎn)程數(shù)據(jù)庫服務(wù)器獲取數(shù)據(jù)。
實際應(yīng)用中,遠(yuǎn)程數(shù)據(jù)的下載存在以下兩個問題1.大容量的遠(yuǎn)程數(shù)據(jù)下載到本地需要較長的時間,同時由于通信鏈路的不穩(wěn)定、遠(yuǎn)程數(shù)據(jù)庫服務(wù)器的技術(shù)故障以及數(shù)據(jù)庫服務(wù)器的負(fù)荷過重等原因?qū)е逻h(yuǎn)程數(shù)據(jù)下載效率低下或者失敗。
2.遠(yuǎn)程數(shù)據(jù)的下載任務(wù)會占據(jù)本地數(shù)據(jù)庫服務(wù)器較大資源,因此會與本地應(yīng)用程序使用本地數(shù)據(jù)庫產(chǎn)生沖突。
發(fā)明內(nèi)容
針對上述背景技術(shù)存在的缺陷或不足,本發(fā)明目的在于,提供一種遠(yuǎn)程數(shù)據(jù)庫的可靠下載與使用本地數(shù)據(jù)庫無沖突的方法,該方法能夠避免遠(yuǎn)程數(shù)據(jù)下載和本地使用之間的沖突,提高下載的效率和可靠性。
為了實現(xiàn)上述任務(wù),本發(fā)明采取如下的技術(shù)解決方案一種遠(yuǎn)程數(shù)據(jù)庫的可靠下載與使用本地數(shù)據(jù)庫無沖突的方法,其特征在于,該方法包括將遠(yuǎn)程數(shù)據(jù)庫作為本地數(shù)據(jù)的下載源,遠(yuǎn)程數(shù)據(jù)庫內(nèi)包括結(jié)構(gòu)已知且固定的遠(yuǎn)程表1、遠(yuǎn)程表2、…,遠(yuǎn)程表n,采用MS SQL Server、Oracle或Sybase數(shù)據(jù)庫管理系統(tǒng)分別在本地的下載服務(wù)器和應(yīng)用服務(wù)器上創(chuàng)建下載數(shù)據(jù)庫和應(yīng)用數(shù)據(jù)庫,下載數(shù)據(jù)庫負(fù)責(zé)從遠(yuǎn)程數(shù)據(jù)庫下載并保存遠(yuǎn)程數(shù)據(jù),應(yīng)用數(shù)據(jù)庫定時通過下載數(shù)據(jù)庫更新數(shù)據(jù),為本地用戶的使用提供數(shù)據(jù)操作服務(wù),應(yīng)用程序包括運(yùn)行于下載服務(wù)器上的第一應(yīng)用程序和運(yùn)行于應(yīng)用服務(wù)器上的第二應(yīng)用程序;第一應(yīng)用程序用于完成從遠(yuǎn)程數(shù)據(jù)庫下載數(shù)據(jù)到本地下載數(shù)據(jù)庫的任務(wù),并創(chuàng)建數(shù)據(jù)下載函數(shù),在Powerbuilder 9.0中,依次建立數(shù)據(jù)管道、管道用戶對象和主窗口;創(chuàng)建數(shù)據(jù)下載函數(shù),編寫主窗口的open事件代碼和timer事件代碼,其中數(shù)據(jù)管道為多個,其數(shù)量由子任務(wù)的數(shù)量所決定,一個數(shù)據(jù)管道連接一個遠(yuǎn)程表,表管道的操作方式選擇Replace-Drop/AddTable方式;第二應(yīng)用程序用于完成從本地數(shù)據(jù)庫復(fù)制數(shù)據(jù)到本地應(yīng)用數(shù)據(jù)庫的任務(wù),在Powerbuilder 9.0中,依次建立數(shù)據(jù)管道、管道用戶對象和主窗口;編寫主窗口的open事件代碼和timer事件代碼;其中數(shù)據(jù)管道的操作方式選擇Append-Insert Rows方式;根據(jù)本地業(yè)務(wù)在應(yīng)用數(shù)據(jù)庫中建立本地復(fù)制表1,本地復(fù)制表2,…,本地復(fù)制表n;在下載數(shù)據(jù)庫中建立任務(wù)記錄表,任務(wù)記錄表的字段包括下載日期、下載成功標(biāo)志、下載子任務(wù)完成標(biāo)志、任務(wù)下載次數(shù)、數(shù)據(jù)復(fù)制成功標(biāo)志;數(shù)據(jù)下載的基本流程是以遠(yuǎn)程數(shù)據(jù)庫中的單個遠(yuǎn)程表為單位,作為下載任務(wù)的子任務(wù),利用Powerbuilder 9.0提供的數(shù)據(jù)管道功能先將遠(yuǎn)程數(shù)據(jù)庫中的遠(yuǎn)程表從遠(yuǎn)程數(shù)據(jù)庫依次下載到本地下載數(shù)據(jù)庫中,然后使用數(shù)據(jù)管道將數(shù)據(jù)從本地下載數(shù)據(jù)庫復(fù)制到本地應(yīng)用數(shù)據(jù)庫中。
本發(fā)明的方法能夠自動定期從遠(yuǎn)程數(shù)據(jù)庫服務(wù)器下載所需數(shù)據(jù),避免了由于客觀原因(如通信鏈路中斷、斷電等)中斷任務(wù)后的重復(fù)下載,應(yīng)用數(shù)據(jù)庫定時通過下載數(shù)據(jù)庫更新數(shù)據(jù),為本地用戶的使用提供數(shù)據(jù)操作服務(wù),這樣就避免了遠(yuǎn)程數(shù)據(jù)下載和本地使用之間的沖突。另外,下載數(shù)據(jù)庫同時也是應(yīng)用數(shù)據(jù)庫的備份數(shù)據(jù)庫,具有防止應(yīng)用數(shù)據(jù)庫數(shù)據(jù)意外丟失的功能。
圖1為數(shù)據(jù)庫結(jié)構(gòu)示意圖;圖2為數(shù)據(jù)下載函數(shù)流程圖;圖3為數(shù)據(jù)下載主程序流程圖;圖4為數(shù)據(jù)復(fù)制主程序流程圖。
以下結(jié)合附圖和發(fā)明人給出的的具體實施例對本發(fā)明作進(jìn)一步的詳細(xì)說明。
具體實施例方式
本地數(shù)據(jù)庫通過MS SQL Server 2000創(chuàng)建和管理,應(yīng)用程序使用Powerbuilder 9.0開發(fā)。
數(shù)據(jù)庫結(jié)構(gòu)如圖1所示,遠(yuǎn)程數(shù)據(jù)庫為本地數(shù)據(jù)的下載源,其表結(jié)構(gòu)已知,且固定。采用MS SQL Server 2000數(shù)據(jù)庫管理系統(tǒng)分別在本地的兩臺服務(wù)器(下載服務(wù)器和應(yīng)用服務(wù)器)上創(chuàng)建下載數(shù)據(jù)庫和應(yīng)用數(shù)據(jù)庫,并根據(jù)本地業(yè)務(wù)在應(yīng)用數(shù)據(jù)庫中建立本地復(fù)制表1,本地復(fù)制表2,…,本地復(fù)制表n。此外,在下載數(shù)據(jù)庫中建立任務(wù)記錄表,任務(wù)記錄表的字段包括下載日期、下載成功標(biāo)志、下載子任務(wù)完成標(biāo)志、任務(wù)下載次數(shù)、數(shù)據(jù)復(fù)制成功標(biāo)志。數(shù)據(jù)下載的基本流程是以單個數(shù)據(jù)庫表(遠(yuǎn)程表1,遠(yuǎn)程表2,…,遠(yuǎn)程表n)為單位,作為下載任務(wù)的子任務(wù),利用Powerbuilder 9.0提供的數(shù)據(jù)管道功能先將遠(yuǎn)程數(shù)據(jù)庫中的遠(yuǎn)程表從遠(yuǎn)程數(shù)據(jù)庫依次下載到本地下載數(shù)據(jù)庫中,然后使用數(shù)據(jù)管道將數(shù)據(jù)從本地下載數(shù)據(jù)庫復(fù)制到本地應(yīng)用數(shù)據(jù)庫中。
應(yīng)用程序包括運(yùn)行于下載服務(wù)器上的第一應(yīng)用程序和運(yùn)行于應(yīng)用服務(wù)器上的第二應(yīng)用程序。
第一應(yīng)用程序主要完成從遠(yuǎn)程數(shù)據(jù)庫下載數(shù)據(jù)到本地下載數(shù)據(jù)庫的任務(wù),在Powerbuilder 9.0中,依次建立數(shù)據(jù)管道、管道用戶對象和主窗口;創(chuàng)建數(shù)據(jù)下載函數(shù)downloading(p1,p2,…pn);編寫主窗口的open事件代碼和timer事件代碼。其中數(shù)據(jù)管道為多個,其數(shù)量由子任務(wù)的數(shù)量所決定。一個數(shù)據(jù)管道連接一個遠(yuǎn)程表,表管道的操作方式選擇Replace-Drop/AddTable方式。
數(shù)據(jù)下載函數(shù)downloading(p1,p2,…pn)用于實現(xiàn)數(shù)據(jù)下載功能,供主程序調(diào)用。如附圖2所示該函數(shù)流程圖,函數(shù)定義整型變量li_flag,并賦初值1。虛線內(nèi)流程圖顯示了子任務(wù)i的完成過程。傳入的參數(shù)Pi表示了子任務(wù)i是否已完成,若Pi為1,則繼續(xù)下一個子任務(wù);若不為1,則使用數(shù)據(jù)管道進(jìn)行該子任務(wù)。子任務(wù)若成功完成,則更新任務(wù)記錄表中該子任務(wù)的標(biāo)志;若子任務(wù)失敗,給變量li_fag賦值0。當(dāng)進(jìn)行完所有的子任務(wù),判斷l(xiāng)i_flag的值,若為1,表明所有子任務(wù)均成功完成,此時更新任務(wù)記錄表中的下載成功標(biāo)志。
打開主窗口的腳本窗口,分別寫入open事件代碼和timer事件代碼。在open事件代碼中觸發(fā)timer事件,啟動主程序;timer事件代碼是該系統(tǒng)的主要程序,附圖3為其流程圖,以下對該流程圖作幾點說明。
1.當(dāng)前日期為任務(wù)記錄表最新日期比較任務(wù)記錄表中下載日期字段中最新日期與當(dāng)前日期。
2.下載成功標(biāo)志為1任務(wù)記錄表中下載成功標(biāo)志字段數(shù)據(jù)類型為整型,1表示下載成功,0表示下載未成功。
3.調(diào)用下載函數(shù)downloading(p1,p2,…pn),函數(shù)參數(shù)根據(jù)任務(wù)記錄表中子任務(wù)完成標(biāo)志確定任務(wù)記錄表中子任務(wù)完成標(biāo)志數(shù)據(jù)類型為整型,1標(biāo)志子任務(wù)已完成,0表示未完成。調(diào)用downloading()函數(shù)時,取任務(wù)記錄表中子任務(wù)完成標(biāo)志并判斷,若子任務(wù)標(biāo)志為1,則相應(yīng)的downloading()函數(shù)參數(shù)為0;反之為1。
4.在任務(wù)記錄表中添加新下載記錄若當(dāng)前日期不為記錄表最新日期,在任務(wù)記錄表中添加新的下載記錄下載日期字段為當(dāng)前日期;下載成功標(biāo)志字段置0;子任務(wù)下載成功標(biāo)志字段均置0;數(shù)據(jù)成功標(biāo)志字段置0。
5.啟動timer在設(shè)定的時間后再次啟動主程序。
第二應(yīng)用程序主要完成從本地數(shù)據(jù)庫復(fù)制數(shù)據(jù)到本地應(yīng)用數(shù)據(jù)庫的任務(wù),在Powerbuilder 9.0中,依次建立數(shù)據(jù)管道、管道用戶對象和主窗口;編寫主窗口的open事件代碼和timer事件代碼。其中數(shù)據(jù)管道的操作方式選擇Append-Insert Rows方式。
打開主窗口的腳本窗口,分別寫入open事件代碼和timer事件代碼。在open事件代碼中觸發(fā)timer事件,激活主程序;timer事件代碼是該系統(tǒng)的主要程序,附圖4為其流程圖,以下對該流程圖作幾點說明。
1.當(dāng)前時間為復(fù)制時段把復(fù)制數(shù)據(jù)任務(wù)的時間確定在應(yīng)用服務(wù)器空閑時段,如夜晚。
2.任務(wù)記錄表中最新記錄下載成功標(biāo)志為1且數(shù)據(jù)復(fù)制成功標(biāo)志為0檢測下載數(shù)據(jù)庫中最新下載的數(shù)據(jù)是否成功完成并且還未復(fù)制。
3.更新任務(wù)記錄表中數(shù)據(jù)復(fù)制成功標(biāo)志使用數(shù)據(jù)管道復(fù)制數(shù)據(jù)成功后,將任務(wù)記錄表中數(shù)據(jù)復(fù)制成功標(biāo)志置1。
4.啟動timer在設(shè)定的時間后再次啟動主程序。
權(quán)利要求
1.一種遠(yuǎn)程數(shù)據(jù)庫的可靠下載與使用本地數(shù)據(jù)庫無沖突的方法,其特征在于,該方法包括將遠(yuǎn)程數(shù)據(jù)庫作為本地數(shù)據(jù)的下載源,遠(yuǎn)程數(shù)據(jù)庫內(nèi)包括結(jié)構(gòu)已知且固定的遠(yuǎn)程表1、遠(yuǎn)程表2、…,遠(yuǎn)程表n,采用MS SQL Server、Oracle或Sybase數(shù)據(jù)庫管理系統(tǒng)分別在本地的下載服務(wù)器和應(yīng)用服務(wù)器上創(chuàng)建下載數(shù)據(jù)庫和應(yīng)用數(shù)據(jù)庫,下載數(shù)據(jù)庫負(fù)責(zé)從遠(yuǎn)程數(shù)據(jù)庫下載并保存遠(yuǎn)程數(shù)據(jù),應(yīng)用數(shù)據(jù)庫定時通過下載數(shù)據(jù)庫更新數(shù)據(jù),為本地用戶的使用提供數(shù)據(jù)操作服務(wù),應(yīng)用程序包括運(yùn)行于下載服務(wù)器上的第一應(yīng)用程序和運(yùn)行于應(yīng)用服務(wù)器上的第二應(yīng)用程序;第一應(yīng)用程序用于完成從遠(yuǎn)程數(shù)據(jù)庫下載數(shù)據(jù)到本地下載數(shù)據(jù)庫的任務(wù),并創(chuàng)建數(shù)據(jù)下載函數(shù)downloading,在Powerbuilder 9.0中,依次建立數(shù)據(jù)管道、管道用戶對象和主窗口;創(chuàng)建數(shù)據(jù)下載函數(shù),編寫主窗口的open事件代碼和timer事件代碼,其中數(shù)據(jù)管道為多個,其數(shù)量由子任務(wù)的數(shù)量所決定,一個數(shù)據(jù)管道連接一個遠(yuǎn)程表,表管道的操作方式選擇Replace-Drop/Add Table方式;第二應(yīng)用程序用于完成從本地數(shù)據(jù)庫復(fù)制數(shù)據(jù)到本地應(yīng)用數(shù)據(jù)庫的任務(wù),在Powerbuilder 9.0中,依次建立數(shù)據(jù)管道、管道用戶對象和主窗口;編寫主窗口的open事件代碼和timer事件代碼;其中數(shù)據(jù)管道的操作方式選擇Append-Insert Rows方式;根據(jù)本地業(yè)務(wù)在應(yīng)用數(shù)據(jù)庫中建立本地復(fù)制表1,本地復(fù)制表2,…,本地復(fù)制表n;在下載數(shù)據(jù)庫中建立任務(wù)記錄表,任務(wù)記錄表的字段包括下載日期、下載成功標(biāo)志、下載子任務(wù)完成標(biāo)志、任務(wù)下載次數(shù)、數(shù)據(jù)復(fù)制成功標(biāo)志;數(shù)據(jù)下載的基本流程是以遠(yuǎn)程數(shù)據(jù)庫中的單個遠(yuǎn)程表為單位,作為下載任務(wù)的子任務(wù),利用Powerbuilder 9.0提供的數(shù)據(jù)管道功能先將遠(yuǎn)程數(shù)據(jù)庫中的遠(yuǎn)程表從遠(yuǎn)程數(shù)據(jù)庫依次下載到本地下載數(shù)據(jù)庫中,然后使用數(shù)據(jù)管道將數(shù)據(jù)從本地下載數(shù)據(jù)庫復(fù)制到本地應(yīng)用數(shù)據(jù)庫中。
2.如權(quán)利要求1所述的方法,其特征在于,所說的數(shù)據(jù)下載函數(shù)downloading用于實現(xiàn)數(shù)據(jù)的下載,供主程序調(diào)用;該函數(shù)流程的順序為函數(shù)定義整型變量li_flag,并賦初值1,傳入的參數(shù)Pi表示子任務(wù)i是否已完成,若Pi為1,則繼續(xù)下一個子任務(wù);若不為1,則使用數(shù)據(jù)管道進(jìn)行該子任務(wù);子任務(wù)若成功完成,則更新任務(wù)記錄表中該子任務(wù)的標(biāo)志;若子任務(wù)失敗,給變量li_flag賦值0,當(dāng)進(jìn)行完所有的子任務(wù),判斷l(xiāng)i_flag的值,若為1,表明所有子任務(wù)均成功完成,此時更新任務(wù)記錄表中的下載成功標(biāo)志。
全文摘要
本發(fā)明公開了一種遠(yuǎn)程數(shù)據(jù)庫的可靠下載與使用本地數(shù)據(jù)庫無沖突的方法,該方法將遠(yuǎn)程數(shù)據(jù)庫作為本地數(shù)據(jù)的下載源,采用MS SQL Server、Oracle或Sybase數(shù)據(jù)庫管理系統(tǒng)分別在本地的下載服務(wù)器和應(yīng)用服務(wù)器上創(chuàng)建下載數(shù)據(jù)庫和應(yīng)用數(shù)據(jù)庫,下載數(shù)據(jù)庫負(fù)責(zé)從遠(yuǎn)程數(shù)據(jù)庫下載并保存遠(yuǎn)程數(shù)據(jù),應(yīng)用數(shù)據(jù)庫定時通過下載數(shù)據(jù)庫更新數(shù)據(jù),為本地用戶的使用提供數(shù)據(jù)操作服務(wù),本發(fā)明能夠自動定期從遠(yuǎn)程數(shù)據(jù)庫服務(wù)器下載所需數(shù)據(jù),避免了由于客觀原因中斷任務(wù)后的重復(fù)下載,應(yīng)用數(shù)據(jù)庫定時通過下載數(shù)據(jù)庫更新數(shù)據(jù),為本地用戶的使用提供數(shù)據(jù)操作服務(wù),這樣就避免了遠(yuǎn)程數(shù)據(jù)下載和本地使用之間的沖突。另外,下載數(shù)據(jù)庫同時也是應(yīng)用數(shù)據(jù)庫的備份數(shù)據(jù)庫,防止應(yīng)用數(shù)據(jù)庫數(shù)據(jù)意外丟失。
文檔編號G06F9/44GK1828601SQ200610042619
公開日2006年9月6日 申請日期2006年4月3日 優(yōu)先權(quán)日2006年4月3日
發(fā)明者王林, 張國寧 申請人:西安理工大學(xué)