簡介
在軟件開發過程中,版本控制是一個廣為人知的概念。因為一個項目可能會需要不同角色人員的參與,通過使用版本控制軟件,可以使得項目中不同角色的人並行參與到項目當中。源代碼控制使得代碼可以存在多個版本,而不會將代碼庫變得混亂,典型的場景包括Bug修復、添加新功能、版本整合等。
雖然在開發層面的版本控制軟件已經非常成熟,但目前國內還沒有專門針對數據庫層面的版本控制軟件來幫助不同角色的人員在數據庫層面進行團隊協作、變更代碼管理以及對數據庫的變更進行查看和比對。在數據庫層面版本控制工具的缺乏可能會出現如下場景:
- 無法在數據庫層面進行團隊協作:開發人員A對存儲過程的修改導致開發人員B創建的存儲過程被覆蓋,從而無法比對和追蹤
- 開發人員-開發DBA-測試人員難以協作:SVN等版本工具是基於文件的,很難在數據庫層面進行版本控制
- 數據庫發生的變更難以追蹤:現有的技術無法追蹤由誰、在什么時間、對數據庫修改了什么,當發生由數據庫引起的報錯或性能下降時,難以排查
- 無法記錄對數據庫變更的過程資產:數據庫變更的歷史記錄只有數據庫運維人員了解,當該相關人員離職或調崗,這些過程資產難以繼承
- 難以審計數據庫:現有的數據庫審計功能往往依賴於日志,對性能造成很大影響。
- SQL腳本無法有效管理:現有的做法往往是將SQL以文件形式保存,無法有效管理和共享
- 無法查看被加密的數據庫對象:當需要對加密的數據庫對象進行修改時,如果無法找到對象定義的原始記錄,則必須重寫該對象
- SVN建立和使用復雜:SVN使用流程對於數據庫人員過於繁瑣,為數據庫人員增加了額外的工作負擔
由於數據庫是整個業務應用的核心,上述問題無論是在開發環境還是在生產環境如果得不到有效的解決,會造成生產力低下、過程資產無法得到管理、數據庫審查無法進行、難以排查由數據庫變更導致的問題等情況。
下面來介紹一下Source Safe for SQL Server如何解決該類問題。
軟件的安裝
軟件的官網下載完Source Safe的安裝包后一路下一步,安裝完成后打開Management Studio,在需要加入到源代碼控制器的某個數據庫服務器上右鍵,在彈出菜單中選擇“添加數據庫到版本控制”,如圖1所示。
圖1.將數據庫添加到版本控制
然后設置相關的選項,如圖2所示。
圖2.添加數據庫到版本控制相關設置
現在再來看,整個數據庫都已經在版本控制之下了,如圖3所示。
圖3.查看受版本控制的數據庫
至此,Source Safefor SQL Server就安裝配置完成了。
典型應用場景
Source Safe可以解決下述問題:
開發團隊進行版本控制
在一個開發團隊中,對於數據庫對象的每一次變更都會自動覆蓋上一個版本,導致上一個版本對象定義的丟失。比如說開發人員A創建了存儲過程“ProcA”,然后開發人員B修改了存儲過程“ProcA”,開發人員A創建的存儲過程將會被開發人員B所做的修改覆蓋,造成之前定義存儲過程的丟失和無法回滾。使用Source Safe可以輕松解決該類問題。
通過圖4,我們看到存儲過程“ProcA”由開發人員“Jack”創建后,開發人員“CareySon”對其進行了修改,Source Safe可以完整的記錄由誰,在什么時間,做了哪些修改,如圖所示。
圖4.查看存儲過程“ProcA”被修改的歷史記錄
圖5.查看存儲過程 “ProcA”兩個版本的差異部分
開發里程碑標記
在開發過程中,往往需要對開發里程碑進行迭代,每一個開發里程碑導致的數據庫對象變更都可以完整的被記錄和文檔化。
圖6.里程碑版本以及涉及到的對象變更
生產環境變更管理
在生產環境中,程序的升級、程序或人為對數據庫對象的更改有可能導致數據庫出現問題,例如應用程序報錯或數據庫性能下降。通過SourceSafe可以快速比較出數據庫之前版本和當前數據庫定義中存在差異的部分,並根據具體情況回滾導致數據庫出現問題的對象,從而快速排除錯誤並保證數據庫持續穩定運行。如圖7所示。
圖7.選擇需要版本比較的對象
常用腳本管理
無論是開發人員還是數據庫的運維人員,都會有常用腳本需要保存。過去的做法往往是將SQL代碼以文件的形式保存,這樣既不方便使用,也不方便分類管理。利用Source Safe的代碼管理功能,可以方便的將SQL代碼的管理無縫集成到SQL Server Management Studio中。如圖8所示。
圖8、使用Source Safe的腳本管理功能對SQL進行管理
此外,Source Safe特別設定了默認文件夾“工具欄快捷方式”,用戶可以將頻繁使用的SQL代碼置於此處,在該分類下的腳本會自動出現在Management Studio的工具欄中,如圖9所示。
圖9、將常用腳本置於“工具欄快捷方式”中
對選定的對象進行版本歸類
雖然Source Safe每次同步之后都會生成一個基於變更的版本號,但在某些特殊情況下,比如需要對庫中某些變更進行管理、對庫中的版本進行歸類的情況下會需要額外的標簽。如圖10所示。
圖10、利用標簽標出某個業務版本涉及到的數據庫對象
與SVN的無縫集成
SourceSafe的版本內容和歷史記錄可以直接導出到SVN、TFS、VSS中,從而打通數據庫版本控制和現有的SVN系統。在數據庫中我們對存儲過程dbo.TestProc做了三次變更,如圖11所示。
圖11.對存儲過程的3次變更
接下來將歷史記錄導出到SVN,如圖12所示。
圖12.將SourceSafe記錄導出到SVN
導出完成后,通過SVN客戶端軟件可以看到對應SQL文件的在數據庫中對應圖10的三次變更,如圖13所示。
圖13.SVN對應SourceSafe中的3次變更
軟件的下載
軟件的下載可以在軟件的官網下載,下載地址請猛擊這里(http://www.grqsh.com/products.htm?tab=sourcesafe-for-sql-server)。