sql >> データベース >  >> RDS >> Sqlserver

SQL Serverでデータアクセスを有効/無効にする方法(T-SQLの例)

    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                        |
    +--------------------+--------------------------+
    

    この場合、ローカルサーバーの設定はリンクサーバーの対応するサーバーとは異なります。

    また、分散クエリを介してこの情報を取得できたという事実は、リモートサーバーではなく、自分のサーバーの設定が分散クエリを有効にしたことを示しています。


    1. SQL Serverでカスケード削除を使用するにはどうすればよいですか?

    2. 1つのSQLクエリに複数の行を挿入する方法–今週のインタビュー質問#069

    3. mysql、列名を繰り返し処理します

    4. SQL Server(T-SQL)でデータベースメールキューを停止/開始する方法