このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、リンク サーバーを作成し、別の SQL Server からデータにアクセスする方法について説明します。 リンク サーバーを作成すると、複数のソースのデータを操作できます。 リンク サーバーは SQL Server の別のインスタンスである必要はありませんが、これは一般的なシナリオです。
バックグラウンド
リンク サーバーを使用すると、OLE DB データ ソースに対して分散された異種クエリにアクセスできます。 リンク サーバーが作成されると、このサーバーに対して分散クエリを実行でき、クエリは複数のデータ ソースのテーブルを結合できます。 リンク サーバーが SQL Server のインスタンスとして定義されている場合は、リモート ストアド プロシージャを実行できます。
リンク サーバーの機能と必要な引数は大きく異なる場合があります。 このトピックの例では一般的な例を示しますが、すべてのオプションについては説明しません。 詳細については、「sp_addlinkedserver (Transact-SQL)」を参照してください。
安全
権限
Transact-SQL ステートメントを使用する場合は、setupadmin 固定サーバー ロールのサーバーまたはメンバーシップに対するALTER ANY LINKED SERVER
アクセス許可が必要です。 Management Studio を使用する場合は、sysadmin 固定サーバー ロールのCONTROL SERVER
アクセス許可またはメンバーシップが必要です。
リンク サーバーを作成する方法
次のいずれかを使用できます。
SQL Server Management Studio の使用
SQL Server Management Studio を使用して SQL Server の別のインスタンスにリンク サーバーを作成するには
SQL Server Management Studio でオブジェクト エクスプローラーを開き、[ サーバー オブジェクト] を展開し、[ リンク サーバー] を右クリックして、[ 新しいリンク サーバー] をクリックします。
[ 全般 ] ページの [ リンク サーバー ] ボックスに、リンク先の SQL Server インスタンスの名前を入力します。
SQL Server
リンク サーバーを MicrosoftSQL Server のインスタンスとして識別します。 この方法で SQL Server リンク サーバーを定義する場合、 リンク サーバー で指定する名前はサーバーのネットワーク名である必要があります。 また、サーバーから取得されるすべてのテーブルは、リンク サーバー上のログイン用に定義された既定のデータベースから取得されます。その他のデータ ソース
SQL Server 以外の OLE DB サーバーの種類を指定します。 このオプションをクリックすると、その下のオプションがアクティブになります。プロバイダー
リスト ボックスから OLE DB データ ソースを選択します。 OLE DB プロバイダーは、レジストリ内の特定の PROGID に登録されます。製品名
リンク サーバーとして追加する OLE DB データ ソースの製品名を入力します。データ ソース
OLE DB プロバイダーによって解釈されるデータ ソースの名前を入力します。 SQL Server のインスタンスに接続する場合は、インスタンス名を指定します。プロバイダー文字列
データ ソースに対応する OLE DB プロバイダーの一意のプログラム識別子 (PROGID) を入力します。 有効なプロバイダー文字列の例については、「 sp_addlinkedserver (Transact-SQL)」を参照してください。場所
OLE DB プロバイダーによって解釈されるデータベースの場所を入力します。カタログ
OLE DB プロバイダーへの接続時に使用するカタログの名前を入力します。リンク サーバーに接続する機能をテストするには、オブジェクト エクスプローラーでリンク サーバーを右クリックし、[ 接続のテスト] をクリックします。
注
SQL Server のインスタンスが既定のインスタンスである場合は、SQL Server のインスタンスをホストするコンピューターの名前を入力します。 SQL Server が名前付きインスタンスの場合は、コンピューターの名前とインスタンスの名前 (Accounting\SQLExpress など) を入力します。
[ サーバーの種類 ] 領域で、[ SQL Server ] を選択して、リンク サーバーが SQL Server の別のインスタンスであることを示します。
[ セキュリティ ] ページで、元の SQL Server がリンク サーバーに接続するときに使用するセキュリティ コンテキストを指定します。 ユーザーがドメイン ログインを使用して接続しているドメイン環境では、[ ログインの現在のセキュリティ コンテキストを使用して作成 する] を選択することが多くの場合、最適な選択です。 ユーザーが SQL Server ログインを使用して元の SQL Server に接続する場合は、多くの場合、[ このセキュリティ コンテキストを使用して、 リンク サーバーで認証するために必要な資格情報を指定する] を選択することをお勧めします。
ローカル ログイン
リンク サーバーに接続できるローカル ログインを指定します。 ローカル ログインには、SQL Server 認証を使用したログインまたは Windows 認証ログインのいずれかを指定できます。 この一覧を使用して、特定のログインへの接続を制限したり、一部のログインが別のログインとして接続できるようにしたりします。偽装
ローカル ログインからリンク サーバーにユーザー名とパスワードを渡します。 SQL Server 認証の場合は、リモート サーバーにまったく同じ名前とパスワードを持つログインが存在する必要があります。 Windows ログインの場合、ログインはリンク サーバー上の有効なログインである必要があります。偽装を使用するには、構成が委任の要件を満たしている必要があります。
リモート ユーザー
リモート ユーザーを使用して、 ローカル ログインで定義されていないユーザーをマップします。 リモート ユーザーは、リモート サーバー上の SQL Server 認証ログインである必要があります。リモート パスワード
リモート ユーザーのパスワードを指定します。追加
新しいローカル ログインを追加します。削除
既存のローカル ログインを削除します。未作成
一覧で定義されていないログインに対して接続を確立しないことを指定します。セキュリティ コンテキストを使用せずに作成する
一覧で定義されていないログインのセキュリティ コンテキストを使用せずに接続を確立することを指定します。ログインの現在のセキュリティ コンテキストを使用して作成する
一覧で定義されていないログインのログインの現在のセキュリティ コンテキストを使用して接続を確立することを指定します。 Windows 認証を使用してローカル サーバーに接続されている場合は、Windows 資格情報を使用してリモート サーバーに接続します。 SQL Server 認証を使用してローカル サーバーに接続されている場合は、ログイン名とパスワードを使用してリモート サーバーに接続します。 この場合、リモート サーバーには、まったく同じ名前とパスワードを持つログインが存在する必要があります。このセキュリティ コンテキストを使用して作成する
リモート ログイン で指定されたログインとパスワードを使用して接続を確立することを指定し、一覧で定義されていないログインの パスワード ボックスを使用します。 リモート ログインは、リモート サーバー上の SQL Server 認証ログインである必要があります。必要に応じて、サーバー オプションを表示または指定するには、[ サーバー オプション] ページをクリックします。
照合順序の互換性
リンク サーバーに対する分散クエリの実行に影響します。 このオプションが true に設定されている場合、SQL Server では、リンク サーバー内のすべての文字が、文字セットと照合順序 (または並べ替え順序) に関してローカル サーバーと互換性があると見なされます。 これにより、SQL Server は文字列の比較をプロバイダーに送信できます。 このオプションが設定されていない場合、SQL Server は常に文字列の比較をローカルで評価します。このオプションは、リンク サーバーに対応するデータ ソースの文字セットと並べ替え順序がローカル サーバーと同じであることが確実である場合にのみ設定する必要があります。
データ アクセス
分散クエリ アクセス用のリンク サーバーを有効または無効にします。RPC
指定したサーバーから RPC を有効にします。RPC Out
指定したサーバーに対して RPC を有効にします。リモート照合順序を使用する
リモートカラムまたはローカルサーバーの照合順序を使用するかどうかを決定します。true の場合、リモート列の照合順序は SQL Server データ ソースに使用され、照合順序名で指定された照合順序は SQL Server 以外のデータ ソースに使用されます。
false の場合、分散クエリでは常にローカル サーバーの既定の照合順序が使用されますが、照合順序名とリモート列の照合順序は無視されます。 既定値は false です。
照合順序名
リモート照合順序の使用が true で、データ ソースが SQL Server データ ソースでない場合に、リモート データ ソースで使用される照合順序の名前を指定します。 名前は、SQL Server でサポートされている照合順序のいずれかである必要があります。このオプションは、SQL Server 以外の OLE DB データ ソースにアクセスするが、その照合順序が SQL Server の照合順序のいずれかに一致する場合に使用します。
リンク サーバーでは、そのサーバー内のすべての列に使用する単一の照合順序をサポートする必要があります。 リンク サーバーが 1 つのデータ ソース内で複数の照合順序をサポートしている場合、またはリンク サーバーの照合順序が SQL Server の照合順序のいずれかに一致するかどうかを判断できない場合は、このオプションを設定しないでください。
接続タイムアウト
リンク サーバーに接続するためのタイムアウト値 (秒単位)。0 の場合は、既定のリモート ログイン タイムアウト オプション値sp_configure使用します。
クエリのタイムアウト
リンク サーバーに対するクエリのタイムアウト値 (秒単位)。0 の場合は、既定のリモート クエリ タイムアウト オプション値sp_configure使用します。
分散トランザクションのプロモーションを有効にする
このオプションを使用して、Microsoft 分散トランザクション コーディネーター (MS DTC) トランザクションを介してサーバー間プロシージャのアクションを保護します。 このオプションが TRUE の場合、リモートストアドプロシージャの呼び出しによって分散トランザクションが開始され、トランザクションがMS DTCに登録されます。 詳細については、「 sp_serveroption (Transact-SQL)」を参照してください。OK をクリックします。
プロバイダー オプションを表示するには
プロバイダーが使用できるオプションを表示するには、[ プロバイダー のオプション] ページを クリックします。
すべてのプロバイダーで同じオプションを使用できるわけではありません。 たとえば、一部の種類のデータではインデックスを使用でき、一部は使用できない可能性があります。 このダイアログ ボックスは、SQL Server がプロバイダーの機能を理解するのに役立ちます。 SQL Server には一部の一般的なデータ プロバイダーがインストールされますが、データを提供する製品が変更されると、SQL Server によってインストールされたプロバイダーが最新の機能をすべてサポートしていない可能性があります。 データを提供する製品の機能に関する情報の最良のソースは、その製品のドキュメントです。
動的パラメーター
プロバイダーがパラメーター化されたクエリに対して '?' パラメーター マーカー構文を許可することを示します。 このオプションは、プロバイダーが ICommandWithParameters インターフェイスをサポートし、パラメーター マーカーとして '?' をサポートしている場合にのみ設定します。 このオプションを設定すると、SQL Server はプロバイダーに対してパラメーター化されたクエリを実行できます。 プロバイダーに対してパラメーター化されたクエリを実行する機能により、特定のクエリのパフォーマンスが向上する可能性があります。ネストされたクエリ
プロバイダーが FROM 句で入れ子になったSELECT
ステートメントを許可することを示します。 このオプションを設定すると、SQL Server は、FROM 句で SELECT ステートメントの入れ子を必要とする特定のクエリをプロバイダーに委任できます。レベル 0 のみ
レベル 0 の OLE DB インターフェイスのみがプロバイダーに対して呼び出されます。インプロセスを許可する
SQL Server を使用すると、プロバイダーをインプロセス サーバーとしてインスタンス化できます。 このオプションが設定されていない場合、既定の動作では、SQL Server プロセスの外部でプロバイダーをインスタンス化します。 SQL Server プロセスの外部でプロバイダーをインスタンス化すると、プロバイダー内のエラーから SQL Server プロセスが保護されます。 プロバイダーが SQL Server プロセスの外部でインスタンス化されている場合、長い列 (text
、ntext
、またはimage
) を参照する更新または挿入は許可されません。トランザクションされていない更新プログラム
ITransactionLocal が使用できない場合でも、SQL Server では更新が許可されます。 このオプションが有効になっている場合、プロバイダーはトランザクションをサポートしていないため、プロバイダーに対する更新は回復できません。アクセス パスとしてのインデックス
SQL Server は、プロバイダーのインデックスを使用してデータをフェッチしようとします。 既定では、インデックスはメタデータにのみ使用され、開かれることはありませんアドホック アクセスを禁止する
SQL Server では、OLE DB プロバイダーに対する OPENROWSET 関数と OPENDATASOURCE 関数を介したアドホック アクセスは許可されません。 このオプションが設定されていない場合、SQL Server ではアドホック アクセスも許可されません。'Like' 演算子をサポートします
プロバイダーが LIKE キー ワードを使用したクエリをサポートしていることを示します。
Transact-SQL の使用
Transact-SQL を使用してリンク サーバーを作成するには、 sp_addlinkedserver (Transact-SQL)CREATE LOGIN (Transact-SQL) ステートメントと sp_addlinkedsrvlogin (Transact-SQL) ステートメントを使用します。
Transact-SQL を使用して SQL Server の別のインスタンスにリンク サーバーを作成するには
クエリ エディターで、次の Transact-SQL コマンドを入力して、
SRVR002\ACCTG
という名前の SQL Server のインスタンスにリンクします。USE [master] GO EXEC master.dbo.sp_addlinkedserver @server = N'SRVR002\ACCTG', @srvproduct=N'SQL Server' ; GO
次のコードを実行して、リンク サーバーを使用しているログインのドメイン資格情報を使用するようにリンク サーバーを構成します。
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'SRVR002\ACCTG', @locallogin = NULL , @useself = N'True' ; GO
補足情報: リンク サーバーを作成した後に実行する手順
リンク サーバーをテストするには
次のコードを実行して、リンク サーバーへの接続をテストします。 この例では、リンク サーバー上のデータベースの名前を返します。
SELECT name FROM [SRVR002\ACCTG].master.sys.databases ; GO
リンク サーバーからテーブルを結合するクエリの記述
リンク サーバー上のオブジェクトを参照するには、4 部構成の名前を使用します。 次のコードを実行して、ローカル サーバー上のすべてのログインと、リンク サーバー上の一致するログインの一覧を返します。
SELECT local.name AS LocalLogins, linked.name AS LinkedLogins FROM master.sys.server_principals AS local LEFT JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked ON local.name = linked.name ; GO
リンク サーバー ログインに対して NULL が返されると、リンク サーバーにログインが存在しないことを示します。 リンク サーバーが別のセキュリティ コンテキストを渡すよう構成されているか、リンク サーバーが匿名接続を受け入れる場合を除き、これらのログインはリンク サーバーを使用できません。
こちらもご覧ください
リンク サーバー (データベース エンジン)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)