2011-09-06 67 views
0

我們在具有聯合數據庫的服務器場上部署了sql server的asp.net Web應用程序。我們使用存儲過程(而不是準備好的sql語句)和inproc會話。由於實現高可用性的一部分(至少與控制組更改服務包),我們打算在這意味着我們做這個農場使用滾動部署:Rolling在網絡農場中部署Web應用程序

  1. 關閉一組服務器的
  2. 在這些服務器上部署應用程序
  3. 調出這些服務器
  4. 關閉另一個組。對所有組重複1-3。

雖然這意味着有些用戶會被啓動,但應用程序仍然可用,維護頁面不需要維護。

簡單的部分是部署Web應用程序,但更困難的部分是如果存儲過程發生變化(例如添加了新參數)。當需要存儲過程的兩個版本(現有的和正在部署的新版本)時,會有一點意義。

我們考慮存儲的過程4個選項:

  1. 不要只使用新的滾動部署的情況下,釋放了一個存儲過程變化
  2. 如果在一份新聞稿中所使用的滾動部署,存儲過程將被允許,即使這意味着代碼重複
  3. 在應用層中引入存儲過程版本控制和某些框架組件,以自動將版本號附加到正在調用的存儲過程。
  4. 覆蓋現有的存儲過程並允許一些存儲過程調用失敗。

所有的方法都有優點和缺點,而且這些3)是最可行的,也是最複雜的。 你會推薦哪一個?有沒有在SQL Server中處理這種情況的技巧?還有其他方法嗎?

+0

只有存儲過程更改?沒有其他數據庫更改:表,視圖,觸發器等? – joerage

+0

@joerage:是的,首先,我們只在存儲過程發生變化的情況下才考慮使用這種模式(其中包括90%的次要版本,服務包等),但是如果有更新的通用解決方案所有更改 – Kiran

回答

0

如果您想要涵蓋對數據庫的任何類型更改,您可能需要查看database mirroring and rolling upgrades。從鏈接

摘錄:

提高生產數據庫的升級過程中的可用性。

爲了最大限度地減少鏡像數據庫的停機時間,可以順序升級參與數據庫鏡像會話的SQL Server實例。這將導致只有單一故障轉移的停機時間。這種升級形式被稱爲滾動升級。

+0

從鏈接中,它看起來應該用於修補數據庫服務器本身而不是應用程序代碼。 – Kiran