2011-10-12 157 views
2

因此,這裏的交易:SQL Server 2008的差異數據庫

背景

  • 在Hyper-V虛擬機可以處理差異磁盤模式,其中一個可以設置原始VHD文件中讀取 - 只有狀態,並創建一個新的vhd,以跟蹤和堅持這些變化。這樣做的優點是你可以很容易,而不必重新安裝Windows創建新虛擬機等

問題

  • 我所尋找的是類似的東西,但對於SQL Server數據庫。我們在本地進行所有開發,然後我們有一個包含X實例的框(每個開發人員1個)。然後,我們有一個過程,將生成的生產備份複製到這些實例並將其恢復。完成之後,它會檢查開發人員選擇的分支(SQL腳本)並在實例上運行腳本。通過這種方式,他們可以在生產數據實際投入生產之前對其代碼進行測試。然而,對於每個實例都有一份我們所有生產數據庫的副本是一件非常痛苦的事情 - 最好有一套產品,並且有一個差異選項,它只是保持所做的更改。這是可能的還是我在做夢?

可能的解決方法

  • 一個解決方案我想到的只是使用一個實際的差異磁盤VHD。我將創建一個具有我們的生產備份數據庫的基本VHD,這將在生產數據庫的夜晚進行修改/創建。然後我會修改/創建差異磁盤並將腳本應用到每個差異磁盤。這樣我們有1個dbs副本,開發人員的更改被記錄到一個單獨的差異磁盤。但是,我希望在SQL服務器中完成這一點。

回答

0

基本上結束我來是爲了嘗試和自動化如下差異磁盤的過程:

  1. 在網絡西安商貿大廈,我們會打電話給這個NAS1創建一個新的虛擬硬盤。
  2. 山從NAS1的機器上充當SQL處理器VHD(我們將
    1. 複製BAK SQL從生產文件調用此SQLPROCESS1。
    2. SQLPROCESS1執行以下操作。到SQLPROCESS1(這可能需要但是這整個#3可以放入一個線程應用程序,因此它可以複製多個並同時恢復)
    3. 將SQLPROCESS1和點數據文件(mdf,ldf)上的文件恢復到駐留新的VHD
    4. 可選:將SQL dbs更改爲SIMPLE備份模式並使用SHRINKFILE,因爲我們將僅將它們用於開發(並且不需要備份)。這可以爲我們節省很多空間。
    5. 分離所有dbs。
    6. 分離VHD。
  3. 從NAS1上的父級創建差異磁盤。
  4. 複製差異磁盤X次數(根據實例或開發人員的需要)。
  5. 可選:我們使用名爲TEST1的中央服務器進行測試,這是我們要安裝每個差異磁盤的位置 - 每個實例或開發人員1個。
    1. 我們首先需要從每個實例中分離所有dbs。
    2. 然後我們需要卸載/分離現有的差分VHD,如果有的話。
  6. 附加差異磁盤。
  7. 重新連接SQL Server中的所有dbs。
  8. 可選:根據每個開發人員指定的代碼存儲庫分支運行SQL腳本。

參考文獻:

要自動我會用一組簡單的批處理文件,VBS或PowerShell的。

編輯:剛試過這個,它工作的很棒!開發人員現在擁有自己的實例,並且只記錄其更改。