Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Remover um servidor vinculado no SQL Server usando T-SQL


Este artigo fornece um exemplo de uso do Transact-SQL para remover um servidor vinculado no SQL Server.

Para remover um servidor vinculado, use o sp_dropserver procedimento armazenado do sistema. Isso remove um servidor da lista de servidores remotos e vinculados conhecidos na instância local do SQL Server. Esse procedimento armazenado aceita dois argumentos:o nome do servidor e um argumento opcional para remover quaisquer logons associados ao servidor.


Exemplo 1 – Descarte um servidor vinculado e seus logins


Aqui está um exemplo de como descartar um servidor vinculado e todos os logins associados a esse servidor vinculado. Nesse caso, o servidor vinculado é chamado de “Homer”.
EXEC sp_dropserver 'Homer', 'droplogins';

Resultado:
Commands completed successfully.

Como em qualquer procedimento armazenado, você também pode incluir explicitamente os nomes dos argumentos. No entanto, isso não altera o resultado – o servidor vinculado é descartado junto com seus logins associados.
EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = 'droplogins';

Resultado:
Commands completed successfully.

Exemplo 2 – Descarte um servidor vinculado sem descartar seus logins


Como mencionado, os droplogins argumentos é opcional. Você também pode descartar um servidor vinculado como este:
EXEC sp_dropserver 'Homer';

No entanto, se houver algum login associado ao servidor vinculado, você receberá o seguinte erro:
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56
There are still remote logins or linked logins for the server 'Homer'.

O que significa que você precisará adicionar os droplogins argumento.

Você também receberá um erro se o servidor vinculado estiver configurado como um editor de replicação.

Novamente, você pode incluir explicitamente os nomes dos argumentos, se preferir:
EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Resultado:
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56
There are still remote logins or linked logins for the server 'Homer'.

Você não receberá um erro se não houver logins associados ao servidor vinculado. Por exemplo, se você criar um servidor vinculado sem usar sp_addlinkedsrvlogin para adicionar um login, você poderá descartar o servidor sem usar os droplogins argumento. Isso é verdade mesmo se um mapeamento foi criado entre seu logon local e um no servidor remoto.

Portanto, se o servidor remoto tiver um login chamado Marge, e eu executar isso no login do Marge no local servidor:
EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.3,1433';

Um mapeamento é criado entre Marge no servidor local e Marge no servidor vinculado. Isso é possível porque ambos os logins compartilham as mesmas credenciais. Nesse caso, não há necessidade de executar sp_addlinkedsrvlogin para adicionar Marge como login para o servidor vinculado.

No entanto, se não houver login correspondente para Marge no servidor vinculado (ou se houver, mas as credenciais não corresponderem), o mapeamento não ocorrerá e Marge não poderá acessar o servidor vinculado.

De qualquer forma, a execução do seguinte código será bem-sucedida:
EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Resultado:
Commands completed successfully.

Isso é concluído com sucesso para Marge, mesmo quando há um mapeamento entre seu login local e o servidor vinculado (mas nenhum outro login para o servidor vinculado).