リンクサーバーを管理する

このページでは、インスタンスの登録、リンクサーバーの追加、リンクサーバーのクエリなど、Cloud SQL インスタンスでリンクサーバーを管理する方法について説明します。

インスタンスを登録して、リンクサーバーを許可する

インスタンスに cloudsql enable linked servers フラグを追加するには、次のコマンドを使用します。

gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=on

INSTANCE_NAME は、リンクするサーバーに使用するインスタンスの名前に置き換えます。

詳細については、データベース フラグを構成するをご覧ください。

リンクサーバーを追加する

リンクサーバーを追加するには、Transact-SQL の sp_addlinkedserver コマンドを実行します。

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID'

次のように置き換えます。

  • LINKED_SERVER_NAME は、作成するリンクサーバーの名前に置き換えます。
  • TARGET_SERVER_ID は、リンクサーバーのネットワーク名、DNS 名、または IP アドレスに置き換えます。インスタンス名には、servername\instancename の形式を使用します。インスタンスが標準以外のポートを使用している場合は、ポート番号を追加します。例: servername\instancename, 8080

現在ログインしているユーザーのユーザー マッピングを追加するには、次のコマンドを実行します。

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'True'

LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。

デフォルトのリモート ログインとパスワードを作成または更新して、すべてのローカル ログインに適用するには、次のコマンドを実行します。

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'False',
    @locallogin=N'LOGIN',
    @rmtuser=N'USER_ID',
    @rmtpassword='PASSWORD';

次のように置き換えます。

  • LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。
  • LOGIN は、ローカル サーバーのログインに置き換えます。locallogin は sysname で、デフォルトは NULL です。NULL は、このエントリが rmtsrvname に接続するすべてのローカル ログインに適用されることを指定します。NULL 以外の場合、locallogin は SQL Server ログインまたは Windows ログインです。Windows ログインを使用する場合は、SQL Server に直接アクセスするか、アクセス権を持つ Windows グループのメンバーシップを通じてアクセスする必要があります。
  • USER_ID は、ログインするユーザーに置き換えます。
  • PASSWORD は、ユーザー パスワードに置き換えます。

暗号化された接続でリンクサーバーを追加する

暗号化された接続を使用してリンクサーバーを追加するには、Transact-SQL の sp_addlinkedserver コマンドを実行します。

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;'

次のように置き換えます。

  • LINKED_SERVER_NAME は、作成するリンクサーバーの名前に置き換えます。
  • TARGET_SERVER_ID は、ターゲット サーバーの名前、またはターゲット サーバーの IP アドレスとポート番号に置き換えます。

サーバーの名前が証明書の名前と異なる場合は、SQL Server がサーバー証明書を信頼できることを示す必要があります。プロバイダ文字列を更新するには、次のコマンドを実行します。

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;TrustServerCertificate=yes;'

次のように置き換えます。

  • LINKED_SERVER_NAME は、作成するリンクサーバーの名前に置き換えます。
  • TARGET_SERVER_ID は、ターゲット サーバーの名前、またはターゲット サーバーの IP アドレスとポート番号に置き換えます。

リンクサーバーのクエリ

Cloud SQL では、次のコマンドに加えて、リンクサーバー(サーバー名、データベース名、スキーマ名、オブジェクト名)をクエリするために 4 つの部分の名前を使用できます。

  • OPENQUERY は、指定されたサーバーでクエリを実行します。
  • EXECUTE を使用すると、リンクサーバーに対して動的 SQL を実行できます。

詳細については、クエリのリモート実行オプションを比較するをご覧ください。

リンクサーバーでリモート プロシージャ コールを有効にする

リモート プロシージャ コール(RPC)を使用すると、リンクサーバーでストアド プロシージャを実行できます。RPC を追加するには、RPC 引数を指定して Transact-SQL の sp_serveroption コマンドを実行します。RPC の引数は 2 つあります。

  • rpc は、指定したサーバーからの RPC を有効にします。
  • rpc out は、指定したサーバーへの RPC を有効にします。

LINKED_SERVER_NAME から RPC を有効にするには、rpc 引数を指定して次の sp_serveroption コマンドを使用します。

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc',
    @optvalue='TRUE'

LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。

rpc out 引数を指定して次の sp_serveroption コマンドを使用して、RPC を有効にします。

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc out',
    @optvalue='TRUE'

LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。

リンクサーバーのユーザー マッピングを削除する

以前に追加したユーザー マッピングを削除するには、次のコマンドを実行します。

EXEC master.dbo.sp_droplinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @locallogin=N'LOGIN';

次のように置き換えます。

  • LINKED_SERVER_NAME は、ドロップするリンクサーバーの名前に置き換えます。
  • LOGIN は、ローカル サーバーのログインに置き換えます。locallogin は sysname で、デフォルトは NULL です。NULL は、このエントリが rmtsrvname に接続するすべてのローカル ログインに適用されることを指定します。NULL 以外の場合、locallogin は SQL Server ログインまたは Windows ログインです。Windows ログインを使用する場合は、SQL Server に直接アクセスするか、アクセス権を持つ Windows グループのメンバーシップを通じてアクセスする必要があります。

登録済みのインスタンスをリンクサーバーから削除する

リンクサーバーを削除するには、次のようにします。

  • Transact-SQL の sp_dropserver ストアド プロシージャを使用して、既存のリンクサーバーを削除します。
  • 登録済みのインスタンスを削除するには、cloudsql enable linked servers フラグを削除します。

    gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=off

    INSTANCE_NAME は、リンクサーバーを削除するインスタンスの名前に置き換えます。

    または、次のコマンドを実行して、すべてのデータベース フラグをクリアすることもできます。

    gcloud sql instances patch INSTANCE_NAME --clear-database-flags

    INSTANCE_NAME は、リンクサーバーを削除するインスタンスの名前に置き換えます。

トラブルシューティング

エラー メッセージ トラブルシューティング
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
DataAccess オプションが無効になっている。次のコマンドを実行して、データアクセスを有効にします。
EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

LINKED_SERVER_NAME は、リンクされたサーバーの名前に置き換えます。

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) 暗号化された接続を確立する際にこの問題が発生した場合は、リンクされたサーバーにアクセスするときに別の方法でユーザー ID を指定する必要があります。これを行うには、次のコマンドを実行します。
EXEC master.dbo.sp_addlinkedserver
   @server = N'LINKED_SERVER_NAME',
   @srvproduct= N'',
   @provider= N'SQLNCLI',
   @datasrc= N'TARGET_SERVER_ID',
   @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID'

次のように置き換えます。

  • LINKED_SERVER_NAME は、リンクサーバーの名前に置き換えます。
  • TARGET_SERVER_ID は、ターゲット サーバーの名前、またはターゲット サーバーの IP アドレスとポート番号に置き換えます。
  • USER_ID は、ログインするユーザーに置き換えます。

次のステップ