この記事では、あるDockerコンテナー上のSQLServerインスタンスから別のDockerコンテナー上のSQLServerインスタンスにリンクサーバーを作成するプロセスについて説明します。両方のDockerコンテナが同じマシン上にあります。
このプロセスは、リンクサーバーを作成するために使用するプロセスとまったく同じです(たとえば、SQL Serverインスタンスが別のマシンにあり、Dockerコンテナーで実行されていない場合でも)。
ここでのすべての例では、Transact-SQLを使用しています。これにより、グラフィカルユーザーインターフェイス(SSMSなど)に依存せずにリンクサーバーを作成できます。
リンクサーバーを作成する
T-SQLを使用してリンクサーバーを作成するには、sp_addlinkedserver
を実行します。 リンクサーバーの名前とそのソースを渡す際のストアドプロシージャ。
リンクサーバーを作成する例を次に示します。
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2,1433';
この場合、リンクサーバー名はHomerであり、DockerコンテナーのIPアドレスを指定し、その後にTCPポートを指定します。必要に応じて、サーバー名とIPアドレス/ポートを変更します。
ターミナルウィンドウで次のコードを実行すると、DockerコンテナのIPアドレスを確認できます。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' Homer
それでも問題が解決しない場合は、古い方法を試してください:
docker inspect -f"{{.NetworkSettings.IPAddress}}" Homer
必要に応じてコンテナ名を変更してください。
リンクサーバーのテスト
リンクサーバーを追加したので、sp_testlinkedserver
を使用できます。 テストするには:
EXEC sp_testlinkedserver Homer;
結果(成功した場合):
Commands completed successfully.
ログインに失敗しましたか?
「ログインに失敗しました」というエラーが表示された場合は、リモートサーバーに対応するログインがない可能性があります。ローカルサーバーのログインと同じクレデンシャルで対応するログインが必要です。
または、リンクサーバー専用に別のログインを作成することもできます。
詳細とこれを行う例については、SQL Serverでのリンクサーバーの作成(T-SQLの例)を参照してください。この記事では、リンクサーバーについてこの記事と同じ詳細を使用しています。また、構成後にリンクサーバーで分散クエリとパススルークエリを実行する例もあります。
リンクサーバーを削除する
「Homer」と呼ばれるリンクサーバーと関連するすべてのログインを削除する例を次に示します。
EXEC sp_dropserver 'Homer', 'droplogins';
droplogins
引数はオプションですが、リモートサーバーとリンクサーバーのログインエントリが関連付けられているリンクサーバーを削除するときにこれを指定しない場合、またはレプリケーションパブリッシャーとして構成されている場合は、エラーメッセージが返されます。
その他の例については、T-SQLを使用したリンクサーバーの削除を参照してください。