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