分散クエリ用の OLE DB プロバイダの構成

SQL Server には、分散クエリを管理するための高度なオプションが数多くあります。オプションには、プロバイダ レベルで管理されるものと、sp_serveroption を使用してリンク サーバー レベルで管理されるものがあります。これらの拡張オプションの構成は、熟練したシステム管理者だけ行うようにしてください。

OLE DB プロバイダ オプション

分散クエリを管理するための OLE DB プロバイダ オプションは SQL Server Management Studio で設定できます。オブジェクト エクスプローラで、プロバイダ名を右クリックし、[プロパティ] をクリックします。次の表で、使用可能なプロバイダ オプションについて説明します。

プロバイダ オプション

説明

DynamicParameters

ゼロ以外の場合、パラメータ化クエリに "?" パラメータ マーカー構文を使用できます。このオプションは、プロバイダが ICommandWithParameters インターフェイスをサポートしており、パラメータ マーカーとして "?" をサポートしている場合にのみ設定してください。このオプションを設定すると、SQL Server からプロバイダに対してパラメータ化クエリを実行できます。プロバイダに対してパラメータ化クエリを実行すると、一部のクエリのパフォーマンスが向上します。

NestedQueries

ゼロ以外の場合、FROM 句の中で SELECT ステートメントを入れ子にできます。このオプションを設定すると、SQL Server は FROM 句の中で SELECT ステートメントを入れ子にする必要のある特定のクエリをプロバイダに委任できます。

LevelZeroOnly

ゼロ以外の場合、プロバイダに対してレベル 0 の OLE DB インターフェイスのみを起動します。

AllowInProcess

ゼロ以外の場合、SQL Server によりプロバイダのインスタンスをインプロセス サーバーとして作成できます。このオプションがレジストリに設定されていない場合、既定の動作として SQL Server のプロセス外でプロバイダのインスタンスが作成されます。SQL Server プロセス外でプロバイダのインスタンスを作成すると、SQL Server プロセスがプロバイダのエラーから保護されます。SQL Server プロセス外でプロバイダのインスタンスを作成するときは、参照元の LOB 列 (varchar(max)、nvarchar(max)、varbinary(max)、text、ntext、image のいずれか) を更新したり挿入したりすることができません。

SQL Server Native Client OLE DB プロバイダのインスタンスは、プロセス外では作成できません。プロセス外で実行するように SQL Server Native Client OLE DB プロバイダを設定し、分散クエリを実行しようとすると、エラーが発生します。

NonTransactedUpdates

ゼロ以外の場合、ITransactionLocal を使用できないときでも SQL Server による更新が可能です。このオプションが有効である場合、プロバイダがトランザクションをサポートしないので、プロバイダに対する更新を元に戻すことはできません。

IndexAsAccessPath

ゼロ以外の場合、SQL Server はプロバイダのインデックスを使用してデータをフェッチします。既定ではインデックスはメタデータにのみ使用され、開かれることはありません。

DisallowAdhocAccess

ゼロ以外の値を設定すると、OPENROWSET 関数および OPENDATASOURCE 関数を経由した OLE DB プロバイダへのアドホック アクセスが SQL Server により禁止されます。このオプションを設定しない場合も、アドホック アクセスは SQL Server により禁止されます。

このオプションは、管理者以外のユーザーがアドホック クエリを実行できるかどうかを制御します。管理者はこのオプションの影響を受けません。

SqlServerLike

ゼロ以外の場合、プロバイダは SQL Server で実装されているとおりに LIKE 演算子をサポートします。このオプションを設定すると、分散クエリの評価の一部として LIKE 述語を使用しているクエリをリモート列に対して行う場合に、クエリをプロバイダに送信することが SQL Server により検討されます。

OLE DB プロバイダ オプションはプロバイダ レベルで動作します。プロバイダに対してオプションが設定されると、同じ OLE DB プロバイダを使用しているすべてのリンク サーバー定義にその設定が適用されます。

リンク サーバー オプション

既に説明したプロバイダレベルのオプションとは別に、sp_serveroption を使用してリンク サーバー レベルで使用できるオプションでも分散クエリを管理できます。サーバーレベルのオプションはプロバイダレベルのオプションとは異なり、指定したリンク サーバーに対する動作にしか影響しません。

次の表で、さまざまなリンク サーバー オプションについて説明します。

リンク サーバー オプション

説明

use remote collation

true に設定すると、リンク サーバーの文字型列の照合順序の情報が SQL Server により使用されます。リンク サーバーが SQL Server インスタンスである場合、照合順序の情報は SQL Server OLE DB プロバイダ インターフェイスから自動的に派生します。リンク サーバーが SQL Server インスタンスでない場合、SQL Server では collation name オプションの照合順序セットが使用されます。

false に設定すると、指定したリンク サーバーの文字データは SQL Server によって、ローカルの SQL Server インスタンスの既定の照合順序で解釈されます。

collation name

use remote collation オプションが true の場合に、リンク サーバーの文字データに対して使用する照合順序を指定します。use remote collation オプションが false の場合、またはリンク サーバーが SQL Server インスタンスの場合、このオプションは無視されます。

connection timeout

SQL Server がリンク サーバーとの接続を試行するときに使用するタイムアウト値を秒単位で指定します。このオプションが設定されていない場合は、グローバル構成オプションの [リモート ログイン タイムアウト] で指定されている現在の値が既定値として使用されます。

lazy schema validation

このオプションが false (既定値) に設定されている場合、SQL Server では、リモート テーブルのコンパイル以降にスキーマに変更が行われたどうかを確認します。確認はクエリを実行する前に行われます。スキーマが変更されている場合は、SQL Server により新しいスキーマでクエリが再コンパイルされます。

このオプションを true に設定すると、リモート テーブルのスキーマの確認が実行時まで行われません。そのため、クエリがコンパイルされてから実行されるまでの間にリモート テーブルのスキーマが変更されると、分散クエリが失敗する可能性があります。

SQL Server を実行しているリンク サーバーに対して分散パーティション ビューを使用する場合、このオプションを true に設定できます。パーティション ビューにクエリを実行するときに、その中の特定のテーブルが実際に使用されるとは限りません。そのため、スキーマの検証を遅らせるとパフォーマンスが向上する場合があります。