Administrar servidores vinculados

En esta página, se proporciona información sobre cómo administrar servidores vinculados en tu instancia de Cloud SQL, incluido el registro de una instancia, la adición de un servidor vinculado y la consulta de un servidor vinculado.

Inscribe tu instancia para permitir servidores vinculados

Para agregar la marca cloudsql enable linked servers a tu instancia, usa el siguiente comando:

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

Reemplaza INSTANCE_NAME por el nombre de la instancia que deseas usar para vincular los servidores.

Para obtener más información, consulta Configura marcas de base de datos.

Agrega un servidor vinculado

Para agregar un servidor vinculado, ejecuta el comando sp_addlinkedserver de Transact-SQL:

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

Reemplaza lo siguiente:

  • LINKED_SERVER_NAME por el nombre del servidor vinculado que se creará.
  • TARGET_SERVER_ID por el nombre de la red, el nombre de DNS o la dirección IP del servidor vinculado. Para el nombre de la instancia, usa el formato servername\instancename. Si tu instancia usa un puerto no estándar, agrega el número de puerto. Por ejemplo, servername\instancename, 8080

Para agregar la asignación de usuario a un usuario que accedió, ejecuta el siguiente comando:

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

Reemplaza LINKED_SERVER_NAME por el nombre del servidor vinculado.

Para crear o actualizar el acceso remoto y la contraseña predeterminados, y aplicarlos a todos los accesos locales, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • LINKED_SERVER_NAME por el nombre del servidor vinculado
  • LOGIN por el acceso del servidor local. locallogin es sysname, con un valor predeterminado de NULL. NULL especifica que esta entrada se aplica a todos los accesos locales que se conectan a rmtsrvname. Si no es NULL, locallogin es un acceso de SQL Server o un acceso a Windows. Si usas un acceso a Windows, debe tener acceso a SQL Server directamente o a través de su membresía en un grupo de Windows que tenga acceso.
  • USER_ID por el acceso del usuario.
  • PASSWORD por la contraseña del usuario.

Agrega un servidor vinculado con una conexión encriptada

Para agregar un servidor vinculado mediante una conexión encriptada, ejecuta el comando sp_addlinkedserver de Transact-SQL:

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

Reemplaza lo siguiente:

  • LINKED_SERVER_NAME por el nombre del servidor vinculado que se creará.
  • TARGET_SERVER_ID por el nombre del servidor de destino o la dirección IP y el número de puerto para el servidor de destino.

Si el nombre del servidor es diferente del nombre del certificado, debes indicar que SQL Server puede confiar en el certificado del servidor. Para actualizar la string del proveedor, ejecuta el siguiente comando:

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;'

Reemplaza lo siguiente:

  • LINKED_SERVER_NAME por el nombre del servidor vinculado que se creará.
  • TARGET_SERVER_ID por el nombre del servidor de destino o la dirección IP y el número de puerto para el servidor de destino.

Consultas del servidor vinculado

Cloud SQL admite el uso de nombres de cuatro partes para consultar servidores vinculados (nombre del servidor, nombre de la base de datos, nombre del esquema y nombre del objeto), además de los siguientes comandos:

  • OPENQUERY ejecuta una consulta en un servidor especificado.
  • EXECUTE te permite ejecutar SQL dinámico en un servidor vinculado.

Para obtener más información, consulta Compara opciones de ejecución remota.

Habilita las llamadas de procedimiento remoto en un servidor vinculado

Las llamadas de procedimiento remoto (RPC) te permiten ejecutar procedimientos almacenados en servidores vinculados. Para agregar RPC, debes ejecutar el comando sp_serveroption de Transact-SQL con un argumento de RPC. Existen dos argumentos de RPC:

  • rpc habilita la RPC desde el servidor especificado.
  • rpc out habilita RPC en el servidor especificado.

Usa el siguiente comando de sp_serveroption con el argumento rpc para habilitar RPC de LINKED_SERVER_NAME:

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

Reemplaza LINKED_SERVER_NAME por el nombre del servidor vinculado.

Usa el siguiente comando de sp_serveroption con el argumento rpc out para habilitar RPC:

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

Reemplaza LINKED_SERVER_NAME por el nombre del servidor vinculado.

Quita la asignación de usuarios de un servidor vinculado

Para quitar una asignación de usuario que agregaste antes, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • LINKED_SERVER_NAME por el nombre del servidor vinculado que se descartará.
  • LOGIN por el acceso del servidor local. locallogin es sysname, con un valor predeterminado de NULL. NULL especifica que esta entrada se aplica a todos los accesos locales que se conectan a rmtsrvname. Si no es NULL, locallogin es un acceso de SQL Server o un acceso a Windows. Si usas un acceso a Windows, debe tener acceso a SQL Server directamente o a través de su membresía en un grupo de Windows que tenga acceso.

Cómo quitar una instancia inscrita para permitir servidores vinculados

Para quitar servidores vinculados, haz lo siguiente:

  • Descarta los servidores vinculados existentes con el procedimiento almacenado sp_dropserver de Transact-SQL.
  • Quita la marca cloudsql enable linked servers para quitar una instancia inscrita.

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

    Reemplaza INSTANCE_NAME por el nombre de la instancia en la que deseas quitar los servidores vinculados.

    Como alternativa, puedes ejecutar el siguiente comando para borrar todas las marcas de base de datos:

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

    Reemplaza INSTANCE_NAME por el nombre de la instancia en la que deseas quitar los servidores vinculados.

Solucionar problemas

Mensaje de error Soluciona problemas
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
La opción DataAccess está inhabilitada. Ejecuta el siguiente comando para habilitar el acceso a los datos:
EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

Reemplaza LINKED_SERVER_NAME por el nombre del servidor vinculado.

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) Si tienes este problema cuando estableces una conexión encriptada, debes probar otra forma de proporcionar el ID de usuario cuando accedes al servidor vinculado. Para hacer esto, ejecuta el siguiente comando:
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'

Reemplaza lo siguiente:

  • LINKED_SERVER_NAME por el nombre del servidor vinculado.
  • TARGET_SERVER_ID por el nombre del servidor de destino o la dirección IP y el número de puerto para el servidor de destino.
  • USER_ID por el acceso del usuario.

¿Qué sigue?