本公開涉及計算機
技術領域:
:,具體涉及一種數(shù)據(jù)庫腳本部署裝置和數(shù)據(jù)庫腳本部署方法。
背景技術:
::數(shù)據(jù)庫腳本的源代碼管理與其他語言無異,主要問題在于腳本的部署。通常,部署數(shù)據(jù)庫腳本有以下3種方式:1.通過plsql工具執(zhí)行,但不支持批量腳本的執(zhí)行;2.通過oracle的客戶端sqlplus執(zhí)行,但同樣不支持批量腳本的執(zhí)行;3.手工編輯“部署腳本”文本,而后在plsql工具或sqlplus客戶端執(zhí)行該“部署腳本”。在系統(tǒng)功能簡單的情況下可以采用第1種和第2種數(shù)據(jù)庫部署方式,但隨著系統(tǒng)功能特性復雜度的增加,需要部署的腳本文件逐漸增多,開始過渡到第3種數(shù)據(jù)庫部署方式,然而,如果開發(fā)之初即開始編輯該“部署腳本”,開發(fā)過程中被部署腳本有更名、廢棄等變化,則均需對該“部署腳本”進行更新;如果開發(fā)完畢后再開始編輯該“部署腳本”,需要被部署腳本非常多,則有的腳本可以能會被遺漏。技術實現(xiàn)要素:本公開的目的在于提供一種數(shù)據(jù)庫腳本部署裝置和數(shù)據(jù)庫腳本部署方法,用于至少在一定程度上克服由于相關技術的限制和缺陷而導致的一個或多個問題。本公開的其他特性和優(yōu)點將通過下面的詳細描述變得顯然,或部分地通過本公開的實踐而習得。根據(jù)本公開的第一方面,公開了一種數(shù)據(jù)庫腳本部署裝置,包括:讀 取單元,用于讀取預存的多個數(shù)據(jù)庫腳本的信息;部署腳本生成單元,連接至所述讀取單元,用于根據(jù)預置的數(shù)據(jù)庫腳本類別與腳本類別登記表的對應關系,將讀取的多個數(shù)據(jù)庫腳本信息分別記錄在對應的腳本類別登記表中,以及按照預定義順序將經(jīng)過記錄的腳本類別登記表的信息寫入同一腳本中,以生成部署腳本;執(zhí)行單元,連接至所述部署腳本生成單元,用于對數(shù)據(jù)庫執(zhí)行所述部署腳本,以完成所述多個數(shù)據(jù)庫腳本的批量部署。在本公開的一種示例實施方式中,所述執(zhí)行單元采用預設的第一批處理命令執(zhí)行所述部署腳本,或采用數(shù)據(jù)庫客戶端執(zhí)行所述部署腳本。在本公開的一種示例實施方式中,所述部署腳本生成單元還用于采用數(shù)據(jù)庫語法分析算法對所述多個數(shù)據(jù)庫腳本進行語義分析,獲取所述多個數(shù)據(jù)庫腳本之間的動作順序信息,并根據(jù)所述動作順序信息生成第二批處理命令,以供所述執(zhí)行單元運行。在本公開的一種示例實施方式中,所述部署腳本生成單元采用在操作系統(tǒng)下自動執(zhí)行的批處理腳本完成所述部署腳本的生成過程。在本公開的一種示例實施方式中,所述執(zhí)行單元還用于在所述部署腳本的語句類型是數(shù)據(jù)庫定義語句或控制語句時,將所述部署腳本和回滾腳本同時提交給所述數(shù)據(jù)庫,若部署結果出現(xiàn)錯誤,則執(zhí)行所述回滾腳本,以及在所述部署腳本的語句類型是數(shù)據(jù)操作語句時,若部署結果出現(xiàn)錯誤,則執(zhí)行回滾命令。根據(jù)本公開的第二方面,公開了一種數(shù)據(jù)庫腳本部署方法,包括:讀取預存的多個數(shù)據(jù)庫腳本的信息;根據(jù)預置的數(shù)據(jù)庫腳本類別與腳本類別登記表的對應關系,將讀取的多個數(shù)據(jù)庫腳本信息分別記錄在對應的腳本類別登記表中,以及將經(jīng)過記錄的腳本類別登記表的信息寫入同一腳本中,以生成部署腳本;對數(shù)據(jù)庫執(zhí)行所述部署腳本,以完成所述多個數(shù)據(jù)庫腳本的批量部署。在本公開的一種示例實施方式中,采用預設的第一批處理命令執(zhí)行所述部署腳本,或采用數(shù)據(jù)庫客戶端執(zhí)行所述部署腳本。在本公開的一種示例實施方式中,采用數(shù)據(jù)庫語法分析算法對所述多個數(shù)據(jù)庫腳本進行語義分析,獲取所述多個數(shù)據(jù)庫腳本之間的動作順序信息,并根據(jù)所述動作順序信息生成第二批處理命令;采用所述第二批處理 命令執(zhí)行所述部署腳本。在本公開的一種示例實施方式中,采用在操作系統(tǒng)下自動執(zhí)行的批處理腳本完成所述部署腳本的生成過程。在本公開的一種示例實施方式中,在所述部署腳本的語句類型是數(shù)據(jù)庫定義語句或控制語句時,將所述部署腳本和回滾腳本同時提交給所述數(shù)據(jù)庫,若部署結果出現(xiàn)錯誤,則執(zhí)行所述回滾腳本;以及在所述部署腳本的語句類型是數(shù)據(jù)操作語句時,若部署結果出現(xiàn)錯誤,則執(zhí)行回滾命令。本公開的示例實施方式所提供的數(shù)據(jù)庫腳本部署裝置和方法,可以自動生成用于批量部署數(shù)據(jù)庫腳本的部署腳本,采用批處理命令來執(zhí)行該部署腳本,提高了部署效率,此外,還考慮到數(shù)據(jù)庫腳本之間的交叉引用,分析出數(shù)據(jù)庫腳本之間的動作順序關系,在部署時按照該動作順序關系來執(zhí)行,從而提高了部署準確率,并且設置了“錯誤回滾”機制,進一步提高了數(shù)據(jù)庫腳本部署效率。附圖說明通過參照附圖詳細描述其示例實施方式,本公開的上述和其它特征及優(yōu)點將變得更加明顯。圖1是本公開示例實施方式中一種數(shù)據(jù)庫腳本部署方法的流程圖;圖2是本公開示例實施方式中自動生成的部署腳本腳截圖;圖3是本公開示例實施方式中日志文件截圖;圖4是本發(fā)明實施例中提供的一種電子設備的結構示意圖;圖5是本發(fā)明實施例中提供的一種數(shù)據(jù)庫腳本部署裝置的結構示意圖。具體實施方式現(xiàn)在將參考附圖更全面地描述示例實施方式。然而,示例實施方式能夠以多種形式實施,且不應被理解為限于在此闡述的實施方式;相反,提供這些實施方式使得本公開將全面和完整,并將示例實施方式的構思全面地傳達給本領域的技術人員。在圖中,為了清晰,夸大了區(qū)域和層的厚度。在圖中相同的附圖標記表示相同或類似的結構,因而將省略它們的詳細描 述。此外,所描述的特征、結構或特性可以以任何合適的方式結合在一個或更多實施例中。在下面的描述中,提供許多具體細節(jié)從而給出對本公開的實施例的充分理解。然而,本領域技術人員將意識到,可以實踐本公開的技術方案而沒有所述特定細節(jié)中的一個或更多,或者可以采用其它的方法、組元、材料等。在其它情況下,不詳細示出或描述公知結構、材料或者操作以避免模糊本公開的各方面。本示例實施方式中,首先提供了一種數(shù)據(jù)庫腳本部署方法。參考圖1中所示,示意出了該數(shù)據(jù)庫腳本部署方法的一種流程圖。如圖1所示,該數(shù)據(jù)庫腳本部署方法可以包括以下步驟:步驟101,讀取預存的多個數(shù)據(jù)庫腳本的信息。數(shù)據(jù)庫腳本的類別繁多,本示例實施方式中,可以將其大致分類如下:表:文件擴展名為tab,tab,table,table視圖:文件擴展名為vw,vw,view,view包頭:文件擴展名為spec,spec,spc,spc同義詞:文件擴展名為syn,syn對于每一數(shù)據(jù)庫腳本,可以獲取該數(shù)據(jù)庫腳本的存儲目錄路徑(數(shù)據(jù)庫腳本通常會按照某種固定格式存放在系統(tǒng)的某個目錄下,例如,c:\deployment\client_54)。根據(jù)數(shù)據(jù)庫腳本的存儲目錄路徑,讀取該目錄下的所有子目錄和一級文件信息以及各子目錄下的所有二級文件信息,直到所有文件信息讀取完畢,假設本實施例中只有第一文件和二級文件。但本領域技術人員容易理解的是,在具有更多級目錄級別的情形下,本示例實施方式中的數(shù)據(jù)庫腳本部署方法同樣適用。步驟102,根據(jù)預置的數(shù)據(jù)庫腳本類別與腳本類別登記表的對應關系,將讀取的多個數(shù)據(jù)庫腳本信息分別記錄在對應的腳本類別登記表中,以及將經(jīng)過記錄的腳本類別登記表的信息寫入同一腳本中,以生成部署腳本。根據(jù)數(shù)據(jù)庫腳本的類別以及可以輕松添加需要部署的數(shù)據(jù)庫腳本類別的目的,初始化一個類似于腳本類別登記表的結構(即數(shù)據(jù)庫腳本類別與腳本類別登記表的對應關系),由于“可擴展”的要求,所以其類別可 以是動態(tài)的,該腳本類別登記表結構可以參考下表所示:腳本類別腳本登記表表表的腳本登記表視圖視圖腳本登記表同義詞同義詞腳本登記表其他其他定義了腳本類別登記表結構之后,生成部署腳本的過程可以如下:對于每一一級文件信息或每一二級文件信息,根據(jù)文件的擴展名獲取對應的腳本類別登記表,將文件的文件名和絕對存儲路徑記錄在其對應的腳本類別登記表中。最后,按照預定義的順序,可以將前面得到的腳本類別登記表的信息寫入在同一腳本中,得到部署腳本。其中,所述預定義的順序例如按照“表”、“視圖”、“同義詞”的順序將腳本類別登記表的信息部署腳本中,該順序遵循了常規(guī)的數(shù)據(jù)庫程序的部署順序但本發(fā)明并不以此為限,其余可用于腳本部署順序的方式均在本發(fā)明創(chuàng)新思想之內(nèi)。在本實施例中,可以采用部署工具來完成部署腳本的生成過程,可以將該部署工具實現(xiàn)為在windows操作系統(tǒng)下自動執(zhí)行的批處理腳本maker.bat,其內(nèi)容可以參考如下所示:e:\java–cp“e:\devel\ref\xml\jdom.jar;e:\devel\ref\cpastools\deployer.jar”deployer.mainmaker.bat執(zhí)行完畢后,會生成部署腳本deploy.sql,截圖內(nèi)容例如可以如圖2中所示。步驟103,對數(shù)據(jù)庫執(zhí)行生成的部署腳本,以完成多個數(shù)據(jù)庫腳本的批量部署。在步驟103中,可以采用預設的第一批處理命令執(zhí)行部署腳本,或采用oracle客戶端等數(shù)據(jù)庫客戶端執(zhí)行部署腳本。在采用批處理命令來執(zhí)行部署腳本時,可以不打開數(shù)據(jù)庫,直接部署腳本,由于打開數(shù)據(jù)庫會自動運行一些函數(shù),因此采用這種方式能夠進一步提高執(zhí)行效率。另外,打開 數(shù)據(jù)庫時可能由于誤操作而造成數(shù)據(jù)丟失或腳本丟失,因此通過批處理而不打開數(shù)據(jù)庫的方式更為安全有效。批處理命令可以如clien_54_deploy.bat,內(nèi)容如下:sqlplusclient_54/sql@tkcpas@”deploy.sql”在數(shù)據(jù)庫腳本部署完畢后,可以通過查看日志文件獲取部署結果,確認是否所有腳本已經(jīng)被全部正確部署完畢,該日志文件截圖內(nèi)容例如可以如圖3中所示。按照schema、授權、同義詞、表、視圖、存儲過程、其他類別對象這樣的順序來執(zhí)行部署動作,基本上可以滿足絕大部分場景的需要,但如果遇上復雜的功能,需要部署的數(shù)據(jù)庫腳本數(shù)量比較多,例如,涉及到待部署的數(shù)據(jù)庫腳本之間的交叉引用,則在部署過程中需要比較多的人工干預。舉例而言,文件ta1.table,其內(nèi)容例如為:altertableta1addcolumncolumn10varchar2(10);文件va1.view,其內(nèi)容例如為:createviewva1asselectcolumn1,column10fromta1。文件ta1.table的腳本是為表ta1添加一列column1,而文件va1.view的腳本是創(chuàng)建一個基于表ta1,包含column10的視圖,因此ta1.table的執(zhí)行須在va1.view之前,這就涉及到數(shù)據(jù)庫腳本之間的動作順序信息。當然,這是最簡單的場景,僅作為示例,并非用于限定本示例實施方式中腳本部署方法的適用場景,在更復雜的場景下,本示例實施方式中的數(shù)據(jù)庫腳本部署方法同樣適用。在本實施例中,為了減少人工干預,提供了一種示例性的解決方法:例如,可以采用sql語法分析算法等語法分析算法對需要部署的多個數(shù)據(jù)庫腳本進行語義分析,獲取該多個數(shù)據(jù)庫腳本之間的動作順序信息,并根據(jù)該動作順序信息生成第二批處理命令;采用第二批處理命令執(zhí)行部署腳本。同樣地,為了提高效率,在此采用批處理命令來執(zhí)行部署腳本。這樣,不需要人工干預就可以按照數(shù)據(jù)庫腳本的實際動作順序來完成數(shù)據(jù)庫腳本部署。在數(shù)據(jù)庫腳本部署中,難免會發(fā)生部署錯誤或失敗的情形,如果通過人工進行恢復,不僅費時費力,而且容易導致進一步的錯誤。為了避免部署失敗后,通過人工進行恢復,本示例實施方式中還設計了錯誤回滾機制。數(shù)據(jù)庫部署腳本可以分為3類:1.ddl即數(shù)據(jù)庫定義語句,如結構的調(diào)整,視圖的建立;2.dml即數(shù)據(jù)操作語句,如增加數(shù)據(jù),刪除數(shù)據(jù)等;3.dcl即控制語句,如數(shù)據(jù)庫對象的授權等等。在部署腳本的語句類型是數(shù)據(jù)庫定義語句或控制語句時,將部署腳本和回滾腳本同時提交給數(shù)據(jù)庫,若部署結果出現(xiàn)錯誤,則執(zhí)行改回滾腳本(在回滾腳本中定義了回滾位置)。這樣一旦部署失敗,可以統(tǒng)一執(zhí)行回滾腳本。這里仍以執(zhí)行控制順序中ta1.table和va1.view為例,假設ta1.table和va1.view的部署為一個原子事務,如果ta1.table部署成功,而va1.view部署失敗,則需要回滾ta1.table的腳本操作,即刪除掉tab1新增的column10。在部署腳本的語句類型是數(shù)據(jù)操作語句時,若部署結果出現(xiàn)錯誤,則執(zhí)行回滾命令。通過上述方法,在部署發(fā)生異常時,不需要部署人員靠閱讀部署日志來進行排錯,通過錯誤回滾機制,自動排除錯誤,不僅減少了部署人員的工作量,也提高了部署準確率。需要說明的是,盡管在附圖中以特定順序描述了本公開中方法的各個步驟,但是,這并非要求或者暗示必須按照該特定順序來執(zhí)行這些步驟,或是必須執(zhí)行全部所示的步驟才能實現(xiàn)期望的結果。附加的或備選的,可以省略某些步驟,將多個步驟合并為一個步驟執(zhí)行,以及/或者將一個步驟分解為多個步驟執(zhí)行等。圖4示出了根據(jù)本申請的一示例性實施例的電子設備的示意結構圖。請參考圖4,在硬件層面,該電子設備包括處理器、內(nèi)部總線、網(wǎng)絡接口、內(nèi)存以及非易失性存儲器,當然還可以能包括其他業(yè)務所需要的硬件。處理器從非易失性存儲器中讀取對應的計算機程序到內(nèi)存中然后運行,在邏輯層面上形成數(shù)據(jù)庫腳本部署裝置。當然,除了軟件實現(xiàn)方式之外,本申請并不排除其他實現(xiàn)方式,比如邏輯器件抑或軟硬件結合的方式等等,也就是說以下處理流程的執(zhí)行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。請參考圖5,在軟件實施方式中,當上述電子設備采用圖5所示的處理方式時,該數(shù)據(jù)庫腳本部署裝置可以包括讀取單元、部署腳本生成單元 和執(zhí)行單元。其中:讀取單元502,用于讀取預存的多個數(shù)據(jù)庫腳本的信息;部署腳本生成單元504,連接至讀取單元502,用于根據(jù)預置的數(shù)據(jù)庫腳本類別與腳本類別登記表的對應關系,將讀取的多個數(shù)據(jù)庫腳本信息分別記錄在對應的腳本類別登記表中,以及按照預定義順序將經(jīng)過記錄的腳本類別登記表的信息寫入同一腳本中,以生成部署腳本;執(zhí)行單元506,連接至部署腳本生成單元504,用于對數(shù)據(jù)庫執(zhí)行部署腳本,以完成多個數(shù)據(jù)庫腳本的批量部署。其中,執(zhí)行單元506采用預設的第一批處理命令執(zhí)行部署腳本,或采用oracle客戶端執(zhí)行部署腳本。部署腳本生成單元504采用在操作系統(tǒng)下自動執(zhí)行的批處理腳本完成所述部署腳本的生成過程。為了解決數(shù)據(jù)庫腳本交叉引用的動作順序部署問題,部署腳本生成單元504還用于采用sql語法分析算法對所述多個數(shù)據(jù)庫腳本進行語義分析,獲取所述多個數(shù)據(jù)庫腳本之間的動作順序信息,并根據(jù)所述動作順序信息生成第二批處理命令,以供所述執(zhí)行單元運行。為了提高部署效率和準確率,執(zhí)行單元506還用于在部署腳本的語句類型是數(shù)據(jù)庫定義語句或控制語句時,將部署腳本和回滾腳本同時提交給數(shù)據(jù)庫,若部署結果出現(xiàn)錯誤,則執(zhí)行回滾腳本,以及在部署腳本的語句類型是數(shù)據(jù)操作語句時,若部署結果出現(xiàn)錯誤,則執(zhí)行回滾命令。通過本發(fā)明,可以自動生成用于批量部署數(shù)據(jù)庫腳本的部署腳本,采用批處理命令來執(zhí)行該部署腳本,大大提高了部署效率,此外,還考慮到數(shù)據(jù)庫腳本之間的交叉引用,分析出數(shù)據(jù)庫腳本之間的動作順序關系,在部署時按照該動作順序關系來執(zhí)行,從而提高了部署準確率,并且設置了“錯誤回滾”機制,進一步提高了數(shù)據(jù)庫腳本部署效率。對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可以。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本發(fā)明方案的目的。本領域普通技術人員 在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。本公開已由上述相關實施例加以描述,然而上述實施例僅為實施本公開的范例。必需指出的是,已揭露的實施例并未限制本公開的范圍。相反地,在不脫離本公開的精神和范圍內(nèi)所作的更動與潤飾,均屬本公開的專利保護范圍。當前第1頁12當前第1頁12