Jak uruchomić to połączenie ODBC programu SQL Server?

30

Uwaga: Oczywiście zmieniłem nazwy serwerów i adresy IP na fikcyjne.

Oto co się dzieje. Mam serwer, do którego dzwonię MYSERVER, z programem Microsoft SQL Server Express 2005. Bezpośrednio na tym serwerze mam skonfigurowane połączenie ODBC wskazujące na siebie, które już działa idealnie. Loguję się przy użyciu uwierzytelniania programu SQL Server (nie uwierzytelniania systemu Windows), a konfiguracja jest następująca:

Obraz dobrego połączenia ODBC

Tak jak powiedziałem, to działa. Ale potem mam inny komputer, który znajduje się w zupełnie innej domenie / nie w intranecie, który musi uzyskać dostęp do tego samego programu SQL Server hostowanego na MYSERVER. Ponieważ znajduje się w innej domenie, nie rozpoznaje nazwy „MYSERVER”; Muszę wskazać na adres IP MYSERVER, który powiemy 123.456.789.012. Ale połączenie ODBC nie wydaje się tam działać. Próbowałem skonfigurować to w następujący sposób:

Obraz złego połączenia ODBC

To nie działa Po wpisaniu nazwy użytkownika i hasła i naciśnięciu przycisku Dalej blokuje się na dobre 10 do 20 sekund, a następnie w końcu powraca z następującym błędem:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Jeśli spróbuję tego samego, ale zmienię „serwer” 123.456.789.012\SQLEXPRESSna zwykły 123.456.789.012, otrzymuję inny błąd:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Teraz wiem, co myślisz. Być może myślisz: „och, prawdopodobnie nie otworzyłeś zapory dla portu 1433, manekinie”. Tyle że tak zrobiłem i zweryfikowałem to, ponieważ mogę pomyślnie uruchomić:

telnet 123.456.789.012 1433

... z wiersza poleceń wszystko, czego chcę. Więc nie jestem pewien, co robić. Wiem, że SQL Server istnieje, działa i można poprawnie skonfigurować połączenie ODBC ; Po prostu nie jestem pewien, co to jest, że pomyliłem się w ustawieniach połączenia, które powodują te błędy. W oparciu o ten drugi błąd, który wymieniłem, wydaje się, że może on połączyć się z serwerem, ale po prostu nie może znaleźć instancji (ponieważ nie określiłem go tym razem). Czy to oznacza, że ​​po prostu muszę użyć innej składni, aby określić adres IP wraz z nazwą instancji? Co ja robię? Z góry dziękuję.

Soergergem
źródło

Odpowiedzi:

18

Nazwane potoki i protokoły TCIP dla SQL Server 2005 są domyślnie wyłączone. Czy włączyłeś je w „Menedżerze konfiguracji serwera SQL”? Protokoły można znaleźć w konfiguracji sieci SQL Server i w sekcji Konfiguracja rodzimego klienta SQL xx.

Połączenie na samym serwerze działa dzięki protokołowi „Pamięć współdzielona”.

Hakan Winther
źródło
9
Przyjmuję twoją odpowiedź, ponieważ znalazła się na właściwej drodze. W SQL Server Configuration Manager protokół TCP / IP był już włączony przez cały czas w „Konfiguracja sieciowa SQL Server 2005> Protokoły dla SQLEXPRESS” i „Konfiguracja SQL Native Client> Protokoły klienta”. Nazwane potoki były już włączone w tym ostatnim. Włączyłem to w pierwszym, ale to nie pomogło (te same komunikaty o błędach). Wreszcie zmieniłem źródło ODBC, aby używać sterownika „SQL Native Client” zamiast sterownika „SQL Server”, i to w końcu działało DID.
soapergem,
Dziękuję SoaperGEM! Nigdy bym nie pomyślał, żebym wypróbował SQL Native Client! Działa jak urok!
Phillip Senn,
5

Czy włączyłeś usługę przeglądarki SQL Server zgodnie z instrukcją Jak skonfigurować program SQL Server 2005, aby zezwalał na połączenia zdalne ?

Jeśli korzystasz z programu SQL Server 2005 przy użyciu nazwy instancji i nie używasz określonego numeru portu TCP / IP w ciągu połączenia, musisz włączyć usługę przeglądarki SQL Server, aby umożliwić połączenia zdalne. Na przykład program SQL Server 2005 Express jest instalowany z domyślną nazwą instancji Nazwa komputera \ SQLEXPRESS.

