SQL Server 2005:“链接的服务器上从registry”获取启用的协议列表出错

我正尝试通过SQL Server Management Studio创build一个链接服务器对象,并且出现以下错误:

SQL Network Interfaces: Error getting enabled protocols list from registry [xFFFFFFFF]. OLE DB provider "SQLNCLI" for linked server "Foo" returned message "Login timeout expired". OLE DB provider "SQLNCLI" for linked server "Foo" 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.". 

这是使用“SQL Server”types,但即使通过SQL语句创build它,我也能得到它。 我可以从其他机器连接到目标服务器“Foo”没有问题。 我怎样才能解决这个问题?

首先(以防万一…)确保您为SQL Native Client启用了一个协议。 进入SQL Serverconfigurationpipe理器,展开SQL Native Clientconfiguration,单击客户端协议,并检查是否至less有一个协议启用(最好是TCP / IP和/或命名pipe道)。

如果是这种情况,那么看看你的registry中的这个键:

 HKLM\Software\Microsoft\MSSQLServer\Client\SNI9.0 

并看看那里的2个值(ProtocolOrder和ProtocolsSupported),可能有些东西搞砸了。

这些应该是REG_MULTI_SZ值。 ProtocolsSupported应smtcp np通过 。 ProtocolOrder应该已经启用了每个协议的条目,按照从右到左的顺序,您希望它们成为。

sm =共享内存tcp = TCP / IP np =命名pipe道通过= VIA

因此,如果您启用了TCP / IP并首先列出,那么命名pipe道,共享内存和VIA被禁用,您的ProtocolOrder值将是

TCP
NP
SM