如何找到 MS SQL Server 2008 的端口?

Posted

技术标签:

【中文标题】如何找到 MS SQL Server 2008 的端口?【英文标题】:How to find the port for MS SQL Server 2008? 【发布时间】:2009-10-05 08:25:04 【问题描述】:

我在本地机器上运行 MS SQL Server 2008。我知道默认端口是 1433,但是它没有在这个端口上监听。 SQL 是 Express 版本。

我已经尝试了日志、SQL Server Management Studio、注册表和扩展存储过程来查找端口。但是,我找不到它。请帮我。谢谢。

【问题讨论】:

我正在使用我查看的其他资源更新问题,以便我拥有它们的书签,其他人也可以使用它们。 blogs.msdn.com/sql_protocols/archive/2008/11/05/…decipherinfosys.wordpress.com/2008/01/02/…dumbledad.wordpress.com/2008/07/09/… 我正在使用 TCP 视图查看它正在运行的端口。令我惊讶的是,即使在将其安装为默认实例之后,服务器仍在使用动态端口而不是 1433。我还卸载了快速版并安装了完整版,之后我只能看到进程为 sqlservr.exe:5272。而且,我的假设是它正在侦听端口 5272。 【参考方案1】:

在 Windows 中单击 Start 按钮。

转到All Programs -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager

点击SQL Native Client 10.0 Configuration -> Client Protocols -> TCP/IPTCP/IP 上双击(右键选择Properties)。

你会发现Default Port 1433

根据连接情况,端口号可能会有所不同。

【讨论】:

在我的计算机上,运行 Windows 10 并安装了 SQL Server 2012 Express,SQL Server 配置管理器 未列在 Windows 开始菜单中,但可以在 服务和应用程序组下的 i>计算机管理 MMC 管理单元。动态端口也不在“SQL 本机客户端配置”项下(对我来说是“11.0”版),而是在 SQL Server 网络配置项下(以及 IP 地址 TCP/IP 协议属性窗口的选项卡,位于最底部,设置 TCP 动态端口)。 这个答案是指客户端端口,而不是原始问题中所要求的服务器端口。下面@brothers28 的回答更准确。【参考方案2】:

你也可以看看

netstat -abn

它为端口提供相应的应用程序,使它们保持打开状态。

编辑:或TCPView。

【讨论】:

您能告诉我 MS SQL Server 2008 以什么名称命名为应用程序吗? 应该是 sqlservr.exe(不过我没有检查)。 这对我有用。端口号在 above [sqlservr.exe] 行上。 我在Ssms.exe下找到的【参考方案3】:

这是我找到的 5 种方法:

方法 1:SQL Server 配置管理器 方法 2:Windows 事件查看器 方法 3:SQL Server 错误日志 方法 4:sys.dm_exec_connections DMV 方法 5:使用 xp_instance_regread 读取注册表

方法 4:sys.dm_exec_connections DMV 我认为这几乎是最简单的方法... DMV 返回可用于监视 SQL Server 实例的服务器状态。我们可以使用sys.dm_exec_connections DMV 来识别 SQL Server 实例正在侦听的端口号,使用下面的 T-SQL 代码:

SELECT local_tcp_port
FROM   sys.dm_exec_connections
WHERE  session_id = @@SPID
GO

Result Set:
local_tcp_port
61499

(1 row(s) affected)

方法一:SQL Server 配置管理器

步骤 1. 单击开始 > 所有程序 > Microsoft SQL Server 2012 > 配置工具 > SQL Server 配置管理器

步骤 2. 转到 SQL Server 配置管理器 > SQL Server 网络配置 > 协议

步骤 3. 右键单击​​ TCP/IP 并选择属性

步骤 4. 在 TCP/IP 属性对话框中,转到 IP 地址选项卡并向下滚动到 IPAll 组。

如果 SQL Server 配置为在静态端口上运行,它将在 TCP 端口文本框中可用,如果在动态端口上配置,则当前端口将在 TCP 动态端口文本框中可用。这里我的实例正在侦听端口号 61499。

