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