语境
我有一个 powershell 脚本,用于在测试环境中为应用程序执行一些设置。除其他外,该脚本调用了sqlcmd
多次。
几天前,我对数据库进行了还原。我使用 SQL Server Management Studio 20.2 将 BAK 文件还原到本地 Microsoft SQL Server 2022 实例(以下所有版本信息)。我使用 SSMS 还原数据库向导,使用 、 并关闭与数据库的现有连接来执行此WITH REPLACE
操作WITH_RESTRICTED_USER
。
然后,我尝试针对这个刚刚恢复的数据库运行配置脚本,就像我之前成功做过一百次一样。脚本首先确保 sqlcmd 已安装且为最新版本:
winget install sqlcmd
接下来,它执行以下格式的命令,其中 $Server 是.\sqlexpress
而 $Database 可能有所不同(因此它似乎不是数据库特定的问题):
sqlcmd -S $Server -d $Database -E -Q "ALTER DATABASE..."
我没有指定是否使用 TCP 还是命名管道 - 我只是让它使用默认值。
问题
通常,每个 sqlcmd 都会在一秒内完成并输出类似于Commands completed successfully.
或 的内容(7653 rows affected)
,但是,大约 45 秒后,我得到了每个命令的以下输出(注意:在一次命令调用中同一行会重复两次):
Timed out waiting for pipe '\\.\pipe\SQLLocal\sqlexpress' to come available
Timed out waiting for pipe '\\.\pipe\SQLLocal\sqlexpress' to come available
我尝试过的方法
除了明显的验证(SQL 服务器实例正在运行、连接详细信息正确等)之外,我还尝试过:
- 再次恢复数据库,并再次关闭所有现有连接,以确保至少有一个连接可用
- 重新启动 SQL 服务器实例
- 重新启动整个机器
我尝试在 SSMS 中“手动”运行每个 SQL 查询,并且每个查询都没有报告错误并且观察到具有预期的效果,但是这个过程需要很长时间,必须复制出每个查询并替换变量,并时不时切换回 powershell 来运行非 SQL 命令。
问题)
发生了什么导致 sqlcmd 超时,我可以进行哪些更改以确保它能够按预期/习惯运行?
版本信息
SSMS 版本信息:
SQL Server Management Studio 20.2.30.0
SQL Server Management Objects (SMO) 17.100.40.0+f57178c95d4376485d3f597f2b829bbd6f80fd6f
Microsoft T-SQL Parser 17.2.3.1+46115224c373754fdd41516eaae1386cabc4819e.46115224c373754fdd41516eaae1386cabc4819e
Microsoft Analysis Services Client Tools 20.0.3.0
Microsoft Data SqlClient (MDS) 5.1.5
Microsoft SQL Server Data-Tier Application Framework (DacFX) 162.3.566.1+89d89fe935702c8836ebaf6a03cf61b85118f847.89d89fe935702c8836ebaf6a03cf61b85118f847
Microsoft .NET Framework 4.0.30319.42000
Operating System 10.0.22631
SQL 服务器 ( SELECT @@VERSION
):
Microsoft SQL Server 2022 (RTM-GDR) (KB5046861) - 16.0.1135.2 (X64) Oct 18 2024 15:31:58 Copyright (C) 2022 Microsoft Corporation Express Edition (64-bit) on Windows 10 Enterprise 10.0 <X64> (Build 22631: ) (Hypervisor)
从 Windows 中提取systeminfo
:
OS Name: Microsoft Windows 11 Enterprise
OS Version: 10.0.22631 N/A Build 22631
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Workstation
OS Build Type: Multiprocessor Free
我设法通过手动启用 SQL Server Browser 服务来解决这个问题。