您是否有過想知道數據庫何時被更改的經歷?有了 IBM® DB2® Change Management Expert,您將不再有疑問!該工具可以幫助您跟蹤變更,與其他小組成員合作無間,逆轉或者撤消變更,以及審計對數據庫作出的任何變更。本文描述這樣一個場景:DBA 所在公司使用 DB2 Change Management Expert 和 Eclipse Team 項目來增強協作和確保一致的審計路徑。您將學習連接到庫控制系統並將變更管理項目、模型和腳本保存到庫控制中,以及審計變更。而且,還將發現如何從庫控制中檢索變更,以及使用部署腳本撤消變更。
簡介
數據庫的維護不外乎變更 二字。如果您的目標是保證質量,那麼就需要管理變更。您需要確保數據庫應用程序按預期運行,變更能夠順利進行,並且,如果出現錯誤,可以調查問題。雖然數據庫可以用日志記錄某些活動,但是日志比較難於分析。最後,日志只能提供對數據庫變更的一個不完整的描述。那麼,為什麼不借助軟件開發中的技術呢?在軟件開發中,跟蹤變更的傳統方法是使用某種類型的變更管理系統、過程或工具。這種方法有很多名稱:配置管理、變更管理、源代碼控制、庫控制、版本控制等等。對於本文,我們使用術語版本控制。
不管是對於應用程序還是對於產品代碼本身,變更管理的過程都相當成熟。大多數程序員都熟悉對代碼進行簽入和簽出操作,並知道什麼版本與哪個軟件發行版是對應的。但是,應用程序開發周期中扮演其它角色的人清楚這些因素的重要性嗎?他們使用版本控制工具嗎?架構師的設計、項目經理的計劃、編程人員的文檔以及測試人員的場景和結果又如何呢?數據庫管理員呢?應用程序可不僅僅是代碼。組成一個發行版的所有部分都應該在一起。作為應用程序一部分的任何對象都可以、也應該成為版本控制工具或過程的一部分。
總體過程
下面的圖顯示了使用 DB2 Change Management Expert 和版本控制系統更改一個數據庫的總體過程:
圖 1. 使用 DB2 Change Management Expert 更改一個數據庫的總體過程
DB2 Change Management Expert 與 Eclipse
DB2 Change Management Expert 是一個工具,它可以幫助 DBA 跟蹤變更,與作出不同變更的其它 DBA 協作,審計和管理那些變更的歷史,並逆轉或撤銷不再需要的變更。
DB2 Change Management Expert 是基於 Eclipse 的工具。Eclipse 是用於交付胖客戶機應用程序的一種與平台無關的開源軟件框架。Eclipse 平台使其它工具開發人員可以輕松地構建和交付集成的工具。該框架被用於開發用於 DB2 Change Management Expert 的集成開發環境(IDE)。欲了解關於 Eclipse 平台的更多信息,請參閱本文的 參考資料 小節。DB2 Change Management Expert 中的一個成功的版本控制過程包括使用 Eclipse Team 功能。
Eclipse Team 集成是 DB2 Change Management Expert 版本控制功能的關鍵組成部分。Eclipse Team 組件提供了一種機制,允許儲存庫工具將它們的儲存庫解決方案的完整的、豐富的功能集成到 Eclipse 工作台中。本文中的例子例釋了 Eclipse Team 功能。欲了解關於 Eclipse Team 的更多信息,請參閱本文的 參考資料 小節。
當數據庫被更改後,DB2 Change Management Expert 項目(包括它所包含的所有資源)應該被注冊到版本控制中,並被賦予一個標記或標簽。
還可以使用 Eclipse Team 功能歸檔 DB2 Change Management Expert 項目。為了跟蹤變更,應該先歸檔項目。可以在變更開發的過程中,在部署任何變更之前進行歸檔。這樣一來,就可以引入迭代,其它團隊成員或 DBA 可以參與進來並提供變更,其他人則可以查看和修改已經作出的變更。
Data Design Projects、數據庫與版本控制之間的關系
可以以不同的方式使用版本控制來管理數據庫變更項目。可以使用正式的或非正式的版本控制系統。版本控制系統可以像計算機上的文件系統一樣簡單,也可以像 Concurrent Visioning System (CVS) 或 IBM Rational Clear Case 一樣全面。對於大多數示例,本文使用 CVS。
DB2 Change Management Expert 通過項目將需要作出變更的不同資源組織在一起。一個數據設計項目通常跟蹤一個數據庫的生命周期。通過使用 Eclipse team 功能,可以共享項目,以便多個 DBA 共同應對變更。Data Design Projects 在特定的時間點上表示變更。一旦變更被部署,則資源通常被提交到版本控制系統,並被賦予一個標記或標簽。可以使用標記或標簽返回到變更保存點,以撤銷變更,或者審計特定的變更。
在更復雜的數據庫中,可以使用 Data Design Project 來管理一個特定數據庫應用程序的生命周期。在某些公司,表或模式被拆分開來,由特定的 DBA 或 DBA 團隊管理。可以使用 Data Design Projects 來匹配這些環境。因此,可以將一個數據庫拆分開,由數個 Data Design Projects 來管理。如果一個主數據庫有多個副本,則可以使用一個 Data Design Project 來管理這些數據庫。這就是所謂的多重配置(multiple provisioning),即首先為一個數據庫構造變更,然後將其部署到多個數據庫。
插入到 Eclipse 中的版本控制系統,例如 CVS 或 IBM Rational Clear Case,提供了與 DB2 Change Management Expert 的最佳集成。但是,由於 DB2 Change Management Expert 將所有數據文件和文件夾存儲在本地文件系統上,甚至可以使用未與 Eclipse 集成的版本控制系統來管理 DB2 Change Management Expert 資源。還可以在沒有正式的版本控制系統的情況下管理變更。本文在 如何在不使用版本控制系統的情況下使用 DB2 Change Management Expert 小節對這種情況作了描述。
結合使用版本控制系統和 DB2 Change Management Expert
這個示例演示如何使用版本控制審計變更,以及協調由不同 DBA 做出的變更。示例中的圖顯示了使用 DB2 V9 情況下的 DB2 Change Management Expert。示例被分為以下四個部分:
Jaya 對數據庫做出一個更改。
Jaya 通過將項目提交到版本控制系統與他人共享項目。
Eric 鎖定項目,並做出其他更改。
Jaya 不喜歡 Eric 做出的更改,並逆轉這些更改。
注意:本場景使用 CMEDEMO 數據庫。可以從本文的 下載 小節下載 sample01.zip 文件,並將其解壓到一個本地目錄,以安裝用於創建和設置該數據庫的 DDL(CreateCMEDEMO.chx)。下面是設置該數據庫的步驟:
選擇 File -> New -> Data Design Project,創建一個 Data Design Project,並將該項目命名為 test。
圖 2. New Data Design Project
在 DB2 Change Management Expert 的 Data Project Explorer 視圖中,將 CreateCMEDEMO.chx 文件導入到 test 項目中。展開 CMEDEMO 項目中的 SQL Scripts 文件夾的內容,右鍵單擊 CreateCMEDEMO.chx 文件,並選擇 Run SQL。確認選擇了適當的數據庫版本。輸入用戶名和密碼,不選擇復選框 Create Deployment Project and Script file,然後單擊 Finish。
在 Database Explorer 視圖中,確認 CMEDEMO 數據庫已經被創建,並且存在一個連接。現在可以繼續完成本文中的所有步驟。
第 1 部分。DBA Jaya 對數據庫做出更改。
和 Jaya 一樣,您將完成以下步驟:
創建一個名為 TestAudit 的新的部署腳本。部署腳本是一種 DB2 Change Management Expert 資源,用於跟蹤變更管理過程。可以在 New Deployment Script 向導中指定被更改的數據庫的位置和名稱。這裡將為指定的數據庫創建兩個模型。一個模型是基本模型,表示數據庫的當前狀態,另一個模型是目標模型,可以通過編輯該模型來定義新的變更。
對目標模型做出更改。例如,為 CL_SCHED 表創建一個名為 LOCATION 的 CHAR(128) 類型的新列。可以在屬性視圖中添加這個新列。做出更改後,保存模型。
圖 3. CL_SCHED 表中的數據列 'LOCATION'
打開該部署腳本。為了生成變更命令,在 Outline 視圖中右鍵單擊 Change Commands,選擇 Generate Change Commands。這時彈出 Generate Change Commands 向導。除了變更命令外,該向導還創建數據保留(data-preservation)命令。這裡必須為部署時生成的數據文件指定文件系統上的一個位置。通過在向導中選擇 auto-cast,可以解決任何導入與導出列數據類型的沖突。
圖 4. Generate Change Commands 向導生成的變更命令清單
第 2 部分。Jaya 做出的變更就此完成,現在她可以將項目添加到版本控制系統中,從而共享項目。之後,可以從版本控制系統中提取變更,並用於繼續變更管理過程。必要時,其他管理員也可以審計變更。這樣很容易組合和協調兩個甚至更多 DBA 做出的變更。
這個例子中使用 CVS 作為版本控制系統。
安裝 CVS Server,並設置一個儲存庫。
在 DB2 Change Management Expert 中,打開 CVS Repository Exploring 透視圖。該透視圖包括一個名為 CVS RepositorIEs 的視圖,在這裡可以添加多個不同的儲存庫位置。
為了添加 DB2 Change Management Expert Data Design Project 的儲存庫位置,在該視圖中單擊右鍵,選擇 New -> Repository。這時顯示以下對話框:
圖 5. Add CVS Repository 對話框
在所需字段內輸入信息,然後選擇 Finish。您將看到添加到 CVS Repository 視圖中的儲存庫。
圖 6. Repository Exploring 視圖,包含新的儲存庫位置
可以進行下拉操作,浏覽該儲存庫中的內容。
切換回 Data 透視圖。選擇要注冊到 CVS 中的項目,在該項目上單擊右鍵,選擇 Team -> Share Project。這時彈出 Share Project 向導。
圖 7. Share Project 向導
選擇已有的儲存庫位置(在上一步中已經添加)。接受所有默認設置,單擊 Finish。 記住:可以簽入所有 ASCII 類型的 DB2 Change Management Expert 資源。 任何被允許訪問這個特定儲存庫位置的 DBA 現在都可以打開和查看該項目,並且可以做出更改。
第 3 部分。 另一個 DBA Eric 可以打開該項目,並做出其它更改。Eric 完成以下步驟:
打開 CVS Repository Exploring 透視圖。在 CVS Repository 視圖中選擇該項目,單擊右鍵,並選擇 Check Out。這將在當前工作區中創建該項目的一個副本。現在可以修改該項目和任何相關的文件。
編輯目標模型。將 EMP_PHOTO table 拖入到模型中,重新生成變更命令。可以參考第 1 部分中的步驟。
完成更改後,查看數據庫模型。如果該模型沒有達到預期的結果,則可以通過恢復到 Jaya 創建的版本,撤消新的更改。為了撤消更改,在 Data Project Explorer 中右鍵單擊該項目(或該項目中的某個資源),選擇 Replace With -> Latest from Head。這一步將 EMP_PHOTO 表添加回目標模型。 注意:對 EMP_PHOTO 表做出的新更改是本地的,只有在顯式地提交之後才會被注冊到 CVS 中。
在物理數據庫編輯器中,打開目標模型,再次修改它。下面是可以對模型做出的更改的一個例子。更改完成之後,保存模型,並重新生成變更命令。此外還將生成撤消命令:
添加一個名為 COMPLETION_CODE 的新表,表中列 CODE 的數據類型為 INTEGER,列 DESC 的數據類型為 VARCHAR(128)。將列 CODE 設為表 COMPLETION_CODE 的主鍵。
將一個類型為 INTEGER、名為 CODE 的新列添加到 PROJECT TABLE 表中。將 PROJECT 表的 CODE 列定義為 nullable。
創建 PROJECT 表中列 CODE 與 COMPLETION_CODE 表中主鍵列 CODE 之間的外鍵關系。
選擇 Deploy Changes 將更改部署到目標數據庫。 注意: 當在 DB2 Change Management Expert 中部署時,更改被記錄到工作區中的一個部署日志文件中。這個部署日志文件也應該與 test 項目一起注冊到 CVS 中。
更改將沿著 Deployment Script Editor 概述頁面指定的連接部署。如果工作區內不存在連接,則必須創建一個與目標數據庫同名的連接。為此可以從 Database Explorer 視圖中選擇 Connections -> New Connection。
圖 8. New Connection 向導
選擇 Team -> Commit 將更改注冊到 CVS 中。
現在整個團隊可以查看 Jaya 和 Eric 做出的更改。
第 4 部分。第一個 DBA Jaya 打開項目,並查看 Eric 做出的更改。如果 Jaya 想要撤消 Eric 對數據庫部署的更改,則可以執行以下步驟:
打開部署腳本,並在 Deployment Script Editor 的 Undo Changes 標簽頁上選擇 Deploy Undo Commands。
要麼重置部署腳本,重新開始變更過程,要麼再次修改模型,以生成她想要部署的變更命令。
可以通過打開部署腳本並單擊 deployment script editor 的菜單項重置部署腳本。選擇 Deploy -> Reset。這樣將啟動一個向導,該向導將幫助重置部署腳本。
如何在不使用版本控制系統的情況下使用 DB2 Change Management Expert
如果不能使用一個版本控制系統,是否仍然可以使用 DB2 Change Management Expert?當然!但是,出於審計和跟蹤的目的,可能仍然需要遵從某些控制,那麼,如果 DB2 變更都存儲在 DB2 Change Management Expert 中,則應該如何做呢?Data Project 信息存儲在一開始定義的 DB2 Change Management Expert Workspace 中。工作區是本地磁盤上的一組目錄,因此可以將那些文件保存在一起,作為該版本的文件集。
我們使用本文中的示例,但是假設您沒有版本控制系統。
使用儲存庫存儲變更的一個好處是工作區可以使用大量的變更歷史。出於審計的目的,或者為了撤消一次變更,可能需要這些歷史。如果只處理項目文件本身,那麼就需要由您來跟蹤發生了什麼變更,以及是誰做出的變更。
可以與其他用戶共享整個工作區嗎?
從技術上講,是這樣的,可以共享整個工作區,例如在一個共享驅動器上。但是,如果在其他人已打開工作區的時候嘗試打開工作區,就會收到一條錯誤消息,說該文件已經在使用。共享工作區的另一個缺點是所有設置也隨之被共享,所以如果其他人更改設置的話,就可能丟失定制。所以不建議共享工作區。
如何在多個 DBA 之間共享文件?
有一些方法可以共享項目文件。本文使用的、也是最簡單的方法是將整個項目導出為一個歸檔文件(ZIP 文件),讓其他用戶將項目導入到他們的工作區中。 遵循上述場景之後(Jaya 和 Eric 完成某些數據庫變更),當生成所有變更命令之後,Jaya 現在處在第 1 部分的最後位置。Jaya 現在不是將文件注冊到版本控制中,而是需要保護更改,使之可以被正在處理該項目的另一個 DBA 使用。Jaya 執行以下步驟:
選擇項目,然後選擇 File -> Export,打開 Export 對話框。
展開 General 文件夾,選擇 Archive File 並單擊 Next。
在接下來的屏幕上,選擇項目、輸出文件位置、文件名和格式(ZIP 或 TAR),然後單擊 Finish。這樣將在磁盤上創建 ZIP 文件。
Jaya 可以離開 DB2 Change Management Expert,使導出的 ZIP 文件可以被 Eric 使用。
Eric 現在需要處理該項目。Eric 不是從 CVS 中讀出它,而是必須手動地將那個項目導入他的工作區中。Eric 執行以下步驟:
在工作區中,選擇 File -> Import。
展開 General 文件夾並選擇 Existing Projects into Workspace。
使用 Select archive file 浏覽至 Jaya 導出的歸檔文件的位置。那個歸檔文件中的項目將出現在 Projects 列表框中。
選擇項目並單擊 Finish。
現在,項目就處在 Eric 的工作區中,他可以繼續第 3 部分中描述的變更。當 Eric 做出更改並生成 DDL 時,部署腳本同時包含來自 Jaya 和 Eric(Eric 可能已經刪除或修改了 Jaya 的更改,但是這裡沒有)。
在第 3 部分中,Eric 刪除一個表,但是後來改變了主意,並返回到 CVS 中項目的版本。如果不使用版本控制系統,如何可以做到這一點?
在 CME 中,有些本地歷史存在於工作區中。在這個特定的場景中,Eric 可以繼續從目標模型中刪除 EMP_PHOTO 表,然後通過從 Data Project Explorer 視圖中右鍵單擊目標模型並選擇 Replace with Local History 將其放回模型中。Eric 可以逆轉之前的更改。但並不是所有情況下都能這樣,而是只有在工作區中才能這樣。也就是說,Eric 和 Jaya 不能相互逆轉對方的更改。
在第 4 部分中,當 Eric 將項目導出到一個歸檔文件(ZIP/TAR)之後,Jaya 可以將項目導回到工作區中。Jaya 應該從工作區中刪除已有的項目,並導入 Eric 做出的新的項目歸檔。這個項目將包含從第 1 部分到第 3 部分的所有變更。但是,Jaya 不能訪問關於 Eric 做出的變更的任何本地歷史,所以要恢復到之前的變更就變得更困難。
從這個場景可以看出,當進行團隊協作時,版本控制系統是多麼的重要。
通過整個項目文件共享變更的另一種方法是共享各個模型或部署腳本,並使用 DB2 Change Management Expert 合並和遷移特性集成變更。這種方法要求更多地注意細節,但是當處理多個變更或者更復雜的變更時,可以提供更多的靈活性。不管使用何種方法,都不能獲得比版本控制系統所提供的更豐富的歷史功能。
結束語
結合使用版本控制系統和 DB2 Change Management Expert,可以為管理業務需求提供一個強制性的資源。使用這兩種工具有助於順利完成對應用程序開發周期中涉及的所有變更的跟蹤。即使沒有版本控制系統,通過使用 DB2 Change Management Expert 和一個規劃良好的系統,也仍然可以獲得上述好處。希望本文能夠鼓勵您進一步探索 DB2 Change Management Expert 如何滿足您的要求。