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).