Blog summ-it

Utworzenie Linked Servera, które wydawałoby się prostym zadaniem, może okazać się dość problematyczne. Jak poradzić sobie w sytuacji, gdy test połączenia nie powiódł się? W poniższym artykule przygotowałam instrukcję, która pozwoli odpowiedzieć na to pytanie. Wykorzystaj sprawdzone podejście troubleshooting i krok po kroku rozwiąż problem.

Czym jest Linked Server

Linked Server umożliwia silnikowi SQL Servera odczyt danych z różnych źródeł zlokalizowanych na innym serwerze oraz uruchomienie na nim przydatnych komend T-SQL. Zdalne źródło danych niekoniecznie musi być drugą instancją SQL Servera. Może to być również rozwiązanie z rodziny Oracle czy Azure CosmosDB. Linked Server najczęściej tworzy się, by umożliwić sprawny dostęp do danych z zewnętrznego serwera i wesprzeć integrację danych z różnych źródeł.

Odpowiednie uprawnienia

Wyobraźmy sobie sytuacje, w której przychodzi do nas człowiek z biznesu. Jest to osoba z innego zespołu wewnątrz naszej firmy tzw. wewnętrzny klient. Planuje nam 15-minutowe spotkanie w kalendarzu, sugerując tym samym, że sprawa jest prosta i nieskomplikowana. Prośba dotyczy utworzenia Linked Servera. Dostajemy krótką informację o celu spotkania i zapewnienie, że podobną implementację zespół wdrażał już na innym środowisku. Powód dla którego jesteśmy potrzebni to fakt, że posiadamy uprawnienia sysadmin, czyli administratora bazy SQL, aby tworzyć obiekty na poziomie serwera.

Linked Server został utworzony, ale test połączenia nie powiódł się…

Poproszono nas o utworzenie Linked Servera. Użytkownik przyszedł do nas z gotową querką, podając wszystkie niezbędne dane. Naszym zadaniem jest tylko skopiować query i kliknąć „Execute”, posiadając wymagane uprawnienia do wykonania takich działań. Posiadamy dwie instancje SQLa i chcemy je ze sobą połączyć. Podajemy na instancji ,,A” adres instancji ,,B” oraz nazwę użytkownika mającego dostęp do instancji ,,B”, dodatkowo wpisujemy jego hasło i gotowe. Czy coś może pójść nie tak? Sprawdźmy na opisanym niżej przykładzie.

Przełożę konfigurację podaną w query do danych, jakie należy podać w GUI.

Uzupełniamy nazwę Linked Servera, zaznaczamy zgodnie z otrzymanymi wytycznymi Providera, podajemy adres serwera (Data source), nazwę bazy danych (Catalog) i ewentualne inne dane lub opcje serwera.

W zakładce Security zaznaczamy opcję połączenia „made using this security context” oraz podajemy w wyznaczonych miejscach login i hasło. Klikamy przycisk OK.

To byłby koniec prac związanych z utworzeniem Linked Servera. Wszystko wskazywałoby na to, że nasza praca została wykonana, a zadanie ukończone. Jednak nie zawsze wszystko idzie zgodnie z planem i często trafiamy na różnego rodzaju komplikacje. W tym przypadku na ekranie pojawia się komunikat:

The linked server has been created but failed a connection test.

Oznacza to, że niestety coś poszło nie tak. Na tym etapie należy dokładnie wczytać się w komunikat, który dostarcza nam kilka cennych informacji:

  • Could not open a connection to SQL Server (nie udało się otworzyć połączenia z SQL Server),
  • Login timeout expired (upłynął limit czasu logowania),
  • A network-related or instance-specific error has occured while establishing a connection to SQL Server. Serves is not found or not accessible (wystąpił błąd związany z siecią lub podczas nawiązywania połączenia z programem SQL Server. Nie znaleziono usługi lub jest ona niedostępna). Jest to bardzo częsty błąd 53. Sugeruje, że podajemy błędny adres lub docelowa instancja nie ma włączonej opcji zdalnego połączenia.

Rozwiąż problem krok po kroku

Gdy wystąpił błąd z połączeniem, przeszłam konkretną drogę, która pozwoliła na rozwiązanie problemu. Poniżej podam ścieżkę troubleshooting, którą można wykonać samodzielnie. Jeśli to nie jest dokładnie Wasz problem, polecam w pierwszej kolejności skontaktować się z adminem docelowego serwera. Należy poprosić o sprawdzenie na zarządzanej przez niego instancji, czy jest zaznaczona opcja Allow remote connections to this server w zakładce Connections w ramach właściwości instancji SQL Servera.

