Denne artikel giver et eksempel på brug af Transact-SQL til at fjerne en linket server i SQL Server.
For at fjerne en linket server skal du bruge sp_dropserver
system lagret procedure. Dette fjerner en server fra listen over kendte eksterne og sammenkædede servere på den lokale forekomst af SQL Server. Denne lagrede procedure accepterer to argumenter:servernavnet og et valgfrit argument til at fjerne eventuelle logins, der er knyttet til serveren.
Eksempel 1 – Slip en linket server og dens logins
Her er et eksempel på at droppe en linket server og alle tilknyttede logins til den linkede server. I dette tilfælde kaldes den sammenkædede server "Homer".
EXEC sp_dropserver 'Homer', 'droplogins';
Resultat:
Commands completed successfully.
Som med enhver lagret procedure kan du også eksplicit inkludere argumentnavnene. Dette ændrer dog ikke resultatet - den linkede server droppes sammen med dens tilknyttede logins.
EXEC sp_dropserver @server = 'Homer', @droplogins = 'droplogins';
Resultat:
Commands completed successfully.
Eksempel 2 – Drop en linket server uden at droppe dens logins
Som nævnt er droplogins
argumenter er valgfrie. Du kan også droppe en linket server som denne:
EXEC sp_dropserver 'Homer';
Men hvis der er nogen logins knyttet til den linkede server, får du følgende fejlmeddelelse:
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56 There are still remote logins or linked logins for the server 'Homer'.
Hvilket betyder, at du bliver nødt til at tilføje droplogins
argument.
Du får også en fejlmeddelelse, hvis den sammenkædede server er konfigureret som en replikeringsudgiver.
Igen, du kan eksplicit inkludere navnene på argumenterne, hvis du foretrækker:
EXEC sp_dropserver @server = 'Homer', @droplogins = NULL;
Resultat:
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56 There are still remote logins or linked logins for the server 'Homer'.
Du får ikke en fejlmeddelelse, hvis der ikke er nogen logins tilknyttet den tilknyttede server. For eksempel, hvis du opretter en linket server uden at bruge sp_addlinkedsrvlogin
for at tilføje et login, vil du være i stand til at droppe serveren uden at bruge droplogins
argument. Dette gælder, selvom der blev oprettet en mapping mellem dit lokale login og et på fjernserveren.
Så hvis fjernserveren har et login kaldet Marge, og jeg kører dette under Marge login på lokal server:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.3,1433';
Der oprettes en mapping mellem Marge på den lokale server og Marge på den linkede server. Dette er muligt, fordi begge logins deler de samme legitimationsoplysninger. I dette tilfælde er det ikke nødvendigt at køre sp_addlinkedsrvlogin
for at tilføje Marge som et login til den linkede server.
Men hvis der ikke er noget tilsvarende login for Marge på den linkede server (eller hvis der er det, men legitimationsoplysningerne stemmer ikke overens), vil kortlægningen ikke ske, og Marge vil ikke være i stand til at få adgang til den linkede server.
Uanset hvad, vil det lykkes at køre følgende kode:
EXEC sp_dropserver @server = 'Homer', @droplogins = NULL;
Resultat:
Commands completed successfully.
Dette fuldføres med succes for Marge, selv når der er en kortlægning mellem hendes lokale login og den linkede server (men ingen andre logins til den linkede server).