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

时间:2009-10-05 08:25:04

标签: sql-server sql-server-2008

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

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

14 个答案:

答案 0 :(得分:132)

单击Windows中的Start按钮。 转到All Programs -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager

点击SQL Native Client 10.0 Configuration -> Client Protocols -> TCP/IPProperties

上双击(右键单击选择TCP/IP

您会找到Default Port 1433

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

答案 1 :(得分:50)

您还可以使用

查看
netstat -abn

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

修改:或TCPView

答案 2 :(得分:47)

以下是我发现的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 Instance正在侦听的端口号,使用以下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)

方法1:SQL Server配置管理器

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

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

的协议

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

enter image description here

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

enter image description here

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

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

答案 3 :(得分:17)

我遇到这个是因为我在创建远程连接时遇到了问题,并且无法理解为什么在防火墙中设置1433端口无法正常工作。我现在终于完整了,所以我想我应该分享。

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

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

  • 检查位于ERRORLOG的SQL Server的'{MS SQL Server Path}\{MS SQL Server instance name}\MSSQL\Log'(在里面你会找到与此类似的行:"2013-07-25 10:30:36.83 Server Server is listening on [ 'any' <ipv4> 51118]" - &gt;所以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

答案 4 :(得分:11)

在ERROLOG日志中,如下所示。如果您没有看到SQL Server未启用远程访问,或者它不是通过TCP。您可以通过SQL Server配置管理器进行更改。

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

答案 5 :(得分:8)

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

答案 6 :(得分:8)

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

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

答案 7 :(得分:6)

USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on', 'any', NULL, NULL, N'asc' 
GO

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

答案 8 :(得分:6)

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

Tasklist.exetaskmgr.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

答案 9 :(得分:4)

我在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

答案 10 :(得分:4)

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

使用Nmap(http://nmap.org/zenmap/)进行强烈的TCP扫描&#34;将为您提供服务器上所有实例的结果:

[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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

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

答案 13 :(得分:0)

PS解决方案,将涵盖主机上的所有实例+将为您提供所有连接的客户端的所有地址,都很简洁:

ForEach ($SQL_Proc in Get-Process | Select-Object -Property ProcessName, Id | Where-Object {$_.ProcessName -like "*SQL*"})
{
    Get-NetTCPConnection | `
     Where-Object {$_.OwningProcess -eq $SQL_Proc.id} | `
      Select-Object -Property `
                                @{Label ="Process_Name";e={$SQL_Proc.ProcessName}}, `
                                @{Label ="Local_Address";e={$_.LocalAddress + ":" + $_.LocalPort }},  `
                                @{Label ="Remote_Address";e={$_.RemoteAddress + ":" + $_.RemotePort}}, State | `
      Format-Table
}