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 接続プロトコルを使用する必要があります。また、データソースが使用される予定の場合、システムデータソースにする必要があります。
Microsoft SQL Server 2005/2008 の場合は、SQL Server Management Studio を起動します。他のバージョンの SQL Server の場合は、このアプリケーション名とリンクサーバーの設定手順が異なることがあります。
[オブジェクト エクスプローラー] ウィンドウ枠で、[サーバー オブジェクト] » [リンク サーバー] を展開します。[リンクサーバー] を右クリックし、[新しいリンク サーバー] をクリックします。
[全般] ページに必要な情報を入力します。
[全般] ページの [リンク サーバー] フィールドにリンクサーバー名を指定します (上記の例では 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 とパスワードの組み合わせは、データベースサーバーへの接続に成功するための十分な情報を含む必要があります。
データベースのユーザー ID とパスワードは、プレーンテキストとして公開されてしまう [プロバイダー文字列] に接続文字列として指定する代わりに、[セキュリティ] ページで入力できます。
SQL Server 2005/2008 では、[このセキュリティコンテキストを使用する] オプションをクリックし、[リモート ログイン] と [リモート パスワード] フィールドに値を入力します (パスワードはアスタリスクで表示されます)。
[サーバー オプション] ページに移動します。
[RPC] および [RPC 出力] オプションを有効にします。
選択方法は、Microsoft SQL Server のバージョンによって異なります。SQL Server 2000 の場合、この 2 つのオプションを指定するために 2 つのチェックボックスをオンにする必要があります。SQL Server 2005/2008 の場合、このオプションは True/False で設定します。すべて True に設定されていることを確認してください。ストアドプロシージャーまたはファンクションの呼び出しを SQL Anywhere データベースで実行し、出入力パラメーターの受け渡しを正常に行うには、リモートプロシージャーコール (RPC) のオプションを選択する必要があります。
[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 |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |