SQL Serverには、分散クエリアクセス用のリンクサーバーを有効または無効にする「データアクセス」構成オプションがあります。
「サーバーがデータアクセス用に構成されていません」というエラーが発生した場合は、分散クエリを実行しようとしているリンクサーバーのデータアクセスを有効にする必要があります。逆に、データアクセスを無効にする必要がある場合もあります。
データアクセスを有効または無効にするには、sp_serveroption
を使用します システムストアドプロシージャ。分散クエリを実行する予定のサーバーに対して実行します。次の例は、これを行う方法を示しています。
例1-データアクセスを有効にする
データアクセスを有効にする方法は次のとおりです。
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'TRUE';
この場合、サーバーはsqlserver007
と呼ばれます。 、DATA ACCESS
を設定しました TRUE
のオプション 。
同じことを行うためのより簡潔な方法は次のとおりです。
sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';
これらのいずれかを実行すると、指定したリンクサーバーでのデータアクセスが有効になります。
ちなみに、必要に応じて、指定したリンクサーバーをローカルサーバーにすることができます。リモートサーバーである必要はありません。
データアクセス設定を確認するには、sys.servers
に対してクエリを実行します システムカタログビュー。
SELECT name, is_data_access_enabled FROM sys.servers;
結果:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 1 | | Homer | 1 | +--------------+--------------------------+
繰り返しますが、これはリモートサーバーではなくローカルサーバーに対して実行します。
例2–データアクセスを無効にする
データアクセスを無効にするには、@optvalue
を設定するだけです。 FALSE
へ 。
EXEC sp_serveroption @server = 'sqlserver007', @optname = 'DATA ACCESS', @optvalue = 'FALSE';
もう一度設定を確認してください。
SELECT name, is_data_access_enabled FROM sys.servers;
結果:
+--------------+--------------------------+ | name | is_data_access_enabled | |--------------+--------------------------| | sqlserver007 | 0 | | Homer | 1 | +--------------+--------------------------+
どのサーバーでコードを実行しますか?
分散クエリを実行する予定のサーバーに対してコードを実行します。
私の例では、 sqlserver007 ローカルサーバーと Homer の名前です。 リモート/リンクサーバーです。 Homer に対して分散クエリを実行したい場合 、 sqlserver007 に対してコードを実行します 。
Homer にジャンプする必要はありません 設定を変更します。実際、 sqlserver007 に適用した設定とは異なる設定になる可能性があります。 。
この点を示すために、リンクサーバーの結果をリモートサーバーの実際の設定と比較すると、次のようになります。
EXEC sp_serveroption @server = 'Homer', @optname = 'DATA ACCESS', @optvalue = 'TRUE'; SELECT 'From local', is_data_access_enabled FROM sys.servers WHERE name = 'Homer' UNION ALL SELECT 'Remote setting', is_data_access_enabled FROM Homer.master.sys.servers WHERE server_id = 0;
結果:
+--------------------+--------------------------+ | (No column name) | is_data_access_enabled | |--------------------+--------------------------| | From local | 1 | | Remote setting | 0 | +--------------------+--------------------------+
この場合、ローカルサーバーの設定はリンクサーバーの対応するサーバーとは異なります。
また、分散クエリを介してこの情報を取得できたという事実は、リモートサーバーではなく、自分のサーバーの設定が分散クエリを有効にしたことを示しています。