次の方法で共有


分散クエリ アーキテクチャ

Microsoft SQL Server 2005 は、Transact-SQL ステートメント内で異種 OLE DB データ ソースを参照する方法として、次の 2 つをサポートしています。

  • リンク サーバー名
    システム ストアド プロシージャ sp_addlinkedserversp_addlinkedsrvlogin を使用して、OLE DB データ ソースにサーバー名を渡します。リンク サーバー内のオブジェクトは、4 部構成の名前を使用して Transact-SQL ステートメント内で参照できます。たとえば、DeptSQLSrvr というリンク サーバー名が SQL Server 2005 の別のインスタンスで定義されている場合、次のステートメントはこのサーバー上のテーブルを参照します。

    SELECT Title, HireDate 
       FROM DeptSQLSrvr.AdventureWorks.HumanResources.Employee
    

    リンク サーバー名を OPENQUERY ステートメントで指定して、OLE DB データ ソースの行セットを開くこともできます。この行セットは、Transact-SQL ステートメント内でテーブルと同じように参照できます。

  • アドホック コネクタ名
    データ ソースを頻繁に参照しない場合は、リンク サーバーに接続するために必要な情報を指定して OPENROWSET 関数または OPENDATASOURCE 関数を指定します。これにより、行セットは Transact-SQL ステートメント内でテーブルと同じように参照できます。

    SELECT *
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
            'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';'';
            Employees)
    

SQL Server では、OLE DB を使用してリレーショナル エンジンとストレージ エンジンの間の通信を行います。リレーショナル エンジンは、各 Transact-SQL ステートメントを一連の操作に分割します。それぞれの操作は、ストレージ エンジンがベース テーブルから開いた単純な OLE DB 行セットに対する操作です。これは、リレーショナル エンジンは、OLE DB データ ソースに対する単純な OLE DB 行セットも開くことができることを意味しています。

リレーショナル エンジン、OLE DB 階層、ストレージ エンジン

リレーショナル エンジンは OLE DB API (アプリケーション プログラミング インターフェイス) を使用して、リンク サーバー上の行セットを開き、行をフェッチし、トランザクションを管理します。

OLE DB データ ソースにリンク サーバーとしてアクセスするには、SQL Server が動作するサーバー上に OLE DB プロバイダが存在している必要があります。OLE DB データ ソースに対して使用できる Transact-SQL 操作の数は、OLE DB プロバイダの機能によって決まります。詳細については、「分散クエリの OLE DB プロバイダ参照」を参照してください。

たとえば、sysadmin 固定サーバー ロールのメンバは、SQL Server 2005 のインスタンスごとに SQL Server DisallowAdhocAccess プロパティを使用して、OLE DB プロバイダのアドホック コネクタ名の使用を有効化または無効化できます。アドホック アクセスが有効化されると、そのインスタンスにログオンしているユーザーは、アドホック コネクタ名を含んだ SQL ステートメントを実行し、OLE DB プロバイダを使用してアクセスできるネットワークのすべてのデータ ソースを参照できます。sysadmin ロールのメンバは、データ ソースへのアクセスを制御するために、その OLE DB プロバイダに対するアドホック アクセスを無効化できます。その結果、ユーザーは管理者が定義したリンク サーバー名で参照されるデータ ソースのみに制限されます。既定では、SQL Server OLE DB プロバイダではアドホック アクセスが有効化されており、他のすべての OLE DB プロバイダでは無効化されています。

分散クエリを使用すると、SQL Server サービスを実行している Microsoft Windows アカウントのセキュリティ コンテキストを使用して、他のデータ ソース (たとえば、ファイルや Active Directory などのリレーショナルでないデータ ソース) にアクセスできます。SQL Server 2005 は Windows ログインでは正常にログインを借用できますが、SQL Server ログインでは借用できません。この場合、SQL Server サービスを実行しているアカウントに権限があり、分散クエリ ユーザーには権限のない他のデータ ソースに、分散クエリ ユーザーからのアクセスを許してしまう可能性が生じます。対応するリンクサーバーにアクセスする権限のある特定のログインを定義するには、sp_addlinkedsrvlogin を使用します。このような制御は、アドホック名では使用できないので、OLE DB プロバイダでアドホック アクセスを有効にする場合は十分に注意してください。

可能な場合はいつでも、SQL Server はデータ ソースに対して、結合、条件、射影、並べ替え、および GROUP BY (SQL 言語) 操作などのリレーショナル操作を試行します。特に指定しない限り、SQL Server 自身がベース テーブルをスキャンして SQL Server に読み込んだり、リレーショナル操作を実行することはありません。SQL Server は OLE DB プロバイダに問い合わせ、そのプロバイダがサポートする SQL 文法のレベルを判別し、その情報に基づいて、可能な限り多くのリレーショナル操作をプロバイダに送ります。詳細については、「OLE DB プロバイダの SQL 言語構文の要件」を参照してください。

SQL Server 2005 では、OLE DB プロバイダのメカニズムを指定して、OLE DB データ ソース内でのキー値の分布状況を示す統計を返すようにします。これにより、各 SQL ステートメントの必要条件に対して、SQL Server クエリ オプティマイザがデータ ソース内のデータのパターンをより正確に分析できるようになり、最適な実行プランを作成するクエリ オプティマイザの機能が向上します。詳細については、「OLE DB プロバイダを使用するための分布統計情報の要件」を参照してください。

参照

概念

リンク サーバーの委任用の構成
分散クエリ

ヘルプおよび情報

SQL Server 2005 の参考資料の入手