2011-03-07 39 views
4

我有一個C#應用程序(在VisualStudio 2010中),它使用SqlServer 2005通過C#中的TableAdapter訪問。在C#項目中管理數據庫更改

我還沒有發現管理數據庫更改的好方法。例如,在我的下一個版本中,我有一堆數據庫模式更改。我在Sql Server Management Studio中完成了所有數據庫更改。但是現在,我必須在部署新的應用程序代碼(緩慢和錯誤)後,在生產服務器上依次手動進行這些更改。此外,如果我決定將我的版本回滾到以前的版本,我必須手動通過並撤銷所有數據庫更改,然後才能部署舊代碼(現在由於該應用程序是在時間限制之內下)。再次,這也是非常容易出錯的。

哦,讓希望我的錯誤之一不會造成大規模破壞生產DB,否則我現在要拉最近的備份存儲空間不足,然後再試一次(非常耗時)。

我聽說過像Rails(和SubSonic等ORM)遷移的東西。我認爲新的ORM風格(在c#代碼中定義你的模式)有助於減輕很多這種情況,但不幸的是,當我使用TableAdapter時,我看不到如何實現類似遷移的東西。

人們如何處理這個問題?

+0

爲什麼「我必須手動通過並撤消所有數據庫更改」?只需恢復以前的DB。 – 2011-03-07 23:12:41

回答

5

發行管理DB中通常涉及的靜態數據和腳本來更新/創建可編程元素(存儲過程,觸發器在等)和修改現有的架構定義的運行遷移。看起來像你錯過了腳本。如果您手動對開發數據庫進行更改並且不創建反映這些更改的腳本,則需要針對測試/生產環境重複相同的手動步驟,正如您所說的那樣,這些步驟容易出錯並且很危險。

SQL Server Management Studio可以輕鬆保存反映對任何數據庫對象的更改的腳本。在工具欄中應該有一個名爲「生成更改腳本」的圖標,它可以讓您選擇將SQL文件保存到磁盤。然後,您可以使用它對另一臺服務器執行相同的更改。您還可以手動編寫任何或所有存儲的特效塊,UDF,觸發器等,並針對服務器運行這些特性(只需右鍵單擊它們)。

至於回滾,這通常通過恢復作出部署過程開始之前的數據庫的備份來實現的。

對於每家公司來說,這整個過程往往不同,但通常這是如何完成的。

奧姆斯是自動生成的模式我總覺得惡我,更何況幾乎不可能使用對生產中,但我想有也是一種選擇。

+1

+1。您肯定需要編寫腳本來執行您所做的更改。您還需要備份您的數據庫OFTEN,以便在必要時將其回滾。 – Chev 2011-03-07 23:20:10

2

來解決這個問題最簡單的方法是購買可以通過比較兩個數據庫的變化檢測DB模式,並生成變更腳本,可以更新您的目標數據庫軟件。我正在使用Visual Studio Ultimate 2010,但也有更便宜的軟件可以做到這一點。這對我來說在99%的時間內工作(唯一的例子是我沒有正確地工作,當我重新命名錶列)。

如果沒有這樣一個軟件,它是由手工生成的SQL腳本的變化至關重要。無論何時更改數據庫模式,都要跟蹤用於更改的SQL,並將其添加到下一版本軟件的db模式更改的大文件中。一開始有點乏味,但你會很快習慣它。

然後,當您準備好部署的軟件,操作步驟如下:

  1. 就拿網站離線
  2. 讓你的當前生產數據庫的備份。
  3. 備份當前的生產網站。
  4. 上傳新的代碼服務器
  5. 運行DB改變你以前創建的腳本(或用手或用上面提到的軟件)
  6. 拿回來的網站在線,看看它是否工作。如果沒有,並且您無法輕鬆解決問題,請恢復到以前的網站和數據庫版本,直到您修復了該錯誤。

所有這些步驟都可以使用批處理文件和SQL Server代理或SQLCMD輕鬆實現自動化。

通常您應該首先部署到登臺服務器,然後非常徹底地測試您的網站,然後才能轉到生產服務器。這樣可以避免生產服務器上的停機時間延長,並將丟失任何重要數據的風險降至最低。

0

在Red Gate Software,我們正在解決這個問題。請看看我們的SSMS加載項SQL Source Control,並結合SQL Compare Pro。我們還在研究'Migrations'功能,將於今年晚些時候發佈,允許爲特定版本轉換定義自定義遷移腳本。由於我們仍處於項目的早期階段,因此仍有時間到give us feedback,並幫助我們設計一個出色的解決方案。我們很樂意與您進一步談談您的要求!

+0

只是上面的更新 - SQL源代碼控制3和SQL比較10現在隨上述遷移一起提供。 – 2012-07-14 20:45:50