Sim
źródło
Czy łączenie się z serwerem \ instancja lokalnie używa innego mechanizmu niż zdalnie?
Sam
@Sam patrz odpowiedź Hakana Winthera.
Sim
4

Ten wątek naprawił dla mnie ten sam komunikat o błędzie podczas używania programu Access do łączenia się z serwerem MSSQL 2008. MSSQL 2005 i wcześniejsze działały dobrze tylko przy użyciu nazwy komputera w ciągu połączenia, ale musiałem zmienić ciąg połączenia w programie Access na pełną formę, gdy instancja została uaktualniona do 2008 roku:

servername\instancename,portnumber

Mufasa
źródło
2
To mi zrobiło, tyle że nie potrzebowałem numeru portu.
bgmCoder
2

Miałem ten sam problem i udało mi się go rozwiązać, zmieniając sterownik SQL na sterownik SQL Native Client. To było dziwne, ponieważ w moim przypadku działało dobrze od lat, a potem po prostu przestało działać. Podejrzewam, że jest to coś w rodzaju uszkodzenia sterownika, być może może pomóc ponowna instalacja MDAC, ale na razie cieszę się, że w ogóle działa!


źródło
1

Czy rozpoznałby nazwę serwera, gdyby był w pełni kwalifikowany? Gdyby to był MYSERVER.domain.com? Musieliśmy to zrobić z programem SQL Server podczas łączenia się z innej domeny. Jeśli możesz uzyskać połączenie DSN z systemem ODBC podczas testowania źródła danych, robisz postępy. Jeśli nie łączy się w konfiguracji ODBC, musisz to najpierw naprawić.

czwartek
źródło
Właśnie to próbuję zrobić - aby uzyskać połączenie DSN ODBC System w pierwszej kolejności podczas testowania źródła danych. Wypróbowałem więc twoją sugestię, próbując obu MYSERVER.domain.com\SQLEXPRESSi MYSERVER.domain.com, ale oba dały mi te same błędy, które wymieniłem powyżej.
soapergem
W wierszu polecenia na drugim komputerze wpisz „nslookup MYSERVER.domain.com” - czy to odpowiada prawemu adresowi IP (123.456.789.012), czy w ogóle?
Sim
@Sim - Tak, to komenda ma determinację prawidłowo.
soapergem
1

Czy używasz nazwanych potoków lub TCP na działającym połączeniu ODBC? Czy protokół TCP jest włączony?

aNullValue
źródło
1

Upewnij się, że masz włączone zdalne połączenia TCP dla serwera SQL.

Sam
źródło
0

Dziki strzał tutaj, ale co się stanie, jeśli umieścisz podwójny ukośnik przed nazwą serwera lub adresem IP? Wydaje mi się, że jest to normalnie wymagane w przypadku większości innych połączeń Windows / Microsoft.

John Gardeniers
źródło
Próba podwójnego odwrotnego ukośnika powoduje ten sam błąd 1326 (pierwszy wymieniony na liście).
soapergem
0

Miałem podobny problem. W moim przypadku inny sw konfiguruje ustawienia ODBC, więc nie mogę zmienić sterownika. Rozwiązałem moją sprawę w ten sposób:

  1. Ustaw ustawienia TCP / IP dla serwera, aby korzystał z portu 1433
  2. Na kliencie wprowadź adres serwera, taki jak: 192.168.1.5,1433 (bez nazwy instancji)

Potem zaczęło działać. System operacyjny klienta: Win7 x64 Driver: sqlsrv32.dll

Mert Gülsoy
źródło
0

Za to, co jest warte, zacząłem otrzymywać ten błąd w połączeniu, które wcześniej działało. Okazało się, że usługa MSSQL $ SQLEXPRESS została jakoś zatrzymana. Ponowne uruchomienie rozwiązało problem.

dsteele
źródło
0

Miałem również ten problem i było to tak proste: serwer wymieniony jako podstawowy serwer DNS dla tego serwera został usunięty, a aplikacja nie była już w stanie poprawnie rozpoznać nazwy serwera SQL w sieci. Wszystko natychmiast zaczęło działać ponownie, kiedy poprawiłem lokalny serwer DNS na działający.

twój komputerowy
źródło