您可以在此处找到其他方法:http://sqlandme.com/2013/05/01/sql-server-finding-tcp-port-number-sql-instance-is-listening-on/

【讨论】:

为我工作。我尝试了 TCP/IP 属性 od SQL Native Client Configuration 并且返回默认值 1433。但是当我从 SQL Server 网络配置中检查 TCP 动态端口时。我发现端口是 67244。之后我能够成功连接到该端口。 +1【参考方案4】:

我遇到了这个问题,因为我只是在创建远程连接时遇到了问题,并且无法理解为什么在防火墙中设置 1433 端口不起作用。我现在终于有了全貌,所以我想我应该分享一下。

首先必须使用 SQLEXPRESS 协议下的 SQL Server 配置管理器启用“TCP/IP”!

当使用命名实例(本例中为“SQLExpress”)时,它将侦听动态端口。要找到这个动态端口,您有几个选择;仅举几例:

检查位于'MS SQL Server Path\MS SQL Server instance name\MSSQL\Log' 的SQL Server 的ERRORLOG(在里面你会发现类似这样的一行:"2013-07-25 10:30:36.83 Server Server is listening on [ 'any' <ipv4> 51118]" --> 所以在这种情况下51118 是动态端口。

检查注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL instance name\MSSQLServer\SuperSocketNetLib\Tcp\IPAll,就我而言是TcpDynamicPorts=51118

编辑MSSQL instance name类似于:MSSQL10_50.SQLEXPRESS,不仅仅是SQLEXPRESS

当然,在防火墙中允许这个 TCP 端口并通过传入:"x.x.x.x,51118"(其中 x.x.x.x 是服务器 ip)创建远程连接已经解决了这个问题。

但后来我想通过传入实例名称来远程连接(例如:x.x.x.x\SQLExpress)。这就是 SQL Browser 服务发挥作用的时候。这是将实例名称解析为 51118 端口的单元。 SQL Browser 服务侦听 UDP 端口 1434(标准和静态),因此我必须在服务器的防火墙中也允许这样做。

扩展一点实际的答案:如果其他人不喜欢动态端口并且想要为他的 SQL Server 实例使用静态端口,应该试试这个link。

【讨论】:

+1 用于 SQL 浏览器服务。这是 SQL Express 如何处理端口号的关键【参考方案5】:

在 ERROLOG 日志中有如下一行。如果您没有看到它,说明 SQL Server 没有启用远程访问,或者它只是没有通过 TCP。您可以通过 SQL Server 配置管理器更改此设置。

Server is listening on [ 192.128.3.2 <ipv4> 1433].

【讨论】:

我没有看到该日志,但在 SQL Server Management Studio 上的“允许远程连接到此服务器”的连接下已选中。因此,我的理解是允许远程连接。 @royal:除了“允许远程连接”之外,您还必须启用 TCP 协议。现在服务器可能只在监听 NP 查看下面来自@morteza 的答案以通过SQL 查询xp_readerrorlog 0, 1, N'Server is listening on'阅读日志【参考方案6】:

试试这个(需要访问sys.dm_exec_connections):

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL

【讨论】:

仅供参考:如果 SQL 服务器没有打开的连接,它可能不会显示任何内容。【参考方案7】:

我通过使用 SQLEXPRESS2008 协议下的 SQL Server 配置管理器启用 TCP/IP 解决了这个问题,我重新启动了服务,现在“服务器正在侦听”出现在 ERRORLOG 文件中

【讨论】:

【参考方案8】:

我在 SSMS 中使用以下脚本

SELECT
     s.host_name
    ,c.local_net_address
    ,c.local_tcp_port
    ,s.login_name
    ,s.program_name
    ,c.session_id
    ,c.connect_time
    ,c.net_transport
    ,c.protocol_type
    ,c.encrypt_option
    ,c.client_net_address
    ,c.client_tcp_port
    ,s.client_interface_name
    ,s.host_process_id
    ,c.num_reads as num_reads_connection
    ,c.num_writes as num_writes_connection
    ,s.cpu_time
    ,s.reads as num_reads_sessions
    ,s.logical_reads as num_logical_reads_sessions
    ,s.writes as num_writes_sessions
    ,c.most_recent_sql_handle
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id

--filter port number
--WHERE c.local_tcp_port <> 1433

【讨论】:

不知道为什么这被否决了,它没有立即给出答案,但它给了你答案,而且还有更多。将此添加到我的有用查询列表中。 非常喜欢这个查询,如果没有打开/建立连接,它似乎也没有显示。【参考方案9】:
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on', 'any', NULL, NULL, N'asc' 
GO

[通过读取 SQL Server 错误日志识别 SQL Server 数据库引擎的命名实例使用的端口]

【讨论】:

感谢 Morteza 的好提示,我在 SQL2012 上使用上述内容时遇到错误,但以下内容足以满足我的需要:XP_READERRORLOG 0, 1, N'Server is thinking' 复制你的查询出错,但这有效,xp_readerrorlog 0, 1, N'Server is listening on'【参考方案10】:

您可以使用这两个命令:tasklistnetstat -oan

Tasklist.exe 类似于 taskmgr.exe,但在文本模式下。

使用tasklist.exetaskmgr.exe,您可以获得sqlservr.exe 的PID

netstat -oan,它显示一个连接PID,你可以过滤它。

例子:

C:\>tasklist | find /i "sqlservr.exe"
sqlservr.exe  1184 Services    0 3.181.800 KB

C:\>netstat -oan | find /i "1184"
TCP  0.0.0.0:1280  0.0.0.0:0  LISTENING  1184

在本例中,SQLServer 端口为 1280

摘自:http://www.sysadmit.com/2016/03/mssql-ver-puerto-de-una-instancia.html

【讨论】:

【参考方案11】:

这也可以通过端口扫描来完成,如果您没有远程服务器的管理员访问权限,这是唯一可能的方法。

使用 Nmap (http://nmap.org/zenmap/) 执行“密集 TCP 扫描”将为服务器上的所有实例提供如下结果:

[10.0.0.1\DATABASE]    
Instance name: DATABASE
Version: Microsoft SQL Server 2008 R2 RTM    
Product: Microsoft SQL Server 2008 R2    
Service pack level: RTM    
TCP port: 49843    
Named pipe: \\10.0.0.1\pipe\MSSQL$DATABASE\sql\query

重要提示:要使用查询分析器或 MS SQL Server Management Studio 进行测试,您的服务器名称和端口必须不同于通常通过 HTTP 连接到端口的方式,使用逗号而不是冒号

Management Studio 服务器名称:10.0.0.1,49843 连接字符串:Data Source=10.0.0.1,49843

然而

JDBC 连接字符串:jdbc:microsoft:sqlserver://10.0.0.1:49843;DatabaseName=DATABASE

【讨论】:

【参考方案12】:

This 适用于 SQL Server 2005 - 2012。在应用程序下的错误日志中查找事件 id = 26022。这将显示sql server的端口号以及允许访问的ip地址。

【讨论】:

【参考方案13】:

除了上面列出的内容之外,我还必须启用 TCP 和 UDP 端口,以便 SQLExpress 进行远程连接。因为我的开发机器上有三个不同的实例,所以我为 TCP 和 UDP 启用了1430-1435

【讨论】:

以上是关于如何找到 MS SQL Server 2008 的端口?的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server 2008 迁移到 MS access 2007

在 MS SQL Server 2008 的 Pivot 中计算水平总计

获取 MS SQL Server 2008 的连接字符串

MS SQL Server该如何入门呢

ms sql2012 能否安装在win2008 server

如何在 SQL Server 2008 中恢复 SQL Server 2014 备份