2009-05-08 6 views
9

Ich versuche, Daten von einem Remote-SQL-Server einzuziehen. Ich kann mit SQL-Authentifizierung auf den Remote-Server zugreifen. Ich hatte kein Glück, die gleichen Anmeldeinformationen mit sp_addlinkedserver zu verwenden.Probleme beim Hinzufügen eines verknüpften SQL-Servers

Ich versuche, etwas wie folgt aus:

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 

Hier ist, was ich bekommen:

 

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]. 

Wieder ich den Server direkt (in SQL Management Studio) zugreifen können genau diese Anmeldeinformationen, Es ist also kein Problem mit meinem Netzwerk oder meinen Anmeldeinformationen.

Die meisten Beispiele, die ich online gesehen habe, scheinen Windows-Domänenkonten einzubeziehen, im Gegensatz zu SQL-Sicherheitsanmeldungen. Funktioniert das nicht mit der SQL-Authentifizierung?

Antwort

6

Es funktioniert mit SQL-Authentifizierung. In der Tat ist es einfacher, da Sie Kerberos nicht einrichten müssen, wenn Sie die SQL-Authentifizierung verwenden.

Eine Sache ist verwirrend über Ihre Fehlermeldungen, Ihre Adresse ist eine IP-Adresse: 123.45.678.90

Ihre Fehlermeldung über Named Pipes spricht. Könnte das ein Hinweis sein?

Sie müssen den Server in TSQL nicht anhand seiner IP-Adresse referenzieren. Wenn Sie einen alias on the local server hinzufügen, der auf den Remote-Server verweist, können Sie einen sinnvolleren Namen angeben. Die Angabe der IP-Adresse ist offensichtlich nicht zufriedenstellend.

+0

Das ist ein interessanter Gedanke. Ich bekomme das gleiche Ergebnis, wenn ich eine gefälschte IP-Adresse oder "foofoofoo" im Parameter @datasrc eingib. –

+0

Danke, das führte mich zur richtigen Lösung. –

+1

Beantworten Sie mich dann mein guter Mann, ich sehne mich nach einem Highscore = D –

1

Wenn es bei Named Pipes fehlschlägt, wenn Sie eine IP-Adresse angeben, versuchen Sie, die IP-Adresse mit "tcp:" voranzukommen, und sehen Sie, ob es beim richtigen Pfad hilft.

+0

Danke - ich habe es versucht und es hat nicht geholfen. –

+1

Für diejenigen, die eine Verbindung nach Domänennamen herstellen möchten: swap @ datasrc = 'tcp: 0.0.0.0' mit @ datasrc = 'mydomain.com', kein SERVER = wie in vielen anderen Posts. –

2

es herausgefunden, dank einer Reihe von Anweisungen in der SMS-GUI-Assistent eine verknüpfte Server für das Hinzufügen von: "If SQL Server is selected, then the Linked Server name is also the network name of the server."

Ich dachte, der Name des verknüpften Server nur ein beliebiger Alias ​​war.

Das funktioniert wie ein Zauber - es ist eine Schande, dass ich die IP (in Klammern) jedes Mal eingeben muss, wenn ich diesen Verbindungsserver verwenden möchte, aber da haben Sie es.

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, das ist scheiße. Bist du sicher, dass du kein Problem mit der Namensauflösung hast? –

+0

Nicht sicher, was Sie meinen - es gibt keinen Domänennamen, der mit dem DB-Server verknüpft ist, sondern nur eine IP-Adresse. –

+0

Ja, ich habe das gleiche Problem jetzt. Ich habe versucht, es zu umgehen, indem ich SQLOLE (oder was auch immer) als Provider angegeben habe und ihm eine Verbindungszeichenfolge gegeben habe. In diesem Fall ist @Server tatsächlich ein beliebiger logischer Name ... aber das würde nicht auf der Produktionsmaschine (I vergaß warum). Also kehrte ich zu dieser Methode zurück und extrahierte den physischen Ort mit Hilfe einer Ansicht auf den interessanten Tafeln, was bisher funktioniert hat. – harpo

1

sp_configure 'Ad Hoc verteilte Abfragen', 1

nächste

recon mit Überschreibung

haben die SQL Fläche geprüft configuraton -> Database -> Remoteconnections -> Loacal und remoteconnections -> shouild Be Verwenden Sie sowohl TCP/IP und Named Pipes Option markiert (wenn diese Option nicht auswählen und neu starten)

das muss das Problem beheben OLE DB-Provider "SQLNCLI" für Verbindungsserver "Remote" zurückgegebene Nachricht "Beim Herstellen einer Verbindung mit dem Server ist ein Fehler aufgetreten. Bei der Verbindung mit SQL Server 2005 kann dieser Fehler durch die Tatsache Tatsache verursacht werden, dass SQL Server unter den Standardeinstellungen keine remote Verbindungen zulässt. ".

9

Um das Problem zu lösen oben ich die Linked Server-Definition geändert speziell TCP angeben:

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' 

Das ist für mich gearbeitet. Dieses Verfahren erlaubt mir auch ein Nicht-Standard-Port für den Remote-Server angeben:

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

Ich hoffe, das

0

Manchmal sind die Protokolle aktiviert worden hilft und die Oberfläche Konfiguration ermöglicht Remote-Verbindungen, aber die SQL Der Server-Browserdienst wurde seit dem Einrichten der Konfiguration nicht neu gestartet. Dies bedeutet, dass die Konfiguration nicht aktiv ist.

Versuchen Sie, SQL Server Browser als Fehlerbehebungsschritt neu zu starten, wenn Ihre Konfigurationseinstellungen alle korrekt zu sein scheinen.

Mike