同義語を使用する複数のアプリケーションデータベースが、外部バックアップを復元することによって定期的に更新する必要がある不変のデータを持つ共有データベースを指している。現在、更新期間中はアプリケーションを停止できないという新しい要件があるため、データベースを更新する計画は次のとおりです。
shared_temp
として復元しますshared_temp
にリダイレクトしますshared
データベースに復元しますshared
にリダイレクトしますshared_temp
alter synonym
ステートメントがないように見えるので、drop synonym
とcreate synonym
の間で実行されたクエリが共有データベースの参照に失敗する競合状態なしで、これらのシノニムリダイレクトを実行するにはどうすればよいですか?
同義語をロックし、ロック中に再作成できるようにする方法はありますか?
あるいは、シングルユーザーモードのように着信クエリが拒否されるのではなくキューに入れられるように、データベース(またはスキーマ)全体をロックする方法はありますか?
他のすべてが失敗した場合、クエリを遅くすることなく、データベース内のすべてのテーブルの内容を別のテーブルから更新する信頼できる方法はありますか?データには内部参照があることに注意してください。既存の参照は、新しいデータでも引き続き有効であることが保証されています。以前のバージョンにダウングレードしない限り、安全であるはずです。
これらの同義語を参照するステートメントを変更することはできません。
SQLServerの最小バージョンは2008R2ですが、新しいバージョンでこれが可能になる場合は、アップグレードを選択できます。
プロセスにかかる時間はあまり気にせず、ダウンタイムがないことだけを考えています。ドロップと名前の変更はアトミックではなく、ロックできない可能性があります。そうでない場合はオプションになります。
コメントに残された回答 Dan Guzman
DROP/CREATE
ステップ2および4のトランザクション内のすべての同義語。(うまくいけば)短期間のブロッキングが発生する可能性がありますが、ダウンタイムは発生しません。