SQL Server 2005:链接服务器上的“从注册表 [xFFFFFFFF] 获取启用的协议列表时出错。”

SQL Server 2005:链接服务器上的“从注册表 [xFFFFFFFF] 获取启用的协议列表时出错。”

我正在尝试通过 SQL Server Management Studio 创建链接服务器对象,但出现以下错误:

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”类型,但即使我通过 SQL 语句创建它,我也能得到它。我可以从其他机器毫无问题地连接到目标服务器“Foo”。我该如何解决这个问题?

答案1

首先(以防万一……)确保您已为 SQL Native Client 启用了协议。进入 SQL Server 配置管理器,展开 SQL Native Client 配置,单击客户端协议,然后检查是否至少启用了一个协议(最好是 TCP/IP 和/或命名管道)。

如果是这种情况,请在注册表中查找此项:

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

并查看那里的 2 个值(ProtocolOrder 和 ProtocolsSupported),它们可能有问题。

这些应该是 REG_MULTI_SZ 值。ProtocolsSupported 应该是sm tcp np 通过。ProtocolOrder 应该为您启用的每个协议都有一个条目,按照您希望的从右到左的顺序排列。

sm = 共享内存 tcp = TCP/IP np = 命名管道 via = VIA

因此,如果您首先启用并列出 TCP/IP,然后是命名管道,然后是共享内存,并且禁用 VIA,则 ProtocolOrder 的值将是

TCP
协议

相关内容