Azure中SQL Server 2017重启后,是否有PowerShell函数实现自动重连?
自动化Azure SQL Server虚拟机重启后的数据库重连流程
你提到虚拟机自动重启后无需手动操作、等待一段时间数据库就会自动上线重连,这其实是SQL Server的默认行为——只要SQL Server服务设置为自动启动,虚拟机重启后服务会自动启动,数据库也会随之完成恢复并上线,这个过程的耗时取决于数据库大小和恢复逻辑,一般几分钟内就能完成。
如果需要主动验证连接状态,或者在某些特殊场景下主动触发连接检查,这里提供一个实用的PowerShell函数Reconnect-SQLServer:
function Reconnect-SQLServer { param( [Parameter(Mandatory=$true)] [string]$ServerInstance, [int]$RetryCount = 5, [int]$RetryIntervalSeconds = 30 ) $attempt = 0 $connected = $false while ($attempt -lt $RetryCount -and -not $connected) { try { # 尝试建立SQL连接 $connectionString = "Server=$ServerInstance;Integrated Security=True;Connection Timeout=10" $connection = New-Object System.Data.SqlClient.SqlConnection($connectionString) $connection.Open() if ($connection.State -eq 'Open') { Write-Host "成功连接到SQL Server实例: $ServerInstance" -ForegroundColor Green $connected = $true } $connection.Close() } catch { $attempt++ Write-Warning "连接失败(第$attempt次尝试): $_" if ($attempt -lt $RetryCount) { Write-Host "等待$RetryIntervalSeconds秒后重试..." -ForegroundColor Cyan Start-Sleep -Seconds $RetryIntervalSeconds } } } if (-not $connected) { Write-Error "经过$RetryCount次尝试后,仍无法连接到SQL Server实例: $ServerInstance" } }
使用说明
- 可以直接在Azure虚拟机的PowerShell窗口中定义该函数,或者将代码保存为
.ps1脚本文件执行 - 调用示例:
参数说明:# 连接默认实例 Reconnect-SQLServer -ServerInstance "localhost" # 带重试参数连接命名实例 Reconnect-SQLServer -ServerInstance "localhost\MSSQLSERVER2017" -RetryCount 6 -RetryIntervalSeconds 20ServerInstance:必填,SQL Server实例名称(默认实例填localhost即可)RetryCount:可选,最大重试次数,默认5次RetryIntervalSeconds:可选,每次重试的间隔秒数,默认30秒
额外提示
- 确认SQL Server服务启动类型:打开服务管理器,找到SQL Server (MSSQLSERVER),确保启动类型设置为自动,这是虚拟机重启后服务自动启动的前提
- 查看恢复进度:如果想确认数据库恢复状态,可以打开SQL Server错误日志,里面会记录数据库恢复的详细过程
- 自动执行脚本:如果需要虚拟机重启后自动运行该检查脚本,可以创建Windows任务计划,触发条件设为“系统启动时”,执行账户选择本地管理员账户
内容的提问来源于stack exchange,提问作者Nicholas Campa
相关产品推荐
相关产品推荐

