Share via


クラスター化された SQL Server でのリンク サーバーの考慮事項

SQL Server に同梱されていない OLE DB プロバイダーに対するリンク サーバーをクラスター化された SQL Server 内に構成するときは、その OLE DB プロバイダーがクラスターのすべてのノードにインストールされていることを確認してください。また、リンク サーバーを定義するプロパティはすべて、場所の透過性が必要です。これらのプロパティには、SQL Server がクラスターの特定ノードで常時動作していることを想定した情報を含めないようにします。

次の例では、SQL Server を実行するサーバーに対してリンク サーバーを定義し、SELECT ステートメントの中で 4 つの要素で構成される名前を使用してリモート テーブルの 1 つを参照します。(SQLNCLI を使用すると、SQL Server により最新バージョンの SQL Server Native Client OLE DB プロバイダーにリダイレクトされます)。

sp_addlinkedserver @server = N'LinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'ServerNetName', 
    @catalog = N'AdventureWorks2008R2'
GO
SELECT *
FROM LinkServer.AdventureWorks2008R2.HumanResources.Employee
GO

ループバック リンク サーバー

リンク サーバーは、どのサーバーで定義されたかを示す (ループ バックする) ように定義することができます。ループバック サーバーは、単一のサーバー ネットワークで分散クエリを使用するアプリケーションをテストする際に最も有効です。

たとえば、MyServer という名前のサーバーで次の sp_addlinkedserver ストアド プロシージャを実行すると、ループバック リンク サーバーが定義されます。

sp_addlinkedserver @server = N'MyLink',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'MyServer', 
    @catalog = N'AdventureWorks2008R2'
GO

MyLink をサーバー名として使用した Transact-SQL ステートメントは、SQLNCLI プロバイダーを経由してローカル サーバーに戻ります。

ループバック リンク サーバーは分散トランザクション内では使用することができません。分散トランザクション内でループバック リンク サーバーに対して分散クエリを実行すると、エラーが発生します。たとえば、エラー 3910: "[Microsoft][ODBC SQL Server Driver][SQL Server] トランザクション コンテキストを他のセッションが使用中です。" というエラーが返されます。複数のアクティブな結果セット (MARS) が有効になっていない接続から INSERT...EXECUTE ステートメントをループバック リンク サーバーに対して実行する場合は、この制限は適用されません。ただし、接続で MARS が有効になっている場合は適用されます。