我正在尝试配置对我的 SQL Server 命名实例(名为 SQL2012)的 TCP 访问。我使用管理工作室连接到数据库引擎。我输入服务器名称:“tcp:localhost\SQL2012”,我收到以下错误消息:
(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)
SQL Server 团队的这篇文章似乎非常有用,他们建议使用 PortQry 测试 SqlBrowser 服务。当我这样做时,我会得到以下信息:
Querying target system called:
localhost
Attempting to resolve name to IP address...
Name resolved to 127.0.0.1
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName MSWART7
InstanceName SQL2012
IsClustered No
Version 11.0.5058.0
tcp 52329
♥K K P☺K 5 - 2 1 qK 1 4 rK 8 7 0☺ 1 qK
==== End of SQL Server query response ====
果然,当我指定服务器名称“tcp:localhost,52329”时,我能够连接到数据库
我不确定我错过了什么。SQL 浏览器似乎正在运行,端口和防火墙似乎是开放的或不相关的(我正在尝试连接到 localhost)。
我接下来看哪里?
当您尝试连接到本地实例时,SQL Server 将始终尝试使用共享内存。此连接将正常工作:
这适用于我的场景,在这种情况下,连接确实使用了共享内存。
结果:
如果您想尝试覆盖共享内存(不知道为什么,在本地计算机上)并强制使用 TCP/IP,则不能将其与明确指定命名实例混合使用,至少在我尝试过的所有实例中(没有双关语)。命名实例强制 SQL Server 使用 SQL Server 浏览器将实例名称映射到端口号,但这显然不能在您首先强制 TCP/IP 时完成(使用 TCP/IP 的重点是你直接去端口,不用担心浏览器)。如果您的命名实例恰好在其自己的 IP 地址上运行并强制使用端口 1433,您也许可以让它工作;如果您使用客户端网络别名(但我不能) ,您也可以让它工作。
如果我在配置管理器中查找分配给该实例的当前动态端口(在我的情况下是 49538),我能够连接,然后使用以下命令进行连接
tcp:localhost,49538
:所以现在:
结果:
我尝试的所有变体 - 跨多台机器和版本 - 我尝试将命名实例与覆盖共享内存结合并改用 TCP/IP - 产生了与您收到的相同的错误。这既是我在服务器/实例名称前加上前缀,也是
tcp:
我在连接属性对话框中为网络协议指定 TCP/IP 时。长话短说:如果您真的需要强制 TCP/IP 进行本地连接,您将需要为该实例使用固定端口,并指定端口。或者使用 1433 (只有在没有默认实例或者你有该实例的专用 IP 地址时才有效),那么你不需要指定端口,但你仍然需要指定
tcp:
前缀或使用它连接对话框中的选项。我不建议尝试禁用共享内存。FWIW。