原文出處:黃釗吉CSDN博客:爲何說數據庫版本控制是必要的
開發過程當中的版本控制很是常見,但在數據庫的世界來講,版本控制就是二等甚至三等公民了。當多人同時開發一個數據庫管理和應用系統時,採用合理的方法監控數據庫中表、存儲過程和視圖等對象的變更是很是重要的,每次更改數據庫,都須要作詳細的記錄,稍不留神就出問題。我任職過的幾家公司在開發流程中的版本控制作的很是到位,但數據庫方面倒是一片空白,在開發過程當中,常常會涉及到表上增長列、修改列、修改存儲過程和視圖,發生變化後,以前的數據庫對象定義就丟失了,給開發帶來很是多的麻煩,下面說說我解決沒有數據庫版本控制機制所引發的麻煩的思路。sql
解決這個麻煩咱們最開始的思路就是備份數據庫,每隔幾天備份一次數據庫,當須要找歷史數據庫對象時將備份庫還原到測試機上再把對應的存儲過程或者表定義找出來。這種方式使用過程當中就發現不少問題,首先每次須要查看歷史記錄的時候去還原備份很是麻煩,其次隨着開發的進行,很難記得清是誰在什麼時間改了什麼數據庫對象,必須把一段時間內的備份都還原了再進行查找。這個過程不只讓人很惱火,也很是浪費時間精力,若是備份間隔過長,期間變動的對象定義就沒法找回了。數據庫
後來的解決思路就是每次修改數據庫對象的時候將數據庫對象的定義以.sql的方式存入SVN,這種方式很是麻煩。不少時候開發人員偷懶忘記簽入SVN了,則會引發很大問題。新加入團隊的人也很難看清版本修改的前因後果。此外,這種方式很是不直觀,若是但願看到一個數據庫對象的歷史版本記錄,則還要去SVN中查找,顯示也很是不直觀工具
還有一個問題是團隊中的開發DBA很是不習慣使用SVN。測試
這種方式是我在網上看到過的,是在數據庫中經過觸發器對於數據庫的變動操做進行記錄,做爲開發出身的人來講,對這種方式就不是很喜歡。何況去歷史表中找版本修改記錄原本就是一件費時費力的事。spa
如今一些第三方公司已經開發了針對數據庫的版本控制工具,咱們以前曾經嘗試過RedGate的SQLSource Control(http://www.red-gate.com/products/sql-development/sql-source-control/),SQLSource Control的原理是基於SVN,使用起來不是很符合團隊的使用習慣,易用性不夠,在團隊推廣的培訓成本也比較高。.net
最近團隊在使用的另外一個工具是一個很易用的中文版數據庫版本控制軟件,叫作SourceSafe for SQL Server(http://www.grqsh.com/products.htm?tab=sourcesafe-for-sql-server), Source Safe for SQL Server的原理是將變動記錄存入版本庫,按期能夠將數據庫定義的腳本導入SVN,數據庫版本的歷史記錄能夠像在SVN中那樣查看,團隊推廣的培訓成本也比較低。幫助咱們解決了不少團隊中的問題。版本控制
數據庫版本化看似是個無關緊要的過程,但作好了,能夠減小開發和實施甚至是生產環境中的不少麻煩,咱們的系統就是個活生生的例子。本文所闡述的方法是來自以前團隊的經驗。開發團隊的發展都會經歷從幼稚到成熟,借鑑成熟工具的經驗和方法論,提早認識並解決問題可減小損失提高生產力。server