專利名稱::一種關(guān)系數(shù)據(jù)庫應(yīng)用自動(dòng)升級的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種升級方法,特別是涉及一種關(guān)系數(shù)據(jù)庫應(yīng)用的自動(dòng)升級方法。
背景技術(shù):
:為滿足當(dāng)前各種業(yè)務(wù)開發(fā)、運(yùn)營管理的需要,設(shè)備或者軟件產(chǎn)品供應(yīng)商基于MSSQL、Oracle、Sybase等商用數(shù)據(jù)庫軟件,開發(fā)了各種各樣的業(yè)務(wù)軟件。主要形式為利用商用數(shù)據(jù)庫軟件創(chuàng)建占用一定存儲空間大小的數(shù)據(jù)庫實(shí)體、一系列的關(guān)系數(shù)據(jù)表,可能還有存儲過程、觸發(fā)器等數(shù)據(jù)庫元素。但是由于新業(yè)務(wù)新需求的不斷涌現(xiàn)、業(yè)務(wù)量的增長、軟件版本的故障修復(fù)和功能增強(qiáng),就會頻繁發(fā)生對業(yè)務(wù)數(shù)據(jù)庫系統(tǒng)的升級。數(shù)據(jù)庫的升級主要包括表的增刪、表結(jié)構(gòu)的更改、空間的修改、存儲過程等元素的變更等。為本文敘述方便,我們把需要升級的原用戶數(shù)據(jù)庫系統(tǒng)稱為升級源版本,把升級后的目標(biāo)用戶數(shù)據(jù)庫系統(tǒng)稱為升級目標(biāo)版本。傳統(tǒng)的升級方法是由研發(fā)人員根據(jù)升級源版本、升級目標(biāo)版本的特性來定制開發(fā)版本升級工具。這種升級工具是與升級源版本、升級目標(biāo)版本緊密相關(guān)的,是由研發(fā)人員人為分析兩個(gè)版本的差異而得出來的,這種升級方法有以下缺點(diǎn)1、不能從用戶數(shù)據(jù)庫系統(tǒng)本身判斷是否兩個(gè)版本間數(shù)據(jù)庫結(jié)構(gòu)發(fā)生了修改,只能根據(jù)版本的版本號來進(jìn)行判斷版本中哪些數(shù)據(jù)庫結(jié)構(gòu)有了修改,這種判斷難免會出現(xiàn)誤差。例如有些對于數(shù)據(jù)庫的修改未能反應(yīng)到版本號的變化上,導(dǎo)致不同的數(shù)據(jù)庫結(jié)構(gòu)(可能是很微小的)對應(yīng)到同一個(gè)版本號上,這時(shí)根據(jù)版本號來定制的數(shù)據(jù)庫升級工具就不能完全正確升級。有可能在產(chǎn)品運(yùn)營現(xiàn)場,用戶進(jìn)行過一些修改,或者技術(shù)支持人員現(xiàn)場做過一些改動(dòng),這時(shí)定制的數(shù)據(jù)庫升級工具是無法感知這些現(xiàn)場變化的;2、在進(jìn)行版本升級的時(shí)候在理論上會出現(xiàn)多到多的多種版本轉(zhuǎn)換情況,這樣,依靠不同版本號來定制版本升級工具,就會使數(shù)據(jù)升級工具維護(hù)工作量隨著版本號的增加急劇增大。當(dāng)發(fā)布一個(gè)新版本時(shí),必須針對此前的所有版本制作升級到新版本的升級工具。當(dāng)然也可以通過變通方法,比如進(jìn)行梯次升級,逐步升級到最新版本,但這會導(dǎo)致升級過程繁瑣、耗時(shí),出錯(cuò)概率加大;3、這種定制的版本升級工具也不利于升級失敗后的回滾。由于升級工具本身并不能識別不同版本的內(nèi)部數(shù)據(jù)庫結(jié)構(gòu),所以逆向回滾也需要針對不同版本進(jìn)行定制,費(fèi)時(shí)費(fèi)力。如果能夠?qū)崿F(xiàn)一種方法,對升級源版本、升級目標(biāo)版本的關(guān)系數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)特性進(jìn)行自動(dòng)分析,然后生成升級策略,最終按此策略進(jìn)行自動(dòng)升級,則可以解決以上問題,實(shí)現(xiàn)方便靈活的關(guān)系數(shù)據(jù)自動(dòng)升級。對于某些數(shù)據(jù)庫結(jié)構(gòu)差異非常大,用戶需要定制升級策略的,也可以提供自動(dòng)分析結(jié)果,使得用戶在此基礎(chǔ)上進(jìn)行部分指定升級策略,從而實(shí)現(xiàn)準(zhǔn)確完整的升級。
發(fā)明內(nèi)容本發(fā)明所要解決的問題在于,提供一種關(guān)系數(shù)據(jù)庫應(yīng)用自動(dòng)升級的方法,以實(shí)現(xiàn)在任意版本的數(shù)據(jù)庫之間方便靈活的自動(dòng)升級。為了實(shí)現(xiàn)上述目的,本發(fā)明公開了一種關(guān)系數(shù)據(jù)庫應(yīng)用自動(dòng)升級的方法,用于實(shí)現(xiàn)從源版本數(shù)據(jù)庫到目的版本數(shù)據(jù)庫的升級,所述關(guān)系數(shù)據(jù)庫設(shè)置于計(jì)算機(jī)上,所述計(jì)算機(jī)上還設(shè)置有用于控制所述關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫自動(dòng)升級系統(tǒng),該方法包括如下步驟創(chuàng)建目的版本數(shù)據(jù)庫結(jié)構(gòu);所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述源版本數(shù)據(jù)庫結(jié)構(gòu),以獲得所述源版本數(shù)據(jù)庫結(jié)構(gòu)信息;所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述目的版本數(shù)據(jù)庫結(jié)構(gòu),以獲得所述目的版本數(shù)據(jù)庫結(jié)構(gòu)信息;對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略;依照所述升級策略執(zhí)行升級。所述對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略的步驟進(jìn)一步包括對于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)相對源版本數(shù)據(jù)庫結(jié)構(gòu)新增的數(shù)據(jù)表,生成創(chuàng)建所述數(shù)據(jù)表的升級策略;或者,對于只存在于所述源版本數(shù)據(jù)庫結(jié)構(gòu)而不存在于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)的數(shù)據(jù)表,生成忽略所述數(shù)據(jù)表的升級策略;或者,對于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)相對源版本數(shù)據(jù)庫結(jié)構(gòu)新增的字段,生成創(chuàng)建所述字段的升級策略;或者,對于只存在于所述源版本數(shù)據(jù)庫結(jié)構(gòu)而不存在于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)的字段,生成忽略所述字段的升級策略;或者,對于在所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)中的相同數(shù)據(jù)表的具有相容屬性的相同字段,生成直接升級的升級策略;或者,對于在所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)中同名的存儲過程、觸發(fā)器,生成直接替換升級的升級策略。所述對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略的步驟進(jìn)一步包括步驟1,所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)以所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表表名為索引,依次將目的版本數(shù)據(jù)庫的數(shù)據(jù)表的表名與源版本數(shù)據(jù)庫的每個(gè)數(shù)據(jù)表表名進(jìn)行對比,判斷是否相同,如果相同,轉(zhuǎn)步驟2,如果不同,轉(zhuǎn)步驟3;步驟2,以所述數(shù)據(jù)表中的字段名為索引,依次將所述目的版本數(shù)據(jù)庫的所述數(shù)據(jù)表中的字段名與所述源版本數(shù)據(jù)庫的所述數(shù)據(jù)表中的每個(gè)字段名進(jìn)行對比,以判斷是否相同,如果相同,轉(zhuǎn)步驟4,如果不同,轉(zhuǎn)步驟5;步驟3,生成在所述目的版本數(shù)據(jù)庫中創(chuàng)建所述數(shù)據(jù)表的升級策略,如果所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)步驟l,否則轉(zhuǎn)所述執(zhí)行升級的步驟;步驟4,判斷所述目的版本數(shù)據(jù)庫的所述字段的屬性是否與所述源版本數(shù)據(jù)庫的所述字段的屬性相容,如果相容,轉(zhuǎn)步驟6;步驟5,生成在所述目的版本數(shù)據(jù)庫的所述數(shù)據(jù)表中創(chuàng)建所述字段的升級策略,如果所述數(shù)據(jù)表的字段未全部對比結(jié)束,轉(zhuǎn)步驟2,如果所述數(shù)據(jù)表的字段已全部對比結(jié)束但所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)步驟1,如果均對比結(jié)束,轉(zhuǎn)所述執(zhí)行升級的步驟;步驟6,生成直接升級的升級策略,如果所述數(shù)據(jù)表的字段未全部對比結(jié)束,轉(zhuǎn)步驟2,如果所述數(shù)據(jù)表的字段已全部對比結(jié)束但所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)歩驟l,如果均對比結(jié)束,轉(zhuǎn)所述執(zhí)行升級的步驟。所述的方法,還包括為所述目的版本數(shù)據(jù)庫結(jié)構(gòu)中新增的字段填入已設(shè)置的缺省值。所述執(zhí)行所述直接升級的升級策略進(jìn)一步包括將所述源版本數(shù)據(jù)庫中所述數(shù)據(jù)表的所述字段的數(shù)據(jù)直接插入所述目的版本數(shù)據(jù)庫中所述數(shù)據(jù)表的所述字段中。所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)的步驟,是通過分析所述源、目的版本數(shù)據(jù)庫的系統(tǒng)表的方式實(shí)現(xiàn)的。所述對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略的步驟之后還包括以圖形用戶界面方式顯示所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,或者所述源、目的版本數(shù)據(jù)庫的數(shù)據(jù)表、字段的轉(zhuǎn)換關(guān)系圖。所述源、目的版本數(shù)據(jù)庫的數(shù)據(jù)表、字段的轉(zhuǎn)換關(guān)系圖可被手動(dòng)調(diào)整。所述依照所述升級策略進(jìn)行升級的步驟之后還包括執(zhí)行外掛升級補(bǔ)丁。所述步驟4之后還包括,如果不相容,執(zhí)行外掛升級補(bǔ)丁。本發(fā)明通過自動(dòng)分析升級源版本、目的版本的數(shù)據(jù)庫結(jié)構(gòu),自動(dòng)生成升級策略,真實(shí)、完整地反映了源版本、目的版本的數(shù)據(jù)庫信息,避免了定制編寫升級工具的主觀臆測可能導(dǎo)致的升級工具與現(xiàn)場版本的信息脫節(jié),可以方便靈活地完成任意版本之間的數(shù)據(jù)庫升級以及回滾。圖1為本發(fā)明的關(guān)系數(shù)據(jù)庫設(shè)置于一服務(wù)器上的整體結(jié)構(gòu)示意圖2為本發(fā)明數(shù)據(jù)庫的結(jié)構(gòu)示意圖3、4為本發(fā)明自動(dòng)升級的詳細(xì)步驟流程圖5為顯示在用戶操作顯示界面上的源、目的版本的數(shù)據(jù)庫結(jié)構(gòu)圖。具體實(shí)施例方式為了讓本發(fā)明的上述目的、優(yōu)點(diǎn)和特征能更清楚,以下結(jié)合實(shí)施例進(jìn)行詳細(xì)說明。但下述實(shí)施例與附圖并不用于限定本發(fā)明的范圍。本發(fā)明所實(shí)現(xiàn)的是一種關(guān)系數(shù)據(jù)庫應(yīng)用的自動(dòng)升級的方法。是針對基于商業(yè)關(guān)系數(shù)據(jù)庫系統(tǒng)開發(fā)的用戶數(shù)據(jù)庫系統(tǒng),即升級對象不是商業(yè)數(shù)據(jù)庫系統(tǒng)本身,而是用戶數(shù)據(jù)庫的內(nèi)容。圖1所示為本發(fā)明的關(guān)系數(shù)據(jù)庫設(shè)置于一服務(wù)器上的整體結(jié)構(gòu)示意圖。如圖所示,服務(wù)器1上設(shè)置有關(guān)系數(shù)據(jù)庫10,此處以單用戶數(shù)據(jù)庫系統(tǒng)為例,但不限于此。其中,具體的組成結(jié)構(gòu)包括數(shù)據(jù)庫自動(dòng)升級系統(tǒng)IOO、數(shù)據(jù)庫200、用戶操作顯示界面300、操作系統(tǒng)400。數(shù)據(jù)庫自動(dòng)升級系統(tǒng)100是為數(shù)據(jù)庫的建立、使用和維護(hù)而設(shè)置的軟件。它建立在操作系統(tǒng)400的基礎(chǔ)上,是位于操作系統(tǒng)與用戶之間的一種數(shù)據(jù)管理軟件,負(fù)責(zé)對數(shù)據(jù)庫應(yīng)用升級進(jìn)行統(tǒng)一的管理和控制。用戶通過用戶操作顯示界面300發(fā)出的或者應(yīng)用程序中的各種與升級操作相關(guān)的命令,都要通過數(shù)據(jù)庫自動(dòng)升級系統(tǒng)100來執(zhí)行。數(shù)據(jù)庫200中存儲有各種關(guān)系數(shù)據(jù)表以及系統(tǒng)數(shù)據(jù)表,具體描述見圖2。操作系統(tǒng)400為其他所有模塊提供運(yùn)行支撐環(huán)境。數(shù)據(jù)庫200可存儲有多個(gè)數(shù)據(jù)庫版本的數(shù)據(jù),如圖2所示,為當(dāng)前運(yùn)行的數(shù)據(jù)庫版本在數(shù)據(jù)庫200中的當(dāng)前版本存儲單元201的示意圖。其中包括關(guān)系數(shù)據(jù)表A1、A2、A3。以A1為例,Al中又包括多個(gè)字段B1、B2、B3,而每個(gè)字段又包括各自的屬性,譬如B1對應(yīng)C1、B2對應(yīng)C2、B3對應(yīng)C3,同時(shí)擁有其對應(yīng)的數(shù)據(jù)。當(dāng)前版本存儲單元201同時(shí)還包括sysobjects、sysindexes、syscolumns等多個(gè)系統(tǒng)表。該sysobjects系統(tǒng)表包括存儲數(shù)據(jù)庫內(nèi)的每個(gè)對象(數(shù)據(jù)表、約束、默認(rèn)值、日志、規(guī)則、存儲過程等)的基本信息。sysindexes系統(tǒng)表存儲有當(dāng)前數(shù)據(jù)庫中的各數(shù)據(jù)表的索引、行記錄等信息。syscolumns系統(tǒng)表存儲每個(gè)表和視圖中的字段屬性信息。系統(tǒng)表描述了數(shù)據(jù)庫的結(jié)構(gòu)特征。在用戶的實(shí)際應(yīng)用過程中,關(guān)系數(shù)據(jù)庫應(yīng)用的升級通常涉及:新增數(shù)據(jù)表、數(shù)據(jù)表增加屬性字段、數(shù)據(jù)表字段屬性擴(kuò)展。為了保證升級前后版本的兼容性,升級的過程應(yīng)該遵循以下原則1、新舊版本同一數(shù)據(jù)表表名應(yīng)該保持不變;2、新舊版本同一數(shù)據(jù)表中的同一字段其字段名應(yīng)該保持不變;3、同一字段升級前后其字段屬性應(yīng)相容;4、新增數(shù)據(jù)表直接增加;5、新增字段直接增加,如果設(shè)置了缺省值,則填入缺省值;6、舊版本中存在,但新版本沒有的數(shù)據(jù)表、字段,在升級過程中自動(dòng)忽略;7、對于同名的存儲過程、觸發(fā)器等數(shù)據(jù)庫對象直接替換升級。以下結(jié)合圖3、4說明本發(fā)明自動(dòng)升級的方法的詳細(xì)步驟。首先,創(chuàng)建目的版本數(shù)據(jù)庫結(jié)構(gòu)(步驟301)。用戶可以利用用戶操作顯示界面300輸入數(shù)據(jù),設(shè)置新版本的即目的版本的數(shù)據(jù)庫結(jié)構(gòu),并存儲在數(shù)據(jù)庫200的一新建數(shù)據(jù)庫存儲單元202中,與當(dāng)前版本存儲單元201類似的,該新建數(shù)據(jù)庫存儲單元202中還包括與該目的版本的數(shù)據(jù)庫結(jié)構(gòu)相應(yīng)的系統(tǒng)表。該目的版本數(shù)據(jù)庫可能相對源版本刪除了部分?jǐn)?shù)據(jù)表、增加了數(shù)據(jù)表、擴(kuò)充了字段或字段改變了屬性。如果此時(shí)用戶通過用戶操作顯示界面300發(fā)出升級的命令,則數(shù)據(jù)庫自動(dòng)升級系統(tǒng)100接到命令后,分別對源版本數(shù)據(jù)庫結(jié)構(gòu)以及目的版本數(shù)據(jù)庫結(jié)構(gòu)進(jìn)行掃描分析(步驟302)。對于源版本數(shù)據(jù)庫,可通過分析sysobjects等系統(tǒng)表的方式,獲得所有數(shù)據(jù)表、數(shù)據(jù)字段、存儲過程、觸發(fā)器、缺省值、索引等數(shù)據(jù)庫元素信息,通過分析syscolumns可獲得每個(gè)表的詳細(xì)信息。具體的掃描實(shí)現(xiàn)過程例如為Selectname,colid,usertype,length,prec,scale,Status,cDefaultfromsyscolumnswhereobject—name(id)二TableNameorderbyColID。并將分析結(jié)果按照特定格式存儲于數(shù)據(jù)庫200的當(dāng)前版本存儲單元201中。對于目的版本數(shù)據(jù)庫,采用同樣方法分析sysobjects、syscolumns等系統(tǒng)表,獲得目的版本數(shù)據(jù)庫所有信息,同樣按照特定格式存儲于數(shù)據(jù)庫200的新建數(shù)據(jù)庫存儲單元202中。該經(jīng)掃描分析后的目的版本的數(shù)據(jù)庫結(jié)構(gòu),可以做為模板信息,以便于一次掃描,后續(xù)可多次供數(shù)據(jù)庫自動(dòng)升級系統(tǒng)讀取。禾lj用數(shù)據(jù)庫自動(dòng)升級系統(tǒng)100對比分析源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,自動(dòng)生成升級策略(步驟303),該升級策略通過升級SQL腳本的方式體現(xiàn),自動(dòng)生成,對應(yīng)完成創(chuàng)建新數(shù)據(jù)表、觸發(fā)器、存儲過程等,或者實(shí)現(xiàn)舊數(shù)據(jù)表中提取數(shù)據(jù)插入到新數(shù)據(jù)表中,并把升級腳本存儲于數(shù)據(jù)庫中。該步驟303具體包括對于同名的存儲過程、觸發(fā)器等數(shù)據(jù)庫對象直接替換升級(步驟400)。如果不同名,則需要進(jìn)行重新創(chuàng)建。以目的版本數(shù)據(jù)庫的數(shù)據(jù)表表名為索引,依次將目的版本數(shù)據(jù)庫的數(shù)據(jù)表的表名與源版本數(shù)據(jù)庫的每個(gè)數(shù)據(jù)表表名進(jìn)行對比,判斷是否相同(步驟401)。如發(fā)現(xiàn)源、目的版本數(shù)據(jù)庫中具有相同表名,則認(rèn)為是同一張表,將對它們的表結(jié)構(gòu)進(jìn)一步對比分析,轉(zhuǎn)步驟402。否則就認(rèn)為是兩張不相關(guān)的數(shù)據(jù)表,無法對應(yīng)升級,除非用戶通過GUI(圖形用戶界面)方式手動(dòng)調(diào)整升級策略,并轉(zhuǎn)步驟404。在源、目的版本數(shù)據(jù)庫的所述相同數(shù)據(jù)表中,以字段名做為索引,依次將目的版本數(shù)據(jù)庫的字段名與源版本數(shù)據(jù)庫的每個(gè)字段名進(jìn)行對比,以判斷是否相同(步驟402)。如果在源、目的版本數(shù)據(jù)庫的相同數(shù)據(jù)表中具有相同的字段名,則對屬性進(jìn)行進(jìn)一步分析,轉(zhuǎn)步驟403,如果發(fā)現(xiàn)不同的字段,則認(rèn)為是兩個(gè)獨(dú)立的數(shù)據(jù)字段,無法對應(yīng)升級,除非用戶通過GUI方式手動(dòng)調(diào)整升級策略,并轉(zhuǎn)步驟405。在源、目的版本數(shù)據(jù)庫的相同數(shù)據(jù)表的相同字段中,判斷屬性是否相容(步驟403)。如果判斷目的版本數(shù)據(jù)庫中該字段屬性與源版本數(shù)據(jù)庫中該字段屬性完全不相容,則源版本數(shù)據(jù)庫中該字段所對應(yīng)的數(shù)據(jù)無法升級到目的版本數(shù)據(jù)庫中該數(shù)據(jù)表相應(yīng)字段中,依照升級原則,遇到該情況將采取拒絕升級的處理方式,但是用戶可通過執(zhí)行外掛升級補(bǔ)丁的方式實(shí)現(xiàn)升級(步驟4032),如果屬性完全相容,可以對應(yīng)升級(步驟4031),即目的版本中該字段的數(shù)據(jù)直接插入源版本的對應(yīng)字段中。所謂的屬性相容,即是指字符串容量增加,整型值容量增加,整型值轉(zhuǎn)化為字符串等。步驟404,這種情況可唯一對應(yīng)目的版本數(shù)據(jù)庫中的新增數(shù)據(jù)表的情況,因此在目的版本數(shù)據(jù)庫中直接創(chuàng)建該數(shù)據(jù)表。即如果存在目的版本數(shù)據(jù)庫中沒有某表而源版本數(shù)據(jù)庫中有該表的情況,則該以目的版本中數(shù)據(jù)表名為索引進(jìn)行對比的方式,可以直接忽略該數(shù)據(jù)表。步驟405,這種情況可唯一對應(yīng)目的版本數(shù)據(jù)庫對應(yīng)數(shù)據(jù)表內(nèi)的新增字段的情況,直接創(chuàng)建該字段,如果設(shè)置了缺省值,則填入缺省值。以本發(fā)明所述方法進(jìn)行對比,可直接忽略目的版本數(shù)據(jù)庫中沒有而源版本數(shù)據(jù)庫中有的字段。所述步驟4031、4032、405之后還包括,如果所述數(shù)據(jù)表的字段未全部對比結(jié)束,轉(zhuǎn)步驟402繼續(xù)完成對比,如果所述數(shù)據(jù)表的字段已全部對比結(jié)束但所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)步驟401,如果均對比結(jié)束,繼續(xù)后續(xù)的步驟。所述步驟404之后還包括,如果所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)步驟401,否則繼續(xù)后續(xù)的步驟。上述判斷過程中所自動(dòng)生成的,如對應(yīng)升級、增加字段/表名或直接忽略的升級策略,以升級腳本的方式自動(dòng)生成,以供執(zhí)行升級時(shí)的調(diào)用。而所謂對應(yīng)升級的策略,既是源版本數(shù)據(jù)庫中的數(shù)據(jù)可直接存儲于目的版本數(shù)據(jù)庫的對應(yīng)位置。直接忽略的策略,既是源版本數(shù)據(jù)庫中的相應(yīng)數(shù)據(jù),被忽略,不能存儲于目的版本數(shù)據(jù)庫中。上述判斷過程表明,源版本數(shù)據(jù)庫中存在,但目的版本沒有的數(shù)據(jù)表、字段,在升級過程中自動(dòng)忽略;這些數(shù)據(jù)表應(yīng)該是在目的版本數(shù)據(jù)庫中被廢棄了,或者是一些臨時(shí)表,沒有必要進(jìn)行升級。當(dāng)然,如果有些數(shù)據(jù)表是在工作過程中動(dòng)態(tài)生成的,需要升級到目的版本中,則用戶可后繼通過GUI方式手動(dòng)設(shè)置升級。目的版本中新增的數(shù)據(jù)表、字段都直接增加。上述掃描后的源、目的版本數(shù)據(jù)庫結(jié)構(gòu)特性,以及生成的升級策略將以GUI形式在用戶操作顯示界面300上呈現(xiàn)給用戶,以供用戶確認(rèn),用戶也可以手動(dòng)調(diào)整上述升級策略(步驟304)。如果得到確認(rèn),用戶將通過用戶操作顯示界面300發(fā)出升級的指令,啟動(dòng)升級的過程,則數(shù)據(jù)庫將按照己經(jīng)設(shè)置的升級策略進(jìn)行升級(步驟305),即執(zhí)行升級策略對應(yīng)的SQL升級腳本,則升級完成。但對于以下非常規(guī)情況需要依賴于用戶自定義升級策略,或者外掛升級補(bǔ)丁完成1、表名、字段名更改;2、不同名的數(shù)據(jù)表、字段之間的數(shù)據(jù)轉(zhuǎn)換;3、新增數(shù)據(jù)表、新增字段的批量賦值。面對上述情況時(shí),用戶可在步驟304通過GUI方式進(jìn)行手動(dòng)設(shè)置升級策略,同時(shí)在步驟305后,還需執(zhí)行步驟306,即執(zhí)行外掛升級補(bǔ)丁的步驟。以下以一個(gè)學(xué)生信息管理系統(tǒng)為例,描述本發(fā)明的實(shí)現(xiàn)過程。學(xué)生信息管理系統(tǒng)V1.0包括四張數(shù)據(jù)表學(xué)生基本信息表、學(xué)生歷史信息表、學(xué)生成績跟蹤表、班級師資配置表。其中學(xué)生基本信息表包括以下字段:姓名、性別、出生年月、班級。姓名字段的屬性為字符型,并且支持8個(gè)字符以適用于最長4個(gè)漢字的名字。用戶通過用戶操作顯示界面建立了新版本的學(xué)生信息管理系統(tǒng)V2.0的整體結(jié)構(gòu),并保存在服務(wù)器中。其所進(jìn)行的功能擴(kuò)展包括增加了學(xué)生身體素質(zhì)跟蹤表、學(xué)生社會活動(dòng)跟蹤表。同時(shí),對于學(xué)生基本信息表,也作了如下變化1、擴(kuò)展了"姓名"字段的屬性,擴(kuò)展到40個(gè)字符的表示范圍;2、增加了新字段"聯(lián)系方式"、"父親"、"母親"、"家庭住址"。由于學(xué)生信息管理系統(tǒng)VI.0中已經(jīng)有了幾千人的學(xué)生信息,為了將VI.0中的數(shù)據(jù)表內(nèi)容同步到V2.0中,就需要進(jìn)行該數(shù)據(jù)庫的升級。用戶隨即通過用戶操作顯示界面,譬如利用鍵盤輸入指令的方式,發(fā)出升級命令。數(shù)據(jù)庫自動(dòng)升級系統(tǒng)100對源、目的版本的數(shù)據(jù)庫結(jié)構(gòu)特點(diǎn)進(jìn)行掃描對比后,在用戶操作顯示界面上顯示如圖5所示的源、目的版本的數(shù)據(jù)庫結(jié)構(gòu)圖。這里主要顯示了數(shù)據(jù)表、表字段的信息,當(dāng)然,還可以逐層細(xì)化顯示字段的類型、大小、缺省值等約束條件,存儲過程等數(shù)據(jù)庫元素信息,以及升級策略中各數(shù)據(jù)表、字段的轉(zhuǎn)換關(guān)系圖,以使用戶更加清晰直觀的了解升級的過程。經(jīng)過掃描對比發(fā)現(xiàn),V2.0新增了表名"學(xué)生身體素質(zhì)跟蹤表"、"學(xué)生社會活動(dòng)跟蹤表",新增了字段"聯(lián)系方式"、"父親"、"母親"、"家庭住址",擴(kuò)展了"姓名"字段的屬性。對于新增表,由于V1.0中沒有相關(guān)內(nèi)容,因此直接增加新表即可,而新增的字段則自動(dòng)創(chuàng)建該字段并填入缺省值即可。"姓名"字段由于屬性的擴(kuò)展是前后相容的,故也可直接升級。數(shù)據(jù)庫自動(dòng)升級系統(tǒng)100相應(yīng)生成的升級腳本例如為Createtable學(xué)生身體素質(zhì)跟蹤表(Namechar(20)NULL,HealthStatusTINY頂TNULLDEFAULTO,DetailInfchar(200))Createtable學(xué)生社會活動(dòng)跟蹤表(Namechar(20)NULL,SocialActchar(200))Createtablenew學(xué)生基本信息表(NameChar(20)NULL,GenderTINYINTNULLDEFAULT0,BirthChar(20)NULL,ClassChar(20)NULL,ContactChar(20)NULL,FatherChar(20)NULL,MotherChar(20)NULL,AddrChar(50)NULL)Insertintonew學(xué)生基本信息表selectName,Gender,Birth,Class,NULL,NULL,NULL,NULLfrom學(xué)生基本信息表renametable學(xué)牛.基本信息表old學(xué)生基本信息表renametablenew學(xué)生基本信息表學(xué)生基本信息表如果用戶需要改變表名進(jìn)行對應(yīng)升級時(shí),例如,欲將"學(xué)生歷史信息表"的內(nèi)容升級入"學(xué)生成績跟蹤表"內(nèi),可在如圖5所示界面時(shí),手動(dòng)調(diào)整數(shù)據(jù)的升級關(guān)聯(lián),通過外掛升級補(bǔ)丁實(shí)現(xiàn)。當(dāng)用戶對源、目的版本的數(shù)據(jù)庫結(jié)構(gòu)圖/轉(zhuǎn)換圖以及升級腳本審查確認(rèn)通過時(shí),發(fā)出確認(rèn)升級命令,則數(shù)據(jù)庫自動(dòng)升級系統(tǒng)將依照升級腳本的內(nèi)容進(jìn)行升級。如果用戶需要進(jìn)行非常規(guī)情況的升級,則還需額外啟動(dòng)執(zhí)行某些外掛升級補(bǔ)丁,從而完成升級的過程。本發(fā)明所述方法還可逆向執(zhí)行,即從當(dāng)前版本回滾到先前的版本,使得數(shù)據(jù)庫管理更加便利。本發(fā)明通過自動(dòng)分析升級源版本、目的版本的數(shù)據(jù)庫結(jié)構(gòu),自動(dòng)生成升級策略,真實(shí)、完整地反映了源版本、目的版本的數(shù)據(jù)庫信息,避免了定制編寫升級工具的主觀臆測可能導(dǎo)致的升級工具與現(xiàn)場版本的信息脫節(jié),可以方便靈活地完成任意版本之間的數(shù)據(jù)庫升級以及回滾。以上所述僅為本發(fā)明的最佳可行實(shí)施例,非拘限本發(fā)明的專利范圍,凡運(yùn)用本發(fā)明說明書及附圖所做的等效變化,均同理包括于本發(fā)明的范圍內(nèi)。權(quán)利要求1、一種關(guān)系數(shù)據(jù)庫應(yīng)用自動(dòng)升級的方法,用于實(shí)現(xiàn)從源版本數(shù)據(jù)庫到目的版本數(shù)據(jù)庫的升級,所述關(guān)系數(shù)據(jù)庫設(shè)置于計(jì)算機(jī)上,所述計(jì)算機(jī)上還設(shè)置有用于控制所述關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫自動(dòng)升級系統(tǒng),其特征在于,該方法包括如下步驟創(chuàng)建目的版本數(shù)據(jù)庫結(jié)構(gòu);所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述源版本數(shù)據(jù)庫結(jié)構(gòu),以獲得所述源版本數(shù)據(jù)庫結(jié)構(gòu)信息;所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述目的版本數(shù)據(jù)庫結(jié)構(gòu),以獲得所述目的版本數(shù)據(jù)庫結(jié)構(gòu)信息;對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略;依照所述升級策略執(zhí)行升級。2、如權(quán)利要求l所述的方法,其特征在于,對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略的步驟進(jìn)一步包括對于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)相對源版本數(shù)據(jù)庫結(jié)構(gòu)新增的數(shù)據(jù)表,生成創(chuàng)建所述數(shù)據(jù)表的升級策略;或者,對于只存在于所述源版本數(shù)據(jù)庫結(jié)構(gòu)而不存在于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)的數(shù)據(jù)表,生成忽略所述數(shù)據(jù)表的升級策略;或者,對于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)相對源版本數(shù)據(jù)庫結(jié)構(gòu)新增的字段,生成創(chuàng)建所述字段的升級策略;或者,對于只存在于所述源版本數(shù)據(jù)庫結(jié)構(gòu)而不存在于所述目的版本數(shù)據(jù)庫結(jié)構(gòu)的字段,生成忽略所述字段的升級策略;或者,對于在所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)中的相同數(shù)據(jù)表的具有相容屬性的相同字段,生成直接升級的升級策略;或者,對于在所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)中同名的存儲過程、觸發(fā)器,生成直接替換升級的升級策略。3、如權(quán)利要求2所述的方法,其特征在于,對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略的步驟進(jìn)一步包括步驟1,所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)以所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表表名為索引,依次將目的版本數(shù)據(jù)庫的數(shù)據(jù)表的表名與源版本數(shù)據(jù)庫的每個(gè)數(shù)據(jù)表表名進(jìn)行對比,判斷是否相同,如果相同,轉(zhuǎn)步驟2,如果不同,轉(zhuǎn)步驟3;步驟2,以所述數(shù)據(jù)表中的字段名為索引,依次將所述目的版本數(shù)據(jù)庫的所述數(shù)據(jù)表中的字段名與所述源版本數(shù)據(jù)庫的所述數(shù)據(jù)表中的每個(gè)字段名進(jìn)行對比,以判斷是否相同,如果相同,轉(zhuǎn)步驟4,如果不同,轉(zhuǎn)步驟5;步驟3,生成在所述目的版本數(shù)據(jù)庫中創(chuàng)建所述數(shù)據(jù)表的升級策略,如果所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)步驟l,否則轉(zhuǎn)所述執(zhí)行升級的步驟;步驟4,判斷所述目的版本數(shù)據(jù)庫的所述字段的屬性是否與所述源版本數(shù)據(jù)庫的所述字段的屬性相容,如果相容,轉(zhuǎn)步驟6;步驟5,生成在所述目的版本數(shù)據(jù)庫的所述數(shù)據(jù)表中創(chuàng)建所述字段的升級策略,如果所述數(shù)據(jù)表的字段未全部對比結(jié)束,轉(zhuǎn)步驟2,如果所述數(shù)據(jù)表的字段己全部對比結(jié)束但所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)步驟1,如果均對比結(jié)束,轉(zhuǎn)所述執(zhí)行升級的步驟;步驟6,生成直接升級的升級策略,如果所述數(shù)據(jù)表的字段未全部對比結(jié)束,轉(zhuǎn)步驟2,如果所述數(shù)據(jù)表的字段已全部對比結(jié)束但所述目的版本數(shù)據(jù)庫的數(shù)據(jù)表未全部對比結(jié)束,轉(zhuǎn)步驟l,如果均對比結(jié)束,轉(zhuǎn)所述執(zhí)行升級的步驟。4、如權(quán)利要求3所述的方法,其特征在于,還包括為所述目的版本數(shù)據(jù)庫結(jié)構(gòu)中新增的字段填入已設(shè)置的缺省值。5、如權(quán)利要求2所述的方法,其特征在于,執(zhí)行所述直接升級的升級策略進(jìn)一步包括將所述源版本數(shù)據(jù)庫中所述數(shù)據(jù)表的所述字段的數(shù)據(jù)直接插入所述目的版本數(shù)據(jù)庫中所述數(shù)據(jù)表的所述字段中。6、如權(quán)利要求l、2、3、4或5所述的方法,其特征在于,所述數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)的步驟,是通過分析所述源、目的版本數(shù)據(jù)庫的系統(tǒng)表的方式實(shí)現(xiàn)的。7、如權(quán)利要求l、2、3、4或5所述的方法,其特征在于,對比分析所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略的步驟之后還包括以圖形用戶界面方式顯示所述源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,或者所述源、目的版本數(shù)據(jù)庫的數(shù)據(jù)表、字段的轉(zhuǎn)換關(guān)系圖。8、如權(quán)利要求7所述的方法,其特征在于,所述源、目的版本數(shù)據(jù)庫的數(shù)據(jù)表、字段的轉(zhuǎn)換關(guān)系圖可被手動(dòng)調(diào)整。9、如權(quán)利要求7所述的方法,其特征在于,所述依照所述升級策略進(jìn)行升級的步驟之后還包括-執(zhí)行外掛升級補(bǔ)丁。10、如權(quán)利要求3所述的方法,其特征在于,所述步驟4之后還包括,如果不相容,執(zhí)行外掛升級補(bǔ)丁。全文摘要本發(fā)明公開了一種關(guān)系數(shù)據(jù)庫應(yīng)用自動(dòng)升級的方法,包括如下步驟創(chuàng)建目的版本數(shù)據(jù)庫結(jié)構(gòu);數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述源版本數(shù)據(jù)庫結(jié)構(gòu),以獲得所述源版本數(shù)據(jù)庫結(jié)構(gòu)信息;數(shù)據(jù)庫自動(dòng)升級系統(tǒng)掃描分析所述目的版本數(shù)據(jù)庫結(jié)構(gòu),以獲得所述目的版本數(shù)據(jù)庫結(jié)構(gòu)信息;對比分析源、目的版本數(shù)據(jù)庫結(jié)構(gòu)信息,生成升級策略;依照升級策略執(zhí)行升級。本發(fā)明通過自動(dòng)分析升級源版本、目的版本的數(shù)據(jù)庫結(jié)構(gòu),自動(dòng)生成升級策略,真實(shí)、完整地反映了源版本、目的版本的數(shù)據(jù)庫信息,避免了定制編寫升級工具的主觀臆測可能導(dǎo)致的升級工具與現(xiàn)場版本的信息脫節(jié),可以方便靈活地完成任意版本之間的數(shù)據(jù)庫升級以及回滾。文檔編號G06F17/30GK101183361SQ20061011452公開日2008年5月21日申請日期2006年11月13日優(yōu)先權(quán)日2006年11月13日發(fā)明者鐘衛(wèi)東申請人:中興通訊股份有限公司