1. Sprawdź literówki oraz ping

Oczywiście wykonujemy najprostsze kroki weryfikacji, czyli upewniamy się, że w adresie serwera, loginie i haśle nie zrobiliśmy literówki. Pingujemy serwer po adresie IP. Jeśli otrzymamy odpowiedź Ping request could not find host <nazwaHosta> to już mamy jakiś trop.

2. Sprawdź uprawnienia użytkownika

Pytanie, które powinniśmy sobie zadać na tym etapie dotyczy użytkownika i tego, czy łaczy się on do podanej instancji. Możemy to sprawdzić, łącząc się przez SSMS. Wydaje się to oczywistym działaniem, jednak w stresującej sytuacji i pośpiechu, często zapominamy o najprostszych i najszybszych rozwiązaniach.

Pojawia się komunikat z informacją, że nasz SQL Server nie rozpoznaje podanego hosta.

Po wykonaniu prostego testu, otrzymaliśmy jasne wnioski. Nasza maszyna nie potrafi rozpoznać docelowego hosta. Na początku próby konfiguracji Linked Servera powinniśmy sobie zadać pytanie, czy docelowy serwer jest w tej samej domenie co serwer, na którym konfigurujemy połączenie. Jeśli nie, w takiej sytuacji z pomocą przychodzi nam możliwość dopisania hosta w pliku o nazwie hosts.

3. Dodaj adres serwera docelowego w pliku hosts

Na serwerze, na którym jest zainstalowany SQL Server przejdź do C:\Windows\system32\drivers\etc\hosts. Na tym etapie doświadczony administrator przed podjęciem jakichkolwiek działań w plikach systemowych, wykona kopię zapasową.

Teraz otwieramy plik hosts w notatniku, dopisujemy w ostatniej linijce adres IP i nazwę adresu.

Przypominam, że znak # oznacza zakomentowanie. W naszym przypadku, nie chcemy poprzedzić adresów IP i DNS hashem. Zapisujemy plik i wracamy do Management Studio.

4. Powtórz punkt numer 2

Ponownie próbujemy połączyć się do SQL Servera i sprawdzamy czy zmieni się treść błędu.

Nie pojawia się już komunikat „no such host known”. W moim przypadku pojawił się jednak błąd, że użytkownik nie może dostać się do systemowej bazy master, która jest dla niego bazą domyślną. W tym przypadku nie jest to probem. Można to rozwiązać wybierając Options >> w okienku połączenia i w pierwszym polu Connect to database wskazać nazwę bazy danych, do której chcemy się połączyć. Ten krok jednak nie jest konieczny i można było przejść prosto do ponownej próby utworzenia Linked Servera.

5. Sprawdź połączenie z inną bazą niż domyślna

Wybieramy autentykację użytkownikiem SQL-owym. W tym miejscu wpisujemy login i hasło, a zamiast odruchowo kliknąć Connect, wybieramy Options >>.

Następnie podmieniamy bazę <default> na znaną nam nazwę docelowej bazy.

Po kliknięciu Connect udało się nawiązać połączenie:

Możemy zatem wrócić do sedna naszych działań, czyli utworzenia Linked Servera.

6. Utwórz Linked Server

W tym miejscu ponownie wpisujemy parametry, które uzyskaliśmy na samym początku od naszego klienta. Tym razem po kliknięciu OK nie pojawił się żaden błąd. Nowy Linked Server został poprawnie utworzony.

Należy kliknąć prawym przyciskiem myszy na nowo utworzone połączenie i wybrać Test Connection.

Otrzymujemy informację o poprawnym przejściu testu połączenia. Nasz cel został osiągnięty.

The test connection to the linked server succeeded.

Przyczyną niepowodzenia utworzenia Linked Servera nie były błędne dane dostarczone przez użytkownika. Problem pojawił się na etapie wykrycia serwera spoza domeny. Aby rozwiązać ten problem, należało dodać wpis do pliku hosts.

Masz pytania dotyczące konfiguracji Linked Servera lub zastanawiasz się jakie korzyści przynosi dla firmy?

Umów sie na bezpłatną konsultację poprzez formularz na naszej stronie i uzyskaj specjalistyczne informacje dopasowane do Twoich potrzeb.

Jakub Mazerant
Head of Sales

Umów się na bezpłatną konsultację

Skonsultuj potrzeby Twojej firmy z naszymi ekspertami. Poznaj rozwiązania, które pomogą Twojej firmie usprawnić procesy biznesowe i zapewnić bezpieczeństwo danych.

Wypełnij formularz:

Twoja wiadomość została wysłana. Dziękujemy!