添加链接的SQL服务器时遇到问题

时间:2009-05-08 19:08:32

标签: sql-server linked-server

我正在尝试从远程SQL Server提取数据。我可以使用SQL身份验证访问远程服务器;我没有运气使用与sp_addlinkedserver相同的凭据。

我正在尝试这样的事情:

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

这是我得到的:


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

同样,我可以使用这些确切的凭据直接访问服务器(在SQL Management Studio中),因此我的网络或凭据不会出​​现问题。

我在网上看到的大多数示例似乎涉及Windows域帐户,而不是SQL安全登录。这不适用于SQL身份验证吗?

6 个答案:

答案 0 :(得分:10)

为解决上述问题,我修改了链接服务器定义以明确指定TCP:

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'

这对我有用。此方法还允许我为远程服务器指定非标准端口:

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

我希望这会有所帮助

答案 1 :(得分:7)

它适用于sql身份验证。实际上它更容易,因为如果使用SQL身份验证,则不必设置Kerberos。

有一件事令人困惑,您的错误消息,您的地址是IP地址:123.45.678.90

您的错误消息是关于命名管道。这可能是一个线索吗?

您不必通过其IP地址在TSQL中引用服务器。如果添加alias on the local server,指向远程服务器,则可以提供更合理的名称。通过IP地址引用它显然不能令人满意。

答案 2 :(得分:2)

通过SMS GUI向导中的一系列指令添加链接服务器,将其弄清楚:"If SQL Server is selected, then the Linked Server name is also the network name of the server."

我认为链接服务器的名称只是一个任意别名。

这就像一个魅力 - 每次我想使用这个链接服务器时,我必须输入IP(括号内),这是一种耻辱,但是你有它。

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

答案 3 :(得分:1)

如果在指定IP地址时命名管道失败,请尝试使用“tcp:”为IP地址添加前缀,并查看是否有助于将其设置在正确的路径上。

答案 4 :(得分:1)

sp_configure'Ad Hoc Distributed Queries',1

下一个

使用覆盖重新配置

检查了SQL Surface区域配置 - > Databaseengine - > Remoteconnections - > Loacal和remoteconnections - > shouild be使用TCP / IP和命名管道选项 (如果不选择该选项并重新启动)

这必须解决问题 用于链接服务器“远程”的OLE DB提供程序“SQLNCLI”返回消息 “建立与服务器的连接时发生错误。 连接到SQL Server 2005时,此故障可能是由 事实上,在默认设置下SQL Server不允许远程 连接“。

答案 5 :(得分:0)

有时协议已启用且表面区域配置允许远程连接,但自设置配置后SQL Server Browser服务尚未重新启动。这意味着配置无效。

如果配置设置似乎都正确,请尝试重新启动SQL Server Browser作为故障排除步骤。

麦克