Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Utwórz serwer połączony w programie SQL Server (przykład T-SQL)

W tym artykule przedstawiono przykład tworzenia serwera połączonego w programie SQL Server przy użyciu języka Transact-SQL. Korzystanie z T-SQL umożliwia tworzenie połączonego serwera bez polegania na graficznym interfejsie użytkownika (takim jak SSMS).

Składnia

Aby utworzyć połączony serwer przy użyciu T-SQL, użyj sp_addlinkedserver systemowa procedura składowana.

Oficjalna składnia wygląda następująco:

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

Większość argumentów jest opcjonalna, ale będziesz musiał podać nazwę serwera połączonego.

Prawdopodobnie będziesz także chciał określić źródło danych lub lokalizację połączonego serwera, a być może nazwę dostawcy. catalog argument pozwala określić domyślną bazę danych, do której mapowany jest serwer linkowany. Sprawdź oficjalną dokumentację firmy Microsoft, aby uzyskać wyjaśnienie każdego z tych argumentów.

Przykład – Utwórz połączony serwer

Aby utworzyć połączony serwer przy użyciu T-SQL, wykonaj sp_addlinkedserver procedura składowana podczas przekazywania nazwy połączonego serwera oraz jego źródła.

Oto przykład tworzenia połączonego serwera:

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

W tym przypadku nazwa serwera połączonego to „Homer” i określam adres IP serwera, a następnie port TCP (w moim przypadku jest to w rzeczywistości kontener Dockera na tej samej maszynie). Zmień nazwę serwera i adres IP/port zgodnie z wymaganiami. Określam również domyślną bazę danych o nazwie „Muzyka”.

W tym przykładzie użyto MSOLEDBSQL jako nazwę dostawcy, ale możesz użyć dowolnej nazwy dostawcy, która ma zastosowanie w Twojej sytuacji. W moim przypadku łączę się z inną instancją SQL Server.

Zauważ, że MSOLEDBSQL jest zalecanym dostawcą programu SQL Server. Jeśli wcześniej używałeś SQLOLEDB lub SQLNCLI , oba są teraz przestarzałe. Microsoft zdecydował się wycofać OLE DB i wydać go w 2018 roku.

Jeśli miałbyś połączyć się z Oracle, możesz użyć OraOLEDB.Oracle , dla MS Access możesz użyć Microsoft.Jet.OLEDB.4.0 (dla formatów Access 2002-2003) lub Microsoft.ACE.OLEDB.12.0 (dla formatu 2007). Oficjalna dokumentacja zawiera tabelę parametrów do wykorzystania w różnych scenariuszach.

Przetestuj połączony serwer

Po dodaniu połączonego serwera możesz użyć sp_testlinkedserver aby to przetestować:

EXEC sp_testlinkedserver Homer;

Wynik (jeśli się powiedzie):

Commands completed successfully.

Jeśli pojawi się błąd „Logowanie nie powiodło się”, prawdopodobnie nie masz odpowiedniego loginu na zdalnym serwerze. Musisz mieć odpowiedni login z tymi samymi danymi uwierzytelniającymi, co na serwerze lokalnym.

Działa to tak, że kiedy po raz pierwszy dodajesz serwer linked, automatycznie tworzone jest domyślne mapowanie między wszystkimi loginami na serwerze lokalnym a loginami zdalnymi na serwerze linked. SQL Server używa poświadczeń logowania lokalnego podczas łączenia się z serwerem połączonym w imieniu logowania. Jeśli lokalny login nie ma odpowiedniego loginu na zdalnym serwerze, pojawi się błąd „Logowanie nie powiodło się”.

Dodaj login do połączonego serwera

Jeśli nie chcesz, aby serwer linkowany używał twojego własnego loginu, możesz określić inny login, aby go używać. Tak długo, jak zdalny serwer ma odpowiedni login z tymi samymi danymi uwierzytelniającymi, będziesz gotowy. Oczywiście musisz upewnić się, że konto zdalne ma odpowiednie uprawnienia, aby robić to, czego potrzebujesz.

Oto przykład dodawania loginu SQL Server dla połączonego serwera.

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

Uruchom to na serwerze lokalnym po utworzeniu połączonego serwera. Będziesz potrzebować odpowiedniego loginu z tymi samymi danymi uwierzytelniającymi na rzeczywistym (zdalnym) serwerze połączonym.

To dodaje login o nazwie „Marge” dla połączonego serwera o nazwie „Homer”. Dopóki zdalny serwer ma login z tymi samymi poświadczeniami, lokalny serwer będzie mógł zalogować się do połączonego serwera.

Zobacz Dodawanie logowania do serwera połączonego w programie SQL Server, aby zapoznać się z przykładem dodawania odpowiedniego loginu na serwerze zdalnym.

Upuść połączony serwer

Oto przykład usunięcia połączonego serwera o nazwie „Homer” i wszystkich powiązanych loginów.

EXEC sp_dropserver 'Homer', 'droplogins';

droplogins argument jest opcjonalny, ale jeśli nie określisz tego podczas upuszczania serwera połączonego, który ma skojarzone wpisy logowania serwera zdalnego i serwera połączonego lub jest skonfigurowany jako wydawca replikacji, zostanie zwrócony komunikat o błędzie.

Zobacz Usuwanie połączonego serwera przy użyciu T-SQL, aby uzyskać więcej przykładów porzucania połączonego serwera.

Uruchom zapytanie rozproszone na serwerze połączonym

Teraz, gdy stworzyliśmy połączony serwer, oto przykład uruchomienia w stosunku do niego rozproszonego zapytania:

SELECT * 
FROM Homer.Music.dbo.Artists;

Jedyną różnicą między tym zapytaniem a lokalnym jest to, że musisz dodać nazwę serwera połączonego do FROM klauzula.

Tak:

LinkedServer.Database.Schema.Table

Alternatywnie możesz użyć OPENQUERY() aby uruchomić zapytanie przekazujące:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować SQL Server na komputerze Mac z VirtualBox?

  2. Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych datetime. (podczas wyświetlania daty i godziny..)

  3. Wysyłaj wiadomości e-mail z załącznikami w SQL Server (T-SQL)

  4. SQL Server 2008 — Jak zwrócić typ tabeli zdefiniowanej przez użytkownika z funkcji o wartościach przechowywanych w tabeli?

  5. Instalacja i konfiguracja przesyłania dzienników serwera SQL i odzyskiwania po awarii -3