2009-05-08 17 views
9

Próbuję pobrać dane ze zdalnego serwera SQL. Mogę uzyskać dostęp do zdalnego serwera za pomocą uwierzytelniania SQL; Nie miałem szczęścia używając tych samych poświadczeń z sp_addlinkedserver.Problemy z dodaniem połączonego serwera SQL

Próbuję coś takiego:

Exec sp_dropserver 'Remote', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='Remote', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='Remote', 
    @rmtuser='User', 
    @rmtpassword='Secret' 

Select Top 10 * from Remote.DatabaseName.dbo.TableName 

Oto co mam:

 

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"Login timeout expired". 

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"An error has occurred while establishing a connection to the server. 
When connecting to SQL Server 2005, this failure may be caused by the 
fact that under the default settings SQL Server does not allow remote 
connections.". 

Msg 53, Level 16, State 1, Line 0 
Named Pipes Provider: Could not open a connection to SQL Server [53]. 

Znowu mogę uzyskać dostęp do serwera bezpośrednio (w SQL Management Studio) przy użyciu tych dokładnych poświadczeń więc to nie jest problem z moją siecią lub poświadczeniami.

Większość przykładów, które widziałem w Internecie, dotyczy kont domeny systemu Windows, w przeciwieństwie do loginu zabezpieczeń SQL. Czy to nie działa z uwierzytelnianiem SQL?

Odpowiedz

6

Działa z uwierzytelnianiem sql. W rzeczywistości jest to łatwiejsze, ponieważ nie musisz konfigurować protokołu Kerberos, jeśli używasz uwierzytelniania SQL.

Jedno jest mylące o swoich komunikatów o błędach, adres jest adresem IP: 123.45.678.90

wiadomość o błędzie mówi o Named Pipes. Czy to może być wskazówka?

Nie musisz odwoływać się do serwera w TSQL przez jego adres IP. Jeśli dodasz alias on the local server, wskazując na zdalny serwer, możesz nadać bardziej sensowną nazwę. Odniesienie się do niego za pomocą adresu IP jest oczywiście niezadowalające.

+0

To interesująca myśl. Otrzymuję taki sam wynik, jeśli wprowadzę fałszywy adres IP lub "foofoofoo" w parametrze @datasrc. –

+0

Dzięki, doprowadziłem mnie do właściwego rozwiązania. –

+1

Odpowiedz mi, a następnie mój dobry człowiek, pragnę wysokiego wyniku = D –

1

Jeśli w przypadku nazwanych potoków występuje błąd podczas określania adresu IP, spróbuj przedrostkować adres IP za pomocą "tcp:" i sprawdź, czy pomaga ustawić go na właściwą ścieżkę.

+0

Dzięki - próbowałem tego i to nie pomogło. –

+1

Dla tych, którzy chcą połączyć się przez nazwę domeny swap @ datasrc = 'tcp: 0.0.0.0' z @ datasrc = 'mydomain.com', nie ma SERVER = jak w wielu innych postach. –

2

Zdobione, dzięki linii instrukcjami kreatora GUI SMS do dodawania serwerów połączonych: "If SQL Server is selected, then the Linked Server name is also the network name of the server."

myślałem nazwa serwera połączonego właśnie arbitralne alias.

Działa to jak urok - szkoda, że ​​muszę wpisać adres IP (w nawiasach) za każdym razem, gdy chcę korzystać z tego połączonego serwera, ale tam go masz.

Exec sp_dropserver '0.0.0.0', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='0.0.0.0', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='0.0.0.0', 
    @rmtuser='user', 
    @rmtpassword='secret' 
go 

Select Top 10 * from [0.0.0.0].DatabaseName.dbo.TableName 
+0

Wow, to jest do bani. Na pewno nie masz problemu z rozpoznawaniem nazw? –

+0

Nie wiesz, co masz na myśli - nie ma nazwy domeny powiązanej z serwerem DB, tylko adres IP. –

+0

Tak, teraz mam ten sam problem. Próbowałem go obejść, określając SQLOLE (lub cokolwiek innego) jako dostawcę i nadając mu ciąg połączenia, w którym to przypadku @serwer jest w rzeczywistości arbitralną nazwą logiczną ... ale to nie byłoby całkiem połączone na maszynie produkcyjnej (I zapomniałem dlaczego). Powróciłem więc do tej metody i wyodrębniłem fizyczną lokalizację, korzystając z widoku na interesujące mnie tabele, które działało do tej pory. – harpo

1

sp_configure 'Ad Hoc Distributed Zapytania', 1

obok

reconfigure z ręcznym

sprawdzili obszar SQL Surface Configuraton -> Databaseengine -> Remoteconnections -> Loacal i remoteconnections -> shouild be Za pomocą opcji TCP/IP i potoków nazwanych zaznaczono (jeśli nie wybierz tej opcji i uruchom ponownie)

To musi rozwiązać problem Dostawca OLE DB "SQLNCLI" dla serwera połączonego "Remote" zwrócił komunikat "Wystąpił błąd podczas nawiązywania połączenia z serwerem. Podczas łączenia się z programem SQL Server 2005 niepowodzenie to może być spowodowane faktem, że pod domyślnymi ustawieniami program SQL Server nie zezwala na zdalne połączenia . ".

9

Aby rozwiązać ten problem powyżej I wprowadza definicję serwera połączonego określić TCP szczególności:

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='TEST_LINK', 
    @rmtuser='user', 
    @rmtpassword='secret' 

Ten pracował dla mnie. Ta metoda również pozwoliło mi na określenie niestandardowego portu na zdalnym serwerze:

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0,1111' 

Mam nadzieję, że to pomoże

0

Czasami protokoły zostały włączone i konfiguracja powierzchnia pozwala na zdalne połączenia, ale SQL Usługa przeglądarki przeglądarki nie została uruchomiona ponownie od czasu skonfigurowania konfiguracji. Oznacza to, że konfiguracja nie jest aktywna.

Spróbuj ponownie uruchomić przeglądarkę SQL Server jako krok rozwiązywania problemów, jeśli wszystkie ustawienia konfiguracji wydają się być poprawne.

Mike

Powiązane problemy