Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー プログラミング » OLE DB と ADO の開発

 

OLE DB を使用する Microsoft リンクサーバーの設定

SQL Anywhere OLE DB プロバイダーを使用して SQL Anywhere データベースへのアクセスを取得する Microsoft リンクサーバーを作成することができます。SQL クエリの発行には、Microsoft の 4 部分構成のテーブル参照構文か Microsoft の OPENQUERY SQL 関数を使用できます。4 部分構成構文の例を次に示します。

SELECT * FROM SADATABASE.demo.GROUPO.Customers

この例では、SADATABASE はリンクサーバーの名前であり、demo はカタログまたはデータベース名であり、GROUPO は SQL Anywhere データベースのテーブル所有者であり、また、Customers は SQL Anywhere データベースのテーブル名です。

もう 1 つの例では、Microsoft の OPENQUERY 関数を使用しています。

SELECT * FROM OPENQUERY( SADATABASE, 'SELECT * FROM Customers' )

OPENQUERY 構文では、2 番目の SELECT 文 ('SELECT * FROM Customers') が SQL Anywhere サーバーに渡され、実行されます。

Microsoft SQL Server 対話型アプリケーションまたは SQL Server スクリプトを使用して、SQL Anywhere OLE DB プロバイダーを使用するリンクサーバーを設定できます。

注意

リンクサーバーの設定の前に、Windows Vista 以降の Windows を使用するときに、2、3 考慮すべきことがあります。SQL Server は、システムのサービスとして実行します。Windows Vista 以降のバージョンでサービスが設定される方法に従い、サービスが共有メモリ接続を使用できない可能性、サーバーを起動できない可能性、およびユーザーデータソース定義にアクセスできない可能性があります。たとえば、[ネットワーク サービス] としてログインするサービスがサーバーを起動できない、共有メモリ経由で接続できない、ユーザーデータソースをアクセスできないなどがあります。これらの状況において、SQL Anywhere サーバーは、事前に起動させる必要があり、TCPIP 接続プロトコルを使用する必要があります。また、データソースが使用される予定の場合、システムデータソースにする必要があります。

 ♦ 対話形式でのリンクサーバーの設定
  1. Microsoft SQL Server 2005/2008 の場合は、SQL Server Management Studio を起動します。他のバージョンの SQL Server の場合は、このアプリケーション名とリンクサーバーの設定手順が異なることがあります。

    [オブジェクト エクスプローラー] ウィンドウ枠で、[サーバー オブジェクト] » [リンク サーバー] を展開します。[リンクサーバー] を右クリックし、[新しいリンク サーバー] をクリックします。

  2. [全般] ページに必要な情報を入力します。

    [全般] ページの [リンク サーバー] フィールドにリンクサーバー名を指定します (上記の例では SADATABASE)。

    [その他のデータ ソース] オプションを選択して、[プロバイダー] リストから [SQL Anywhere OLE DB Provider 12] を選択します。

    [プロダクト名] フィールドには、任意の内容を入力できます (SQL Anywhere またはアプリケーション名など)。

    [データ ソース] フィールドには、ODBC データソース名を指定できます (DSN)。これは便利なオプションであり、また、データソース名は必須ではありません。システム DSN を使用する場合、SQL Server の 32 ビットバージョン用の 32 ビット DSN であるか、SQL Server の 64 ビットバージョンの 64 ビット DSN である必要があります。

    Data Source: SQL Anywhere 12 Demo

    [プロバイダー文字列] フィールドには、UserID (UID)、ServerName (Server)、DatabaseFile (DBF) などの追加の接続パラメーターを含めることができます。

    Provider string: Server=myserver;DBF=sample.db

    [場所] フィールドは、SQL Anywhere Host 接続パラメーターと同等のものを指定できます (localhost:4444 や 10.25.99.253:2638 など)。

    Location: AppServer-pc:2639

    [初期カタログ] フィールドには、データベースの名前や接続先 (demo など) を含むことができます。データベースは、事前に開始しておく必要があります。

    Initial Catalog: demo

    これら最後の 4 つのフィールドと [セキュリティ] ページからのユーザー ID とパスワードの組み合わせは、データベースサーバーへの接続に成功するための十分な情報を含む必要があります。

  3. データベースのユーザー ID とパスワードは、プレーンテキストとして公開されてしまう [プロバイダー文字列] に接続文字列として指定する代わりに、[セキュリティ] ページで入力できます。

    SQL Server 2005/2008 では、[このセキュリティコンテキストを使用する] オプションをクリックし、[リモート ログイン][リモート パスワード] フィールドに値を入力します (パスワードはアスタリスクで表示されます)。

  4. [サーバー オプション] ページに移動します。

    [RPC] および [RPC 出力] オプションを有効にします。

    選択方法は、Microsoft SQL Server のバージョンによって異なります。SQL Server 2000 の場合、この 2 つのオプションを指定するために 2 つのチェックボックスをオンにする必要があります。SQL Server 2005/2008 の場合、このオプションは True/False で設定します。すべて True に設定されていることを確認してください。ストアドプロシージャーまたはファンクションの呼び出しを SQL Anywhere データベースで実行し、出入力パラメーターの受け渡しを正常に行うには、リモートプロシージャーコール (RPC) のオプションを選択する必要があります。

  5. [InProcess 許可] プロバイダーオプションを選択します。

    選択方法は、Microsoft SQL Server のバージョンによって異なります。SQL Server 2000 の場合、[プロバイダー オプション] ボタンをクリックすると、このオプションを選択できるページに移動します。SQL Server 2005/2008 の場合、[リンク サーバー] » [プロバイダー] の下で SAOLEDB.12 プロバイダーを右クリックし、[プロパティ] をクリックします。[Inprocess 許可] チェックボックスがオンになっていることを確認します。この Inprocess オプションがオンになっていないと、クエリが失敗します。

 ♦ スクリプトを使用したリンクサーバーの設定
  • 次のような SQL Server スクリプトを使用して、リンクサーバーを設定できます。スクリプトに必要な変更を加えた後、SQL Server で実行してください。新しいリンクサーバー名 (例では SADATABASE を使用)、オプションのデータソース名 (例では SQL Anywhere 12 Demo を使用)、オプションのプロバイダー文字列 (例では N'host=localhost:4444;server=myserver;dbn=demo' を使用)、およびリモートユーザー ID とパスワードを選択してください。



    USE [master]
    GO
    EXEC master.dbo.sp_addlinkedserver @server=N'SADATABASE', 
         @srvproduct=N'SQL Anywhere', @provider=N'SAOLEDB.12', 
         @datasrc=N'SQL Anywhere 12 Demo',
         @provstr=N'host=localhost:4444;server=myserver;dbn=demo'
    GO
    EXEC master.dbo.sp_serveroption @server=N'SADATABASE', 
         @optname=N'rpc', @optvalue=N'true'
    GO
    EXEC master.dbo.sp_serveroption @server=N'SADATABASE', 
         @optname=N'rpc out', @optvalue=N'true'
    GO
    -- Set remote login
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'SADATABASE', 
         @locallogin = NULL , @useself = N'False', 
         @rmtuser = N'DBA', @rmtpassword = N'sql'
    GO
    -- Set global provider "allow in process" flag
    EXEC master.dbo.sp_MSset_oledb_prop N'SAOLEDB.12', N'AllowInProcess', 1