ODBC データソースをリンクサーバーとして利用



SQL Gateway のTDS リモーティング機能を使って、100 を超えるCData ODBC drivers を含むあらゆるODBC データソースのリンクサーバーを構築できます。 リンクサーバーの設定は、SQL Server Management Studio (SSMS) のUI から、もしくはストアドプロシージャから実行できます。

リンクサーバーのメリットを知りたい方は、こちらの記事へ詳細

TDS リモーティングサービスの設定

SQL Gateway はクライアントからのSQL Server TDS プロトコルを待ち受けるサービスを実行します。 サービスの設定は、SQL Gateway のUI から行うことができます。詳細は、SQL Gateway 概要のセットアップガイドを参照してください。

ODBC データソースのリンクサーバーの作成

TDS リモーティングサービスを設定し起動したら、リンクサーバーを作成して接続を行います。 SQL Server Management Studio (SSMS) で設定するか、ストアドプロシージャを呼び出して設定します。

SSMS 上でリンクサーバーを作成

次の手順でオブジェクトエクスプローラー上でリンクサーバーを作成します。

  1. SSMS を開き、SQL Server のインスタンスに接続します。.
  2. オブジェクトエクスプローラーでSQL Server のデータベースノードを拡張します。「サーバーオブジェクト」ノードを右クリックして「新しいリンクサーバー」をクリックします。新しいリンクサーバーが開かれます。
  3. 「全般」では、「その他のデータソース」をクリックして、リンクサーバーの名前を付け、次の情報を入力します:
    • Provider: SQL Server のバージョンに対応するSQL Server Native Client Provider を選択します。この例ではSQL Server Native Client 11.0。
    • Data Source: カンマ区切りで、TDS リモーティングのホストおよびポート番号を入力します。

      この例の「localhost」はSQL Server が起動している場合です。リンクサーバーとSQL Server が別のマシンで起動している場合には注意してください。

    • Catalog: 接続するODBC データソースのシステムDSN を入力。
  4. 「セキュリティ」セクションでは、「このセキュリティコンテクストを使用する」を選択して、SQL Gateway で設定したユーザーのUsername とPassword を入力します。

プログラムからリンクサーバーを作成

SSMS でのリンクサーバーの作成の他に、ストアドプロシージャから作成も可能です。次のインプットが必要です:

  • server: リンクサーバー名。
  • provider: SQL Server Native Client Provider には、「SQLNCLI」を入力します。
  • datasrc: カンマ区切りで、TDS リモーティングのホストおよびポート番号を入力します。

    datasrc の「Localhost 」はSQL Server が起動している場合です。リンクサーバーとSQL Server が別のマシンで起動している場合には注意してください。

  • catalog: サービスとするシステムDSN を入力。
  • srvproduct: データソースのプロダクト名を入力します。例:「CData SQL Gateway」もしくは空の文字列。
次の手順でリンクサーバーを作成し、SQL Gateway に認証します:
  1. sp_addlinkedserver を呼び出して、リンクサーバーを作成:

    EXEC sp_addlinkedserver @server='SALESFORCE',
      @provider='SQLNCLI',
      @dataclass=lazyload data-src='<MachineIPAddress>,1433',
      @catalog='CData Salesforce Source Sys',
      @srvproduct ='';
    GO
  2. sp_addlinkedsrvlogin ストアドプロシージャを呼び出し、SQL Server ユーザーがTDS リモーティングサービスの認証されたユーザーのクレデンシャルで接続することを許可します。 ここで使用するクレデンシャルはSQL Gateway アプリケーションに存在している必要があります。

    EXEC sp_addlinkedsrvlogin @rmtsrvname='SALESFORCE',
      @rmtuser='admin',
      @rmtpassword='test',
      @useself='FALSE',
      @locallogin=NULL;
    GO

SSMS から接続

SSMS はSQL Server Client OLE DB Provider を使用していて、ODBC Driver がinprocess で使われる仕様になっています。 SQL Server のリンクサーバーをSSMS から呼び出すには、SQL Server Native Client Provider のオプションを「Allow inprocess」に設定する必要があります。 「サーバーオブジェクト」→「リンクサーバー」→「Providers」をクリックして、「allow inprocess」をチェックします。

クエリの実行

これでSQL Server をサポートするあらゆるツールおよびアプリケーションからクエリを実行することができます。テーブル名は以下を参考としてください:

SELECT * FROM [LINKED_SERVER].[CATALOG].[SCHEMA].[TABLE_NAME]