我们正在将我们的软件从使用 SQL 2000 升级到 2008 R2。我们的客户将安装更新,卸载 2000 并在同一实例下安装 2008 R2。因此,如果不存在实例,则不会设置实例名称(默认)。但是,问题始于具有命名 SQL 实例的客户。
从2008 R2开始(之前不太确定),由于某些原因,客户端通过实例名连接服务器不成功。我正在从 Management Studio 进行测试 - 如果我无法连接它,那么就无法连接任何东西。我浏览网络服务器,并在列表中找到特定的服务器\实例。但是,在尝试连接到像这样的实例名称MyServer\INST
时,我得到:
A network-related or instance-specific error occurred while establishing
a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured
to allow remote connections. (provider: SQL Network Interfaces, error: 26 -
Error Locating Server/Instance Specified) (Microsoft SQL Server, Error: -1)
事实上,我确实启用了 TCP/IP 和命名管道协议,这是我做的第一件事。当我使用逗号 (,) 和端口号(如 )连接到服务器时MyServer, 49195
,它工作正常。因此,客户端计算机似乎无法识别实例名称。这发生在我们所有的 SQL 2008 R2 安装和所有客户端计算机上,包括 Win 7、XP、Vista、Server 2008 和 Server 2003。我们在早期版本的 SQL 上从未遇到过此类问题。如果防火墙和防病毒软件都被禁用,问题甚至仍然存在。
现在,这是一个大型更新,我们将很快分发给所有客户,我们希望尽量减少他们安装此软件所需的互动。我们绝对讨厌使用端口号的想法,因为它总是不同的,我们将不得不修改每个客户端以指向这个服务器/端口。我们的一些客户可能拥有数百台客户端计算机。如何使客户端连接到命名的 SQL 实例再次工作?毕竟,这就是命名实例的全部目的,如果客户端无法通过其名称连接到该实例,那么它的命名又是为了什么呢?
编辑
有人提到要确保 SQL Browser 正在运行,所以我检查了一下,它正在运行。服务器也能够连接到它自身(本地)——只是外部连接被拒绝。
更新
经过更仔细的检查,我了解到防火墙在测试时并没有完全禁用,完全禁用后,它就可以工作了。因此,看起来 SQL Browser 被防火墙阻止了外部客户端的访问。