作爲數據庫版本控制空間5年(作爲產品管理總監DBmaestro),並且作爲DBA工作了二十多年,我可以告訴你一個簡單的事實,即不能像你那樣處理數據庫對象處理您的Java,C#或其他文件並將更改保存在簡單的DDL腳本中。
有很多原因,我會僅舉幾例:
- 文件是開發人員的電腦上本地存儲和改變他/她 品牌不影響其他開發人員。同樣,開發人員也不受她的同事所做更改的影響。在數據庫中,這是 (通常)不是這種情況,開發人員共享相同的數據庫 環境,因此任何提交給數據庫的更改都會影響 其他人。
- 使用簽入/提交更改/ 等(取決於您使用的源控制工具)完成發佈代碼更改。此時, 將來自開發者本地目錄的代碼插入源控制存儲庫的 中。希望獲得最新 代碼的開發人員需要從源代碼管理工具請求代碼。在數據庫中, 更改已存在,並且影響其他數據,即使它不是登錄到存儲庫的 也是如此。
- 在文件簽入過程中,源代碼管理工具執行衝突 檢查以確定在修改本地副本期間是否有相同的文件被其他 開發者修改並簽入。 再次在數據庫中沒有檢查。如果您從本地PC上更改 的程序,同時我使用 代碼修改了本地PC上的相同程序,則我們會覆蓋彼此的更改。
- 代碼的構建過程是通過將代碼的標籤/最新 版本的代碼執行到空目錄,然後執行編譯 - 編譯完成的。輸出是我們在其中複製&替換現有的 的二進制文件。我們不在乎以前是什麼。在數據庫中,我們不能 重新創建數據庫,因爲我們需要維護數據!此外, 部署還會執行在構建 過程中生成的SQL腳本。
- 執行SQL腳本時(使用DDL,DCL,DML(對於靜態 內容)命令),假定 環境的當前結構與創建腳本時的結構相匹配。如果不是, 那麼您的腳本可能會失敗,因爲您試圖添加新列,其中 已存在。
- 將SQL腳本作爲代碼進行處理並手動生成它們將導致 語法錯誤,數據庫依賴性錯誤,不可重複使用的腳本,這會使開發,維護和 測試腳本的任務複雜化。另外,這些腳本可能在 環境中運行,與您運行 的環境不同。
- 有時版本控制庫中的腳本不匹配 被測試的對象的結構,然後在生產中發生錯誤 !
還有很多,但我認爲你得到了圖片。
我發現,工作是這樣的:
- 使用強制執行的數據庫對象 退房/簽入操作的強制版本控制系統。這將 確保版本控制存儲庫匹配 簽入的代碼,因爲它讀取操作中的簽入 中的對象的元數據,而不是手動完成的單獨步驟。這也允許 幾個開發人員在同一數據庫上並行工作,而 阻止他們意外地覆蓋每個其他代碼。
- 使用利用基線的影響分析作爲 比較的一部分來識別衝突,並確定如果差(當 源控制 存儲庫和數據庫之間的比較對象的結構)是一個真正的變化來自 發展起源或者源於不同路徑 的差異,然後應該跳過它,例如不同的分支或 緊急修復程序。
- 使用知道如何使用UI或使用API一次執行多個 架構的影響分析的解決方案,以最終實現 自動構建&部署過程。
我寫的這篇文章發表於here,歡迎您閱讀。
來源
2015-04-01 07:17:51
Uri
@marc_s感謝您糾正錯字。 – Souper