sql >> データベース >  >> RDS >> Sqlserver

SQL Serverを実行している2つのDockerコンテナ間にリンクサーバーを作成する(T-SQLの例)

    この記事では、ある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を使用したリンクサーバーの削除を参照してください。


    1. プログラムによるSQLコードの生成

    2. 私のDBAは病気です-SysAdminsのためのデータベースフェイルオーバーのヒント

    3. MariaDB ROUND()とTRUNCATE()

    4. SQL ServerManagementStudioでのテーブル編集後の変更の保存