Contexto
Tenho um script powershell que executa alguma configuração para um aplicativo em um ambiente de teste. Entre outras coisas, o script chama sqlcmd
várias vezes.
Alguns dias atrás, realizei uma restauração no banco de dados. Usei o SQL Server Management Studio 20.2 para restaurar um arquivo BAK para uma instância local do Microsoft SQL Server 2022 (todas as informações da versão abaixo). Fiz isso usando o assistente SSMS Restore Database com WITH REPLACE
, WITH_RESTRICTED_USER
e fechando as conexões existentes com o banco de dados.
Então, tentei executar meu script de configuração contra esse banco de dados recém-restaurado, como já fiz com sucesso centenas de vezes antes. O script começa garantindo que o sqlcmd esteja instalado e atualizado:
winget install sqlcmd
Em seguida, ele executa comandos no seguinte formato, onde $Server é .\sqlexpress
e $Database pode variar (portanto, não parece ser um problema específico do banco de dados):
sqlcmd -S $Server -d $Database -E -Q "ALTER DATABASE..."
Não especifico se devo usar TCP ou pipes nomeados - apenas deixo usar o padrão.
Problema
Normalmente, cada sqlcmd termina em menos de um segundo e gera algo como Commands completed successfully.
ou (7653 rows affected)
, mas, em vez disso, após cerca de 45 segundos, recebo a seguinte saída para cada comando (NB: a mesma linha é repetida duas vezes para uma única invocação do comando):
Timed out waiting for pipe '\\.\pipe\SQLLocal\sqlexpress' to come available
Timed out waiting for pipe '\\.\pipe\SQLLocal\sqlexpress' to come available
O que eu tentei
Além das verificações óbvias (instância do servidor SQL em execução, detalhes de conexão corretos, etc.), tentei:
- Restaurar o banco de dados novamente e fechar novamente todas as conexões existentes para garantir que pelo menos 1 conexão esteja disponível
- Reiniciando a instância do servidor SQL
- Reiniciando a máquina inteira
Tentei executar cada consulta SQL "manualmente" no SSMS, e nenhuma delas relatou erros e observou-se que tiveram o efeito desejado. No entanto, esse processo demora muito, sendo necessário copiar cada consulta e substituir nas variáveis, retornando ao PowerShell de vez em quando para executar comandos não SQL.
Questões)
O que aconteceu para causar o tempo limite do sqlcmd e o que posso alterar para garantir que ele possa ser executado como deveria/costumava ser?
Informações da versão
Informações sobre a versão do 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
Servidor 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)
Extrair do 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