Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Rimuovere un server collegato in SQL Server utilizzando T-SQL

Questo articolo fornisce un esempio di utilizzo di Transact-SQL per rimuovere un server collegato in SQL Server.

Per rimuovere un server collegato, usa sp_dropserver procedura memorizzata di sistema. Ciò rimuove un server dall'elenco di server remoti e collegati noti nell'istanza locale di SQL Server. Questa procedura memorizzata accetta due argomenti:il nome del server e un argomento facoltativo per la rimozione di eventuali accessi associati al server.

Esempio 1:eliminare un server collegato e i relativi accessi

Ecco un esempio di eliminazione di un server collegato e di tutti gli accessi associati per quel server collegato. In questo caso, il server collegato si chiama "Homer".

EXEC sp_dropserver 'Homer', 'droplogins';

Risultato:

Commands completed successfully.

Come con qualsiasi procedura memorizzata, puoi anche includere esplicitamente i nomi degli argomenti. Tuttavia, ciò non cambia il risultato:il server collegato viene eliminato insieme ai relativi accessi associati.

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = 'droplogins';

Risultato:

Commands completed successfully.

Esempio 2 – Elimina un server collegato senza eliminare i suoi accessi

Come accennato, i droplogins argomenti è facoltativo. Puoi anche eliminare un server collegato come questo:

EXEC sp_dropserver 'Homer';

Tuttavia, se sono presenti accessi associati al server collegato, riceverai il seguente errore:

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

Ciò significa che dovrai aggiungere i droplogins argomento.

Riceverai anche un errore se il server collegato è configurato come editore di replica.

Anche in questo caso, puoi includere esplicitamente i nomi degli argomenti se preferisci:

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Risultato:

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

Non riceverai un errore se non ci sono accessi associati al server collegato. Ad esempio, se crei un server collegato senza utilizzare sp_addlinkedsrvlogin per aggiungere un login, potrai abbandonare il server senza utilizzare i droplogins discussione. Questo è vero anche se è stata creata una mappatura tra il tuo login locale e uno sul server remoto.

Quindi, se il server remoto ha un login chiamato Marge, e lo eseguo sotto il login Marge su local server:

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.3,1433';

Viene creata una mappatura tra Marge sul server locale e Marge sul server collegato. Ciò è possibile perché entrambi gli accessi condividono le stesse credenziali. In questo caso, non è necessario eseguire sp_addlinkedsrvlogin per aggiungere Marge come login per il server collegato.

Tuttavia, se non esiste un accesso corrispondente per Marge sul server collegato (o se esiste, ma le credenziali non corrispondono), la mappatura non avverrà e Marge non sarà in grado di accedere al server collegato.

In ogni caso, l'esecuzione del codice seguente avrà esito positivo:

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Risultato:

Commands completed successfully.

Questo viene completato correttamente per Marge, anche quando c'è una mappatura tra il suo accesso locale e il server collegato (ma nessun altro accesso per il server collegato).