Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Usuń połączony serwer w SQL Server za pomocą T-SQL

Ten artykuł zawiera przykład użycia Transact-SQL do usunięcia połączonego serwera w SQL Server.

Aby usunąć połączony serwer, użyj sp_dropserver systemowa procedura składowana. Spowoduje to usunięcie serwera z listy znanych serwerów zdalnych i połączonych w lokalnym wystąpieniu programu SQL Server. Ta procedura składowana akceptuje dwa argumenty:nazwę serwera i opcjonalny argument do usuwania wszelkich loginów skojarzonych z serwerem.

Przykład 1 – Usuń połączony serwer i jego loginy

Oto przykład porzucenia połączonego serwera i wszystkich powiązanych loginów dla tego połączonego serwera. W tym przypadku połączony serwer nazywa się „Homer”.

EXEC sp_dropserver 'Homer', 'droplogins';

Wynik:

Commands completed successfully.

Podobnie jak w przypadku każdej procedury składowanej, można również jawnie dołączyć nazwy argumentów. Nie zmienia to jednak wyniku – połączony serwer jest odrzucany wraz z powiązanymi loginami.

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

Wynik:

Commands completed successfully.

Przykład 2 – Usuń połączony serwer bez utraty jego loginów

Jak wspomniano, droplogins argumenty są opcjonalne. Możesz także usunąć połączony serwer w ten sposób:

EXEC sp_dropserver 'Homer';

Jeśli jednak są jakieś loginy powiązane z połączonym serwerem, pojawi się następujący błąd:

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

Co oznacza, że ​​będziesz musiał dodać droplogins argument.

Otrzymasz również błąd, jeśli połączony serwer jest skonfigurowany jako wydawca replikacji.

Ponownie, jeśli wolisz, możesz wyraźnie podać nazwy argumentów:

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

Wynik:

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

Nie otrzymasz błędu, jeśli nie ma loginów powiązanych z połączonym serwerem. Na przykład, jeśli utworzysz połączony serwer bez użycia sp_addlinkedsrvlogin aby dodać login, będziesz mógł usunąć serwer bez użycia droplogins argument. Dzieje się tak, nawet jeśli mapowanie zostało utworzone między Twoim loginem lokalnym a loginem na serwerze zdalnym.

Więc jeśli zdalny serwer ma login o nazwie Marge i uruchamiam go pod loginem Marge na lokalnym serwer:

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

Tworzone jest mapowanie między Marge na serwerze lokalnym a Marge na serwerze połączonym. Jest to możliwe, ponieważ oba loginy mają te same poświadczenia. W takim przypadku nie ma potrzeby uruchamiania sp_addlinkedsrvlogin aby dodać Marge jako login do połączonego serwera.

Jeśli jednak nie ma odpowiedniego loginu dla Marge na połączonym serwerze (lub jeśli jest, ale poświadczenia nie są zgodne), mapowanie nie nastąpi, a Marge nie będzie mieć dostępu do połączonego serwera.

Tak czy inaczej, uruchomienie następującego kodu zakończy się sukcesem:

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

Wynik:

Commands completed successfully.

To kończy się pomyślnie dla Marge, nawet jeśli istnieje mapowanie między jej lokalnym loginem a połączonym serwerem (ale nie ma innych loginów dla połączonego serwera).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Framework 6 — zapytania dotyczące czasu

  2. Wyszukiwanie rozmyte w programie SQL Server z wartością procentową dopasowania

  3. Monitorowanie bazy danych SQL Server TempDB przy użyciu widoków zarządzania dynamicznego (DMV)

  4. Użyj OBJECTPROPERTY(), aby dowiedzieć się, czy tabela jest tabelą systemową w SQL Server

  5. Grupy dostępności programu SQL Server AlwaysOn:instalacja i konfiguracja, część 2