我们正在将 Win7 计算机上的两个 SQL Server 2008 实例迁移到 Win10 服务器上的 SQL Server 2019。旧服务器有两个实例:123.123.123.123 和 123.123.123.123\ABC。我们从所有联网计算机连接到这两个实例都没有问题。
在新服务器上,实例为:CMP0123456 和 CMP0123456\ABC。我们可以连接到没有斜线的实例,但我们不能连接到有斜线的实例。错误是 SQL 错误 17:服务器不存在或访问被拒绝。
ping CMP0123456 适用于远程计算机。
我检查了配置管理器,并且 SQL Server 和 SQL Server 代理服务正在为这两个实例运行。浏览器也在运行。两个实例都使用 TCP/IP 和共享内存协议。命名管道被禁用。
我可以通过本地 SSMS 访问这两个实例。
我不是 DBA。我没有设置旧服务器或 SQL Server 2008。我对网络问题只是隐约熟悉。我检查了新服务器上的防火墙,并且端口 1433 和 1434 都已启用/打开。1433 使用 TCP,1434 使用 UDP。
出于某种原因,PolyBase 有端口 1433 和 1434。我安装了 PolyBase,但我认为我真的不需要它。如果这是问题所在,有没有办法将端口 1433 和 1434 直接关联到 SQL Server 2019?
或者我需要更改 SQL Server 和/或防火墙/网络/DNS 中的其他设置,以便远程计算机看到 \ABC 实例?
每个 SQL Server 实例侦听不同的端口。您的默认实例正在侦听端口 1433,但命名实例必须在不同的端口上侦听以避免冲突,默认情况下是动态分配的。
确保防火墙也允许命名实例端口的 TCP 连接。动态端口号可以使用 SQL Server 配置管理器 (C:\Windows\System32\SQLServerManager15.msc) 识别,并且还会在启动时记录到 SQL Server 错误日志中(例如“服务器正在侦听 ['any' 12345]” )。
为避免命名实例动态端口号更改时出现连接问题,请为命名实例分配静态端口号(连同 TCP 防火墙规则)或为命名实例 SQL Server 应用程序可执行文件(例如 C:\Program Files \Microsoft SQL Server\MSSQL15.ABC\MSSQL\Binn\sqlservr.exe")。
在远程计算机上运行以下 PowerShell 命令以验证每个实例的 TCP 端口连接。
在客户端连接字符串中指定实例名称(而不是端口号)时使用SQL Server Browser 。客户端 API 向浏览器服务发送一个 UDP 1434 请求,浏览器服务返回一个包含当前命名实例端口号的数据报,以供后续使用。这意味着 SQL Server Browser 服务正在运行,并且允许 UDP 1434 通过防火墙,以便按名称连接到命名实例。
不幸的是,没有内置的 PowerShell 命令来测试远程 UDP 端口连接(至少我知道)。但是在 .NET 对象的帮助下,可以借助此脚本验证远程 SQL Server 浏览器的连接性,该脚本发送一个 UDP 1434 浏览器查询(从网络跟踪反向工程)以获取指定命名实例的信息。