Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Entfernen Sie einen Verbindungsserver in SQL Server mit T-SQL

Dieser Artikel enthält ein Beispiel für die Verwendung von Transact-SQL zum Entfernen eines Verbindungsservers in SQL Server.

Um einen Verbindungsserver zu entfernen, verwenden Sie sp_dropserver System gespeicherte Prozedur. Dadurch wird ein Server aus der Liste bekannter Remote- und Verbindungsserver auf der lokalen Instanz von SQL Server entfernt. Diese gespeicherte Prozedur akzeptiert zwei Argumente:den Servernamen und ein optionales Argument zum Entfernen aller dem Server zugeordneten Anmeldungen.

Beispiel 1 – Löschen eines verknüpften Servers und seiner Anmeldungen

Hier ist ein Beispiel für das Löschen eines verknüpften Servers und aller zugehörigen Anmeldungen für diesen verknüpften Server. In diesem Fall heißt der verlinkte Server „Homer“.

EXEC sp_dropserver 'Homer', 'droplogins';

Ergebnis:

Commands completed successfully.

Wie bei jeder gespeicherten Prozedur können Sie die Argumentnamen auch explizit einschließen. Dies ändert jedoch nichts am Ergebnis – der verknüpfte Server wird zusammen mit den zugehörigen Anmeldungen gelöscht.

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

Ergebnis:

Commands completed successfully.

Beispiel 2 – Einen verknüpften Server löschen, ohne seine Anmeldungen zu löschen

Wie bereits erwähnt, die droplogins Argumente ist optional. Sie können einen Verbindungsserver auch wie folgt löschen:

EXEC sp_dropserver 'Homer';

Wenn jedoch Logins mit dem verknüpften Server verknüpft sind, erhalten Sie die folgende Fehlermeldung:

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

Das bedeutet, dass Sie die droplogins hinzufügen müssen Argument.

Sie erhalten auch eine Fehlermeldung, wenn der Verbindungsserver als Replikationsherausgeber konfiguriert ist.

Auch hier können Sie die Namen der Argumente explizit angeben, wenn Sie dies bevorzugen:

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

Ergebnis:

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

Sie erhalten keine Fehlermeldung, wenn dem verknüpften Server keine Anmeldungen zugeordnet sind. Wenn Sie beispielsweise einen Verbindungsserver erstellen, ohne sp_addlinkedsrvlogin zu verwenden Um ein Login hinzuzufügen, können Sie den Server löschen, ohne die droplogins zu verwenden Streit. Dies gilt auch dann, wenn eine Zuordnung zwischen Ihrem lokalen Login und einem auf dem Remote-Server erstellt wurde.

Wenn also der Remote-Server ein Login namens Marge hat und ich dieses unter dem Marge-Login auf local ausführe Server:

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

Zwischen Marge auf dem lokalen Server und Marge auf dem Verbindungsserver wird eine Zuordnung erstellt. Dies ist möglich, da beide Anmeldungen dieselben Anmeldeinformationen verwenden. In diesem Fall muss sp_addlinkedsrvlogin nicht ausgeführt werden um Marge als Login für den Verbindungsserver hinzuzufügen.

Wenn es jedoch keine entsprechende Anmeldung für Marge auf dem verknüpften Server gibt (oder wenn dies der Fall ist, aber die Anmeldeinformationen nicht übereinstimmen), erfolgt die Zuordnung nicht und Marge kann nicht auf den verknüpften Server zugreifen.

In beiden Fällen ist die Ausführung des folgenden Codes erfolgreich:

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

Ergebnis:

Commands completed successfully.

Dies wird für Marge erfolgreich abgeschlossen, auch wenn es eine Zuordnung zwischen ihrem lokalen Login und dem Verbindungsserver gibt (aber keine anderen Logins für den Verbindungsserver).