Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Linked Server

Termin Definicja
Linked Server

Linked Server to zdefiniowane w SQL Server połączenie z innym źródłem danych, umożliwiające zapytania rozproszone.

Linked Server w architekturze SQL Server

Linked Server to obiekt konfiguracyjny silnika Microsoft SQL Server, który opisuje połączenie z zewnętrznym źródłem danych. Źródłem może być inna instancja SQL Server albo system dostępny przez zainstalowanego dostawcę OLE DB. Po utworzeniu takiej definicji zapytanie wykonywane w lokalnej instancji może odwoływać się do obiektów znajdujących się poza jej własną bazą danych. Nie jest to kopia tabel ani replikacja danych. Linked Server przechowuje informacje potrzebne do nawiązania połączenia, wyboru dostawcy oraz uwierzytelnienia użytkownika.

W SQL Server obiekt Linked Server jest widoczny między innymi w katalogu serwera oraz w SQL Server Management Studio, w gałęzi Server Objects. Nazwa logiczna nadana podczas konfiguracji służy później do adresowania zdalnego źródła. Typowa nazwa czteroczęściowa ma postać nazwa_serwera.nazwa_bazy.nazwa_schematu.nazwa_obiektu. Przykładowo odwołanie RaportySQL.Sprzedaz.dbo.Zamowienia wskazuje serwer połączony o nazwie RaportySQL, bazę Sprzedaz, schemat dbo i tabelę Zamowienia. Każda część identyfikatora ma znaczenie, dlatego błąd w nazwie serwera, bazy lub schematu może uniemożliwić wykonanie zapytania.

Mechanizmy wykonywania zapytań rozproszonych

Najbardziej bezpośrednim sposobem użycia Linked Server jest zapytanie rozproszone z nazwą czteroczęściową. Lokalny optymalizator SQL Server może próbować przekazać część operacji do zdalnego źródła, ale zakres takiej delegacji zależy od rodzaju dostawcy, jego możliwości oraz konstrukcji zapytania. Odczyt dużej tabeli z użyciem lokalnych filtrów nie zawsze oznacza, że filtr zostanie wykonany zdalnie. Jeżeli do lokalnej instancji zostanie przesłana znaczna ilość danych, zapytanie może zużyć dużo pamięci, procesora i przepustowości sieci.

Drugą metodą jest OPENQUERY, które wysyła podany tekst zapytania do zdalnego serwera jako zapytanie przekazywane. Przykład SELECT * FROM OPENQUERY(RaportySQL, 'SELECT id, status FROM Sprzedaz.dbo.Zamowienia WHERE status = ''NOWE''') pozwala umieścić warunek po stronie źródła zdalnego, o ile obsługuje ono użyte polecenie. W zapytaniu zapisanym jako literał tekstowy apostrof wewnętrzny trzeba podwoić. Do wykonywania poleceń na serwerze połączonym służy również EXECUTE (...) AT. Poszczególne techniki różnią się sposobem przekazywania zapytania, obsługą parametrów i tym, jak SQL Server optymalizuje dostęp do zewnętrznych danych.

Linked Server może być używany nie tylko do odczytu. Operacje INSERT, UPDATE i DELETE na zdalnych obiektach są możliwe wtedy, gdy pozwalają na to uprawnienia, dostawca oraz konfiguracja połączenia. Zmiana danych poza lokalną bazą wymaga szczególnej ostrożności, ponieważ awaria sieci, niezgodność typów danych lub odmienna obsługa transakcji może zmienić przebieg operacji. Sam fakt, że zdalna tabela jest widoczna w SSMS, nie oznacza jeszcze, że każda instrukcja modyfikująca będzie obsługiwana.

Dostawca OLE DB, logowanie i uprawnienia

