sql >> Database teknologi >  >> RDS >> Sqlserver

Opret en sammenkædet server i SQL Server (T-SQL-eksempel)

Denne artikel giver et eksempel på oprettelse af en linket server i SQL Server ved hjælp af Transact-SQL. Brug af T-SQL giver dig mulighed for at oprette den sammenkædede server uden at være afhængig af en grafisk brugergrænseflade (såsom SSMS).

Syntaks

For at oprette en sammenkædet server ved hjælp af T-SQL skal du bruge sp_addlinkedserver systemlagret procedure.

Den officielle syntaks lyder sådan her:

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]   
     [ , [ @provider= ] 'provider_name' ]  
     [ , [ @datasrc= ] 'data_source' ]   
     [ , [ @location= ] 'location' ]   
     [ , [ @provstr= ] 'provider_string' ]   
     [ , [ @catalog= ] 'catalog' ]

De fleste af argumenterne er valgfrie, men du skal angive det linkede servernavn.

Du vil sandsynligvis også angive datakilden eller placeringen af ​​den linkede server og måske et udbydernavn. catalog argument giver dig mulighed for at angive en standarddatabase, som den sammenkædede server er knyttet til. Se den officielle Microsoft-dokumentation for at få en forklaring på hvert af disse argumenter.

Eksempel – Opret den sammenkædede server

For at oprette en sammenkædet server ved hjælp af T-SQL skal du udføre sp_addlinkedserver gemt procedure, mens den videregiver navnet på den linkede server såvel som dens kilde.

Her er et eksempel på oprettelse af en linket server:

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.2,1433',
    @catalog='Music';

I dette tilfælde er det linkede servernavn "Homer", og jeg angiver serverens IP-adresse efterfulgt af TCP-porten (i mit tilfælde er det faktisk en Docker-beholder på den samme maskine). Skift servernavn og IP-adresse/port efter behov. Jeg angiver også en standarddatabase kaldet "Musik".

Dette eksempel bruger MSOLEDBSQL som udbydernavn, men du kan bruge det udbydernavn, der er relevant i din situation. I mit tilfælde linker jeg til en anden forekomst af SQL Server.

Bemærk, at MSOLEDBSQL er den anbefalede udbyder til SQL Server. Hvis du tidligere har brugt SQLOLEDB eller SQLNCLI , begge disse er nu forældede. Microsoft besluttede at afvise OLE DB og frigive den i 2018.

Hvis du skulle linke til Oracle, kan du bruge OraOLEDB.Oracle , til MS Access kan du bruge Microsoft.Jet.OLEDB.4.0 (for adgang til 2002-2003-formaterne) eller Microsoft.ACE.OLEDB.12.0 (for 2007-formatet). Den officielle dokumentation har en tabel over parametre til brug for forskellige scenarier.

Test den sammenkædede server

Når du har tilføjet den linkede server, kan du bruge sp_testlinkedserver for at teste det:

EXEC sp_testlinkedserver Homer;

Resultat (hvis vellykket):

Commands completed successfully.

Hvis du får fejlen "Login mislykkedes", er chancerne for, at du ikke har et tilsvarende login på fjernserveren. Du skal have et tilsvarende login med de samme legitimationsoplysninger som på den lokale server.

Måden det fungerer på er, at når du først tilføjer den sammenkædede server, oprettes der automatisk en standardmapping mellem alle logins på den lokale server og fjernlogin på den sammenkædede server. SQL Server bruger legitimationsoplysningerne for det lokale login, når der oprettes forbindelse til den sammenkædede server på vegne af login. Hvis dit lokale login ikke har et tilsvarende login på fjernserveren, får du fejlen "Login mislykkedes".

Tilføj et login til den sammenkædede server

Hvis du ikke ønsker, at den linkede server skal bruge dit eget login, kan du angive et andet login, som den skal bruge. Så længe fjernserveren har et tilsvarende login med de samme legitimationsoplysninger, er du god til at gå. Det er klart, at du skal sikre dig, at fjernkontoen har de relevante tilladelser til at gøre det, du skal have den til at gøre.

Her er et eksempel på tilføjelse af et SQL Server-login til den linkede server.

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Marge', 
    @rmtpassword=N'BigStrong#Passw0rd';

Kør dette på den lokale server, efter du har oprettet den sammenkædede server. Du skal bruge et tilsvarende login med de samme legitimationsoplysninger på den faktiske (fjern)forbundne server.

Dette tilføjer et login kaldet "Marge" for den sammenkædede server kaldet "Homer". Så længe fjernserveren har et login med de samme legitimationsoplysninger, vil den lokale server være i stand til at logge på den sammenkædede server.

Se Tilføj et linket serverlogin i SQL Server for et eksempel på tilføjelse af et tilsvarende login på fjernserveren.

Slip en linket server

Her er et eksempel på at droppe den linkede server kaldet "Homer" og alle tilknyttede logins.

EXEC sp_dropserver 'Homer', 'droplogins';

droplogins argument er valgfrit, men hvis du ikke angiver dette, når du dropper en sammenkædet server, der har tilknyttede eksterne og sammenkædede serverloginposter, eller er konfigureret som en replikeringsudgiver, returneres en fejlmeddelelse.

Se Fjern en sammenkædet server ved hjælp af T-SQL for flere eksempler på at droppe en forbundet server.

Kør en distribueret forespørgsel mod den sammenkædede server

Nu hvor vi har oprettet den linkede server, er her et eksempel på at køre en distribueret forespørgsel mod den:

SELECT * 
FROM Homer.Music.dbo.Artists;

Den eneste forskel mellem dette og en lokal forespørgsel er, at du skal tilføje det linkede servernavn til FROM klausul.

Sådan:

LinkedServer.Database.Schema.Table

Alternativt kan du bruge OPENQUERY() for at køre en pass-through-forespørgsel:

SELECT * 
FROM OPENQUERY(
    Homer, 
    'SELECT * FROM Music.dbo.Artists;'
    );

  1. Ingen dialektkortlægning for JDBC-type:2003

  2. Diagnosticering af dødvande i SQL Server 2005

  3. Taling About SQL Server Performance Flaskehalse

  4. TO_DSINTERVAL() Funktion i Oracle