在我们的一个 SQL Server 实例(12.0.5571.0,如果您确实需要知道)上,我们使用多个 IP 地址进行连接。
- 127.0.0.1 - 动态端口设置为 0。未设置静态端口
- 172.16.0.5 - SQL Server 所在服务器的 IP 地址。动态端口设置为 0(自动生成)。没有分配静态端口
- 172.16.0.6 - SQL Server 实例的 IP 地址(这样团队只需点击 IP 地址,而不知道他们真正在哪个服务器上)。未分配动态端口。静态端口 1433
我一直在玩木偶,一直在搞乱注册表设置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp
看看我是否可以使用 puppet 自动配置 IP 地址和端口分配。我创建了一个名为“IP172016000006”的新注册表路径路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP172016000006
我从中模板化
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP1
但现在每当我启动 SQL Server 实例时,我的 127.0.0.1 和 172.16.0.5 动态端口都是不同的。
例如,我将停止 SQL Server 的实例,进入
- 'SQL Server 配置管理器'
- 导航到实例的网络配置
- 网络协议/网络协议
- IP地址
- 并为 IP 地址 127.0.0.1 和 172.16.0.5 设置 'TCP 动态端口 = 0。
- IP地址
- 网络协议/网络协议
- 导航到实例的网络配置
在我重新启动 SQL Server 后,该实例将监听 127.0.0.1:43340 和 172.16.0.5:43341(它似乎总是比另一个端口多 1 个)
我已阅读有关 SQL Server Browser 的文档,发现 SQL Server Browser 将返回它找到的第一个端口。
我还阅读了 BOL for setting a static port for SQL Server,这很有趣,涵盖了如何设置动态端口。BOL 表示 SQL Server 将尝试连接到指定的端口,但如果失败,它将获得一个新端口。这在很长一段时间内都是有意义的,但 SQL Server 始终具有不一致的动态端口分配。
我已经删除了有问题的注册表值,但 SQL Server 仍然无法将动态端口设置为相同。我已经重新启动了整个服务器。我已多次将 TCP 动态端口设置为“0”。
如何再次获得一致的动态端口?
- Windows 服务器 2012 R2
- SQL 服务器 12.0.5571.0
- 安装了 8 个 SQL Server 实例 - 其中 3 个是集群的(它是我们 DBA 的测试配置框;不要太苛刻地判断)
动态端口的要点是您不关心服务器在哪个端口上运行。 SQL Server Browser将客户端定向到动态选择的端口。
如果你不想要动态端口,那么一开始就分配一个端口,然后它永远不会改变。