sql >> Database >  >> RDS >> Sqlserver

Een gekoppelde server in SQL Server verwijderen met T-SQL

Dit artikel geeft een voorbeeld van het gebruik van Transact-SQL om een ​​gekoppelde server in SQL Server te verwijderen.

Gebruik de sp_dropserver . om een ​​gekoppelde server te verwijderen systeem opgeslagen procedure. Hiermee wordt een server verwijderd uit de lijst met bekende externe en gekoppelde servers op het lokale exemplaar van SQL Server. Deze opgeslagen procedure accepteert twee argumenten:de servernaam en een optioneel argument voor het verwijderen van eventuele aanmeldingen die aan de server zijn gekoppeld.

Voorbeeld 1 – Verwijder een gekoppelde server en zijn aanmeldingen

Hier is een voorbeeld van het verwijderen van een gekoppelde server en alle bijbehorende aanmeldingen voor die gekoppelde server. In dit geval wordt de gekoppelde server "Homer" genoemd.

EXEC sp_dropserver 'Homer', 'droplogins';

Resultaat:

Commands completed successfully.

Zoals bij elke opgeslagen procedure, kunt u ook expliciet de argumentnamen opnemen. Dit verandert echter niets aan het resultaat - de gekoppelde server wordt verwijderd samen met de bijbehorende aanmeldingen.

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

Resultaat:

Commands completed successfully.

Voorbeeld 2 – Verwijder een gekoppelde server zonder de aanmeldingen te verwijderen

Zoals gezegd, de droplogins argumenten is optioneel. Je kunt een gekoppelde server ook als volgt neerzetten:

EXEC sp_dropserver 'Homer';

Als er echter logins zijn gekoppeld aan de gekoppelde server, krijgt u de volgende foutmelding:

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

Wat betekent dat je de droplogins . moet toevoegen argument.

U krijgt ook een foutmelding als de gekoppelde server is geconfigureerd als replicatie-uitgever.

Nogmaals, u kunt de namen van de argumenten expliciet opnemen als u dat wilt:

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

Resultaat:

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

U krijgt geen foutmelding als er geen logins zijn gekoppeld aan de gekoppelde server. Als u bijvoorbeeld een gekoppelde server maakt zonder sp_addlinkedsrvlogin om een ​​login toe te voegen, kun je de server laten vallen zonder de droplogins argument. Dit geldt zelfs als er een toewijzing is gemaakt tussen uw lokale login en die op de externe server.

Dus als de externe server een login heeft met de naam Marge, en ik voer dit uit onder de Marge login op de lokale server:

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

Er wordt een mapping gemaakt tussen Marge op de lokale server en Marge op de gekoppelde server. Dit is mogelijk omdat beide logins dezelfde inloggegevens delen. In dit geval is het niet nodig om sp_addlinkedsrvlogin uit te voeren om Marge toe te voegen als login voor de gekoppelde server.

Als er echter geen overeenkomstige login voor Marge is op de gekoppelde server (of als dat wel het geval is, maar de inloggegevens komen niet overeen), zal de toewijzing niet plaatsvinden en heeft Marge geen toegang tot de gekoppelde server.

Hoe dan ook, het uitvoeren van de volgende code zal succesvol zijn:

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

Resultaat:

Commands completed successfully.

Dit is succesvol voltooid voor Marge, zelfs als er een koppeling is tussen haar lokale login en de gekoppelde server (maar geen andere logins voor de gekoppelde server).


  1. Een opgeslagen functie aanroepen (die een array van een door de gebruiker gedefinieerd type retourneert) in oracle via een databaselink

  2. Automatisering gebruiken om releasetests op Galera Cluster te versnellen met ClusterControl

  3. PostgreSQL kan geen transacties beginnen/beëindigen in PL/pgSQL

  4. Sorteer op kolom ASC, maar eerst NULL-waarden?