阿里云主机

万维景盛

万维景盛官网
Server TCP provider failed to listen on any . Tcp port is already in use. sql server数据库启动失败的解决方法

你在使用sql server数据库的时候,可能会遇到Server TCP provider failed to listen on any <ipv4> . Tcp port is already in use. 的报错,结果sql server数据库启动失败,这篇文章就为您分析Server TCP provider failed to listen on any <ipv4> . Tcp port is already in use. sql server数据库启动失败的原因并提供解决方法。


你知道在维护之前没有服务使用你的端口,那么这里发生了什么,你如何找出谁在使用 SQL 的端口?


有两种情况会导致此错误消息。 首先,最明显的情况是在使用与 SQL Server 相同的 TCP 端口的服务器上运行的另一个服务或应用程序。 在上面的例子中,就是 tcp/1433。 您可以通过运行快速检查哪个进程正在使用该端口


来自 SysInternals 的 tcpview.exe

PowerShell 脚本

网络统计

下面列出了每种方法的示例。 为了重现这种情况,我停止了 SQL Server 并通过侦听 tcp/1433 的 PowerShell_ISE 运行了一个 PowerShell 脚本。

cls
$tcpPort = "1433"
$tcpConn = Get-NetTCPConnection | Where-Object {$_.LocalPort -eq $tcpPort -or $_.RemotePort -eq $tcpPort}
$tcpConn
$process = $tcpConn | Select-Object OwningProcess -Unique
if ($process -ne $null)
{
    Get-Process | Where-Object {$_.id -eq $process.OwningProcess} | Select-Object Id, ProcessName
}
else
{
    write-output "No services found using that port"
}

NetStat

netstat -p tcp -o -a -n 

TCPView 


好消息是,这种情况很容易解决——确定该应用程序的所有者,然后阻止它运行(杀死它/停止服务等)或更改它侦听的端口。 还有其他方法可以处理这种情况,但我不推荐在星期六凌晨 3 点。


第二种情况涉及在服务器上运行的客户端使用与 SQL Server 相同的动态端口。 每个 TCP 会话都需要两个端点——一个客户端端点和一个服务器端点。 每个端点都是一个 IP 地址/端口组合 - 也称为 TCP 套接字。 通常,客户端套接字代码会要求操作系统提供一系列动态端口中的一个端口。 服务器套接字是客户端连接到的服务的 IP/TCP 端口(例如 SQL Server)。 为了说明这一点,请参见下图。 ssms.exe 的客户端端口是 11559 和 11560(两个活动的 TCP 会话)。 远程端口或 SQL Server 端口为 1433。


那么,您如何了解操作系统使用的动态端口范围呢? 只需在 Windows 命令提示符下运行 netsh int ipv4 show dynamicportrange tcp。


这是我的 Windows 10 机器的输出

这意味着从操作系统请求客户端端口的客户端将获得 1025 到 65534 范围内的空闲端口。如您所见,1433 在该范围内,因此如果您碰巧有一个客户端(想想 Windows 操作系统系统服务 ) 在 SQL Server 启动之前启动,它可以将 TCP/1433 用于其客户端套接字。 我个人曾多次遇到这种情况。 这里最大的挑战是,如果它涉及系统服务,你不能停止服务,启动 SQL 并继续你的快乐方式。 您必须重新启动并希望这种情况不会在重新启动后发生。 通过同一台机器 L 的三次重新启动,我也遇到过这种情况。


那么,您如何解决和防止这种情况发生呢? 操作系统中还有另一个功能,允许您告诉操作系统动态端口范围中应该排除的 TCP 端口。 再次点击 Windows 命令提示符并执行 netsh int ipv4 show excludedportrange tcp。 这是我的 Windows 10 机器的输出

您会看到已经排除了一些端口范围。 这些是默认排除的系统服务——例如,47001 是 WinRM。 所需要做的就是使用管理命令提示符 netsh int ipv4 add excludedportrange tcp startport=1433 numberofports=1 store=persistent 运行以下命令。 运行此命令后,您将看到以下排除的端口

进行该设置后,操作系统将不会为任何客户端提供该端口。 服务仍然可以监听它,但是当向操作系统请求动态端口时,您可以阻止客户端获取它。 我强烈建议您将此合并到您的服务器加载过程中以防止出现此问题。


如果您不想自己维护服务器,可以通过万维景盛租用sql server数据库,您可以获得省心的服务。您也可以通过万维景盛采购阿里云服务器,获得更好的折扣。联系QQ/微信:442956988


< 购物车 > 会员 客服 充值 工单
Top

客服热线

010-80253326

18610695105

客服QQ

请拨总机 010-80253326

咨询售后问题建议 提交工单