SQL Native Client OLE DB プロバイダ

更新 : 2005 年 12 月 5 日

Microsoft SQL Native Client OLE DB プロバイダには、Microsoft SQL Server 2005 データベースに対する OLE DB インターフェイスが用意されています。SQL Server 分散クエリでは、SQL Native Client OLE DB プロバイダを使用することにより、SQL Server のリモート インスタンスのデータにクエリを実行できます。

SQL Server データベースにアクセスするリンク サーバーを作成するには

  1. SQL Server のリモート インスタンスを data_source として実行しているサーバーのネットワーク名を指定して sp_addlinkedserver を実行し、リンク サーバーを作成します。SQL Server リンク サーバーの場合は、プロバイダ SQLNCLI の指定を省略できます。

    たとえば、ネットワーク名が NetSQLSrvr というサーバー上で実行される SQL Server のインスタンスに対して動作する LinkSQLSrvr というリンク サーバーを作成するには、次のいずれかを実行します。

    sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr'
    sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'
    

    または、次の例で示すように、SQL Server リンク サーバーをそのネットワーク名として定義できます。

    sp_addlinkedserver N'NetSQLSrvr'
    

SQL Server 2000 のインスタンスを実行するサーバーに対して分散クエリを実行する場合は、SQL Server 2000 Service Pack 4 (SP4) を適用することをお勧めします。SP4 を適用していない場合は、SP4 に含まれる Instcat.sql スクリプトを実行して、カタログ ストアド プロシージャをアップグレードする必要があります。

SQL Server Version 7.0 以前を実行しているサーバーに対して分散クエリを実行する場合、分散クエリが適切に動作するためには、旧バージョンのカタログ ストアド プロシージャをアップグレードする必要があります。たとえば、サーバーが SQL Server 7.0 のインスタンスを実行している場合は、サーバー上のカタログ ストアド プロシージャを SQL Server 2005 にアップグレードしてから、SQL Server 2005 のインスタンスを実行するサーバーからの分散クエリで参照する必要があります。

リモート SQL Server テーブルを更新すると、ローカル サーバーまたはクライアントはその更新に対して起動されたトリガから生じる結果セットやメッセージを受け取りません。

4 つの部分で構成された名前を使用する場合は、常にスキーマ名を指定してください。分散クエリでスキーマ名を指定しないと、OLE DB はテーブルを見つけることができません。ローカル テーブルを参照する場合、SQL Server は所有者名が指定されていなければ既定値を使用します。次の SELECT ステートメントは 7314 エラーを生成し、仮にリンク サーバー ログインがリンク サーバー上の AdventureWorks データベース内の dbo ユーザーにマップされていてもエラーになります。

sp_addlinkedserver @server = N'LinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'ServerNetName', 
    @catalog = N'AdventureWorks'
GO
SELECT *
FROM LinkServer.AdventureWorks.dbo.Vendor

次の例では、リンク サーバーとリモート サーバーの両方を othersite というネットワーク名の同じコンピュータにアクセスするように定義しています。リンク サーバー定義ではリモート サーバーのネットワーク名と同じ名前を使用しますが、リモート サーバー定義では別の名前を使用しています。

/* Create a linked server definition to othersite. */
EXEC sp_addlinkedserver 'othersite', N'SQL Server'

/* Create a remote server definition using a
   fictitious name. */
EXEC sp_addserver 'RPCothersite'

/* Set the fictitious name to the network name far away. */
EXEC sp_setnetname 'RPCothersite', 'othersite'

これらの名前は、分散クエリまたはリモート プロシージャ コール内で参照できます。

/* A distributed query referencing othersite. */
SELECT *
FROM othersite.Northwind.dbo.Employees
/* A remote procedure call to the same server. */
EXEC RPCothersite.master.dbo.sp_who
/* Distributed queries can be used to execute
   stored procedures on the other server. */
EXEC othersite.master.dbo.sp_who

リンク サーバーとリモート サーバーでは、実行されるストアド プロシージャのログイン マッピング メカニズムに相違があります。詳細については、「サーバーのリンク」を参照してください。

分散クエリでのトランザクションに関する注意点

Microsoft SQL Native Client OLE DB プロバイダでは、入れ子になったトランザクションはサポートされません。このため、複数の Transact-SQL ステートメントに関係するトランザクション内のデータ変更処理、および分散パーティション ビューに対するデータ変更処理では、XACT_ABORT を ON に設定する必要があります。

参照

概念

クラスタ化された SQL Server でのリンク サーバーの考慮事項
SQL Server の複数インスタンス上の分散クエリ
分散クエリ
分散クエリと分散トランザクション

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

新しい内容 :
  • SQL Server 2000 のインスタンスを実行するサーバーに対して SQL Server 2000 Service Pack 4 を適用する推奨事項を追加しました。