非常に柔軟で、データベースを別のサーバーに簡単に移動できるようにするために、データベースごとにエイリアスを使用するというアイデアを思いつきました。したがって、DNSエントリを変更するだけで、接続文字列を変更したり、それぞれのクライアントアプリケーションを再デプロイしたりすることなく、すべてのクエリを別のデータベースサーバーにルーティングできます。
明確にするために:
データベースごとにエイリアスがあります。したがって、データベースが別のサーバーに移動された場合は、そのDNSエイリアスのみを変更する必要があります。
例えば:
したがって、db1がserver1からserver2に移動されたとしましょう。接続文字列を変更する必要はありません。 DNSエイリアスエントリのみを変更して、server1ではなくserver2に転送する必要があります。
これには既知の欠点はありますか?
小さな欠点の1つは、暗号化された接続を使用している場合、SQL Serverにバインドされている証明書にサブジェクトの別名(SAN)を追加する必要があることです。多数の小さなアプリケーションをホストする「共有」サーバーがあり、各アプリケーションにエイリアスを設定したい場合、これは大きな痛みになる可能性があります。
アプリケーションごとに個別のエイリアスを使用している場合は、サーバーに新しいアプリケーションを追加するたびに、新しい証明書を生成してインストールする必要があります。アプリケーションを削除するたびに新しい証明書が必要になるという点で、証明書に未使用/無効なSANがないことを確認する場合も同じことが当てはまる場合があります。
SQLデータベースでDNS CNAMEを使用する場合、TTL設定に注意する必要があることに注意してください。この設定は、システムに戻って、その前にDNSエントリをキャッシュする期間を示します。 DNSサーバーが必要です。おそらく、TTLを事前に調整して、切り替えを行うときに古いエントリがキャッシュされているクライアントシステムが存在しないようにする必要があります。 'ipconfig/flushdns'コマンドを実行してキャッシュをフラッシュしますが、すべてのコンピューターで個別に実行する必要があります。