MS SQL 服务器端口问题

MS SQL 服务器端口问题

我很困惑,因为 tcpview 显示 sqlservr.exe 正在监听这些端口 49371、49373、52732,但在 SqlServer 配置管理器->SQL Native Client 10.0 配置->客户端协议和 TCP/IP 属性中,默认端口是 1433。为什么我没有看到正在监听的 1433 端口?我觉得这很奇怪。

我的所有实例都已将动态端口设置为某个数字。知道这是怎么回事吗?因为我想远程连接我的 SQL Management Studio,但现在无法连接。我可以连接本地的。

我的最终目标是连接 Visual Studio 进行实体生成,如果我可以让 SQL Management Studio 工作,我想我可以从那里开始,但似乎无法让它工作。

编辑:更多注释。在我的全新安装机器上,它也没有监听端口 1433。TCP 已启用且为顺序 2(共享内存为顺序 1)。我很困惑,为什么默认安装显示默认端口是 1433,但没有人监听该端口?

版本:2008 R2,刚刚安装的服务包。

不过,基本问题是……这应该如何工作?我已经在本地安装了两个实例,每个实例都有一个动态端口,使用 tcpview,我确认它占用了该动态端口。每个人都提到的这个端口 1433,是像一个重定向到这些动态端口的代理实例吗?还是我应该自己将动态端口更改为 1433 的固定 tcp 端口?

当您继续安装 MS SQL 实例时会发生什么?它不能将它们全部放在端口 1433 上,对吗?它应该将第一个放在端口 1433 上吗?你在这里的体验如何?

谢谢,Dean

答案1

可能不是 sqlserver.exe 在监听,而是另一个进程

使用 netstat 进行验证。我的 SQL 显示:

C:\Users\Administrator.ENV1>netstat -a

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:80             ENV1S08:0              LISTENING
  TCP    0.0.0.0:135            ENV1S08:0              LISTENING
  TCP    0.0.0.0:445            ENV1S08:0              LISTENING
  TCP    0.0.0.0:1433           ENV1S08:0              LISTENING
  TCP    0.0.0.0:2383           ENV1S08:0              LISTENING

答案2

查看 SQL Server ERRORLOG 文件。日志将清楚地说明 SQL Server 正在监听哪个端口。

您通过 netstat 等看到的其他端口对于客户端连接并不总是有用的。

答案3

这个答案有点长;如果你不读其他内容,请阅读SQL浏览器的一些细节。该页面来自 SQL 2005,但我认为 SQL 浏览器的行为从那时起并没有发生实质性的变化。

很容易被忽视的是,SQL Browser 是 Microsoft 计划的重要组成部分。SQL Browser 作为 Windows 服务运行,并使用 1434 充当一种目录服务,可以查找本地计算机上安装的实例。在运行时设置数据库连接时,驱动程序可以与此服务交互,以确定驱动程序需要连接到哪个端口。因此,SQL Browser 也不是代理。它实际上是一种超级简单的目录服务。

通常,SQL Server 连接与默认(或“未命名”)实例建立:

  • hal9000

或者与“命名”实例建立连接:

  • hal9000\开发
  • hal9000\测试
  • hal9000\随便

对于默认实例,它应该监听 1433。如果我没记错的话,标准 VS 安装程序仅安装 (SQL Server Express) 命名实例。在这种情况下,1433 上不会有任何监听。

命名实例在启动时将被分配一个端口。无论哪种方式,这都无关紧要,因为 SQL Browser 服务知道它们在哪里以及它们的名称是什么,并且可以在给定实例名称的情况下查找端口号。连接字符串通常只传递实例名称,因为用户应用程序通常不知道有关端口的任何信息。

您提到“所有实例”,但您没有区分命名实例和未命名实例,这让我怀疑您没有默认(又名“未命名”)实例。

可以手动配置所有这些并指定端口值,然后禁用 SQL Browser 服务。这有点类似于在网络上关闭 DHCP。

手动配置通常用于支持防火墙规则,我只见过在服务器上进行手动配置,而不是在开发工作站上。您关于无法“立即远程”连接但可以连接到“本地”的说法让我有点困惑,因为我认为您说的是一台机器上的所有实例。如果您尝试连接到在远程机器上运行的命名实例,即使该机器位于您的 LAN/WAN 上而不是开放的互联网上,您也很可能被(软件或硬件)防火墙阻止。

答案4

好吧,出于某种原因,两台服务器上的实例都没有在端口 1433 上创建实例,因此虽然我们的设置显示默认端口为 1433,但每次安装实例时,都会为其分配一个新的动态端口。我最终将实例 A 从动态端口更改为固定在 1433,一切运行正常!!!我还将所有其他实例更改为固定端口,因为动态端口都处于非常高的范围内,其他应用程序会使用这些端口绑定和连接到服务器,并且通常最好在较低的范围内使用端口,因为这些端口通常不由客户端套接字使用。

相关内容