フェデレーション データベースを備えたサーバー ファームにデプロイされた SQL サーバーを備えた asp.net Web アプリケーションがあります。ストアド プロシージャ (準備済みの sql ステートメントとは対照的に) と inproc セッションを使用します。高可用性を実現する一環として (少なくとも、制御された一連の変更を含むサービス パックの場合)、ファームでローリング展開を使用する予定です。つまり、次のようにします。
- サーバーのグループをシャットダウンします
- これらのサーバーにアプリケーションをデプロイします
- これらのサーバーを立ち上げる
- 別のグループをシャットダウンします。すべてのグループに対して 1 ~ 3 を繰り返します。
これは、一部のユーザーがキックオフされることを意味しますが、アプリケーションは引き続き利用可能であり、メンテナンス ページを作成する必要はありません。
簡単なのは Web アプリケーションをデプロイすることですが、難しいのは、ストアド プロシージャに変更があった場合 (たとえば、新しいパラメーターが追加された場合) です。両方のバージョンのストアド プロシージャが必要になる時点があります (既存のものと展開されている新しいもの)。
ストアド プロシージャの 4 つのオプションを検討しました。
- リリースにストアド プロシージャの変更がある場合は、ローリング展開を使用しないでください
- ローリング展開がリリースで使用されている場合、コードの重複を意味する場合でも、新しいストアド プロシージャのみが許可されます。
- アプリ層にストアド プロシージャのバージョン管理といくつかのフレームワーク コンポーネントを導入して、呼び出される sproc にバージョン番号を自動的に追加します。
- 既存のストアド プロシージャを上書きし、一部のストアド プロシージャの呼び出しが失敗するようにします。
すべてのアプローチには長所と短所があり、これらのうち 3) が最も実行可能ですが、最も複雑でもあります。どちらをお勧めしますか?このシナリオを処理するための SQL Server のトリックはありますか? 他のアプローチはありますか?