レポートサービスに使用するデータベースがあります。このデータベースは、もはや存在しない請負業者によって作成されました。リンクサーバー上の単一のテーブルへの参照は、データベース全体に埋め込まれています。そのリンクサーバー上のコンテンツが移動され、サーバーは廃止されます。
リンクサーバーのすべての参照を探し回って、新しいリンクサーバーを指すように更新したり、類義語名を使用するように変更したりするのではなく、新しいリンクサーバーを作成してから類義語を追加することができます(または許容できます)。現在の完全修飾リンクサーバー参照と同じ名前を使用していますが、新しいリンクサーバーを指していますか?これにより、すべてのデータベースコードをそのままにして、ビジネスユーザーの混乱を最小限に抑えることができます。
これが私が考えていることです。現在のリンクサーバーはSRAPPです。リンクサーバーを使用するすべてのクエリは、OPub.dbo.ADEを指します。
exec sp_addlinkedserver @server=SQLProd1
その後
CREATE SYNONYM [SRAPP.OPub.dbo.ADE]
FOR SQLProd1.OPub.dbo.ADE
GO
最後に、
exec sp_dropserver 'SRAPP'
SQL Serverは、リンクサーバー参照と同一に見えるシノニム名で混乱しますか?
あなたはあなたのアイデアを試しましたか?結果はどうでしたか?はい、次のようにsynonym
を作成できます。
CREATE SYNONYM [SRAPP.OPub.dbo.ADE]
FOR SQLProd1.OPub.dbo.ADE
GO
ただし、リンクサーバーの同義語は使用できません。また、SQL Server 2016では、次の制限があります。
関数ベースオブジェクトの4部構成の名前はサポートされていません。
推奨:リンクサーバー 'SRAPP'を削除して再作成します。既存の定義をスクリプト化することで自分自身を助けることができます。既存のリンクサーバーを削除し、新しいサーバー名を使用して再作成します。
SQL Server 2016以降では、synonyms
はonlyに対して次のように定義できます。
はい、類義語について考えられることはたくさんありますが、それらはまだ存在していません。
シノニムは、スキーマが所有するデータベースオブジェクトです。スキーマを使用して選択するには、次のようになります。
select * from [MyDataBase].[dbo].[SRAPP.OPub.dbo.ADE]
or
select * from [SRAPP.OPub.dbo.ADE]
混乱の可能性はありません。
古いサーバーが廃止される(オフラインになる)場合、IT担当者は、廃止されるサーバーの名前のDNSエントリを、引き継ぐ新しいサーバーを指すように設定します。これは最もクリーンなソリューションではありませんが、データベース内の何も更新する必要はなく、リンクサーバー接続はそのままです。
ここでの最初の問題は、シノニムがリンクサーバー参照と同じように見えることです。角かっこ[]
を使用することで、ピリオドを他の文字と同じように扱い、SRAPPを分離して扱わないように指示しています。サーバー、データベース、スキーマなどのように...
つまり、角括弧を削除すると、少なくともこの問題が発生します
'CREATE SYNONYM' does not allow specifying the database name as a prefix to the object name.
ここで理想的な答えになるリンクサーバーの同義語を使用する方法はわかりません。私の知る限り、これらの参照を更新する必要があると思います。最小限の作業で、ここにあるように機能するはずの同義語を設定し、参照を見つけて、角括弧を追加して、同義語と一致させることができます。