Konfiguracja Linked Server obejmuje między innymi nazwę logiczną, typ dostawcy OLE DB, nazwę produktu, źródło danych oraz opcjonalny katalog domyślny. Współczesne wersje SQL Server korzystają z dostawców OLE DB instalowanych i konfigurowanych niezależnie od samego obiektu Linked Server. Dostawca musi być zgodny z architekturą procesu SQL Server oraz poprawnie zarejestrowany w systemie. Nieprawidłowa instalacja, brak wymaganej biblioteki klienta albo wyłączona opcja dostawcy może powodować błędy już podczas testu połączenia.

Ważnym elementem jest mapowanie lokalnych loginów na konta używane w zdalnym źródle. SQL Server pozwala skonfigurować między innymi użycie bieżącego kontekstu bezpieczeństwa, stałych poświadczeń zdalnych albo brak dostępu dla określonych loginów. Uprawnienia lokalnego użytkownika i uprawnienia zdalnego konta nie są tym samym. Użytkownik może mieć prawo do wykonania zapytania w lokalnej bazie, ale nie mieć uprawnień do odczytu tabeli po drugiej stronie połączenia. W przypadku uwierzytelniania Windows znaczenie może mieć także przekazywanie poświadczeń między komputerami, znane jako problem podwójnego przeskoku.

Do utworzenia konfiguracji można wykorzystać procedurę systemową sp_addlinkedserver, a do ustawienia mapowania loginów procedurę sp_addlinkedsrvlogin. Zmiana właściwości, takich jak możliwość wykonywania zdalnych procedur lub użycie zdalnego sortowania, powinna być poprzedzona sprawdzeniem dokumentacji konkretnego dostawcy. Włączenie opcji bez zrozumienia jej skutków może rozszerzyć zakres operacji wykonywanych na zdalnym serwerze albo zmienić sposób interpretacji wyników.

Diagnostyka błędów i wpływ na działanie komputera

Problemy z Linked Server mogą powstać na kilku różnych poziomach. Najpierw warto rozdzielić błąd rozwiązywania nazwy od błędu sieciowego, uwierzytelnienia, dostawcy i uprawnień SQL. Jeżeli SQL Server nie potrafi odnaleźć hosta albo portu, zapytanie nie dociera do zdalnego silnika. Jeżeli połączenie sieciowe działa, ale pojawia się komunikat o logowaniu, przyczyną może być nieprawidłowe mapowanie loginu, wygasłe hasło lub niedostępny mechanizm uwierzytelniania. Błąd dotyczący dostawcy OLE DB wskazuje natomiast na warstwę pośredniczącą między SQL Server a zewnętrznym źródłem.

Podczas analizy należy sprawdzić nazwę Linked Server, konfigurację dostawcy, rozwiązywanie DNS lub nazwę hosta, dostępność portu, ustawienia zapory oraz możliwość zalogowania się kontem używanym przez mapowanie. Następnie trzeba wykonać możliwie małe zapytanie testowe, na przykład odczyt jednej kolumny i ograniczonej liczby wierszy. Dopiero po potwierdzeniu podstawowego dostępu warto analizować złożone zapytania, złączenia i modyfikacje danych. W przypadku OPENQUERY trzeba również zweryfikować składnię akceptowaną przez zdalny silnik, ponieważ tekst zapytania jest interpretowany po stronie źródła.

Linked Server może wpływać na czas odpowiedzi lokalnych aplikacji, gdy zapytanie oczekuje na sieć, blokadę lub odpowiedź zdalnej bazy. Szczególne znaczenie mają złączenia tabel lokalnych ze zdalnymi, sortowanie dużych wyników oraz zapytania uruchamiane w transakcjach. SQL Server może próbować koordynować transakcję obejmującą więcej niż jeden zasób, a w określonych sytuacjach wiąże się to z użyciem koordynatora transakcji rozproszonych. Diagnostyka powinna więc obejmować czas oczekiwania, plan wykonania, rozmiar przesyłanych danych i stan obu serwerów, a nie tylko treść pojedynczego komunikatu błędu.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę