Faça a gestão de servidores associados

Esta página fornece informações sobre como gerir servidores associados na sua instância do Cloud SQL, incluindo a inscrição de uma instância, a adição de um servidor associado e a consulta de um servidor associado.

Inscreva a sua instância para permitir servidores associados

Para adicionar a flag cloudsql enable linked servers à sua instância, use o seguinte comando:

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

Substitua INSTANCE_NAME pelo nome da instância que quer usar para associar servidores.

Para mais informações, consulte o artigo configure as flags da base de dados.

Adicione um servidor associado

Para adicionar um servidor ligado, execute o comando Transact-SQL sp_addlinkedserver:

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

Substitua o seguinte:

  • LINKED_SERVER_NAME com o nome do servidor associado a criar.
  • TARGET_SERVER_ID com o nome da rede, o nome DNS ou o endereço IP para o servidor associado. Para o nome da instância, use o formato servername\instancename. Se a sua instância usar uma porta não padrão, adicione o número da porta. Por exemplo, servername\instancename, 8080.

Para adicionar o mapeamento de utilizadores para um utilizador com sessão iniciada, execute o seguinte comando:

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

Substitua LINKED_SERVER_NAME pelo nome do servidor associado.

Para criar ou atualizar o início de sessão e a palavra-passe remotos predefinidos e aplicá-los a todos os inícios de sessão locais, execute o seguinte comando:

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

Substitua o seguinte:

  • LINKED_SERVER_NAME com o nome do servidor associado.
  • LOGIN com o início de sessão do servidor local. locallogin é sysname, com uma predefinição de NULL. NULL especifica que esta entrada se aplica a todos os inícios de sessão locais que se ligam a rmtsrvname. Se não for NULL, locallogin é um início de sessão do SQL Server ou um início de sessão do Windows. Se usar um início de sessão do Windows, este tem de ter acesso ao SQL Server diretamente ou através da respetiva associação a um grupo do Windows que tenha acesso.
  • USER_ID com o utilizador a iniciar sessão.
  • PASSWORD com a palavra-passe do utilizador.

Adicione um servidor associado com uma ligação encriptada

Para adicionar um servidor associado através de uma ligação encriptada, execute o comando 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;'

Substitua o seguinte:

  • LINKED_SERVER_NAME com o nome do servidor associado a criar.
  • TARGET_SERVER_ID com o nome do servidor de destino ou o endereço IP e o número da porta do servidor de destino.

Se o nome do servidor for diferente do nome no certificado, tem de indicar que o SQL Server pode confiar no certificado do servidor. Para atualizar a string do fornecedor, execute o seguinte 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;'

Substitua o seguinte:

  • LINKED_SERVER_NAME com o nome do servidor associado a criar.
  • TARGET_SERVER_ID com o nome do servidor de destino ou o endereço IP e o número da porta do servidor de destino.

Consultas de servidor associadas

O Cloud SQL suporta a utilização de nomes de quatro partes para consultar servidores associados (nome do servidor, nome da base de dados, nome do esquema e nome do objeto), além dos seguintes comandos:

  • OPENQUERY executa uma consulta num servidor especificado.
  • EXECUTE permite-lhe executar SQL dinâmico num servidor associado.

Para mais informações, consulte o artigo Compare as opções de execução remota de consultas.

Ative chamadas de procedimentos remotos num servidor associado

As chamadas de procedimento remoto (RPC) permitem-lhe executar procedimentos armazenados em servidores associados. Para adicionar RPC, execute o comando Transact-SQL sp_serveroption com um argumento RPC. Existem dois argumentos RPC:

  • rpc ativa o RPC a partir do servidor especificado.
  • rpc out permite a RPC para o servidor especificado.

Use o seguinte comando sp_serveroption com o argumento rpc para ativar o RPC de LINKED_SERVER_NAME:

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

Substitua LINKED_SERVER_NAME pelo nome do servidor associado.

Use o seguinte comando sp_serveroption com o argumento rpc out para ativar o RPC:

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

Substitua LINKED_SERVER_NAME pelo nome do servidor associado.

Remova o mapeamento de utilizadores para um servidor associado

Para remover um mapeamento de utilizador que adicionou anteriormente, execute o seguinte comando:

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

Substitua o seguinte:

  • LINKED_SERVER_NAME com o nome do servidor associado a eliminar.
  • LOGIN com o início de sessão do servidor local. locallogin é sysname, com uma predefinição de NULL. NULL especifica que esta entrada se aplica a todos os inícios de sessão locais que se ligam a rmtsrvname. Se não for NULL, locallogin é um início de sessão do SQL Server ou um início de sessão do Windows. Se usar um início de sessão do Windows, este tem de ter acesso ao SQL Server diretamente ou através da respetiva associação a um grupo do Windows que tenha acesso.

Remova uma instância inscrita da permissão de servidores associados

Para remover servidores associados, faça o seguinte:

  • Elimine os servidores associados existentes com o procedimento armazenado sp_dropserver do Transact-SQL.
  • Remova a flag cloudsql enable linked servers para remover uma instância inscrita.

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

    Substitua INSTANCE_NAME pelo nome da instância onde quer remover os servidores associados.

    Em alternativa, pode executar o seguinte comando para limpar todas as flags da base de dados:

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

    Substitua INSTANCE_NAME pelo nome da instância onde quer remover os servidores associados.

Resolver problemas

Mensagem de erro Resolução de problemas
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
A opção DataAccess está desativada. Execute o seguinte comando para ativar o acesso aos dados:
EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

Substitua LINKED_SERVER_NAME pelo nome do servidor associado.

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) Se tiver este problema ao estabelecer uma ligação encriptada, tem de tentar outra forma de fornecer o ID do utilizador quando aceder ao servidor associado. Para o fazer, execute o seguinte 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'

Substitua o seguinte:

  • LINKED_SERVER_NAME com o nome do servidor associado.
  • TARGET_SERVER_ID com o nome do servidor de destino ou o endereço IP e o número da porta do servidor de destino.
  • USER_ID com o utilizador a iniciar sessão.

O que se segue?