我們在具有聯合數據庫的服務器場上部署了sql server的asp.net Web應用程序。我們使用存儲過程(而不是準備好的sql語句)和inproc會話。由於實現高可用性的一部分(至少與控制組更改服務包),我們打算在這意味着我們做這個農場使用滾動部署:Rolling在網絡農場中部署Web應用程序
- 關閉一組服務器的
- 在這些服務器上部署應用程序
- 調出這些服務器
- 關閉另一個組。對所有組重複1-3。
雖然這意味着有些用戶會被啓動,但應用程序仍然可用,維護頁面不需要維護。
簡單的部分是部署Web應用程序,但更困難的部分是如果存儲過程發生變化(例如添加了新參數)。當需要存儲過程的兩個版本(現有的和正在部署的新版本)時,會有一點意義。
我們考慮存儲的過程4個選項:
- 不要只使用新的滾動部署的情況下,釋放了一個存儲過程變化
- 如果在一份新聞稿中所使用的滾動部署,存儲過程將被允許,即使這意味着代碼重複
- 在應用層中引入存儲過程版本控制和某些框架組件,以自動將版本號附加到正在調用的存儲過程。
- 覆蓋現有的存儲過程並允許一些存儲過程調用失敗。
所有的方法都有優點和缺點,而且這些3)是最可行的,也是最複雜的。 你會推薦哪一個?有沒有在SQL Server中處理這種情況的技巧?還有其他方法嗎?
只有存儲過程更改?沒有其他數據庫更改:表,視圖,觸發器等? – joerage
@joerage:是的,首先,我們只在存儲過程發生變化的情況下才考慮使用這種模式(其中包括90%的次要版本,服務包等),但是如果有更新的通用解決方案所有更改 – Kiran