ストアドプロシージャの更新は、ユーザーがシステムを積極的に使用しているときにできることだといつも思っていました。
しかし、私は現在、ストアドプロシージャの更新をテストしており、sprocへの長時間実行呼び出しが実行されている間に(呼び出しから4分以上)、sprocを更新しました。 (別のウィンドウで別のクエリプランを試すことを計画していました。)
私が長期的なものに戻ったとき、私はこのエラーがありました:
The definition of object 'MySprocName' has changed since it was compiled.
このエラーは、sprocの定義が更新されると、アクティブに実行されているsprocが失敗することを示しているようです。 (sprocが実行を開始すると、定義を変更しても、残りの実行にはその計画が使用されると思いました。)
これは本当ですか? sprocの定義を更新するためにダウンタイムが必要ですか?
はい。SQLServerはそれを好まないため、アクティブに実行されているストアドプロシージャを変更しないでください。
ダウンタイムを取ることに関しては、ええ、ベストプラクティスとして、稼働時間中に忙しい運用環境で頻繁に使用されるストアドプロシージャに変更を加えるべきではありません。