Eu tenho um pipeline do Azure que se recusa a executar meus testes de integração (bem, antes de executar os testes, ele deve criar os bancos de dados necessários a partir de arquivos .bak - e essa é a parte que está falhando)
Este SQL está sendo invocado como parte da minha ClassInitialize
rotina MSTest:
IF DB_ID('saleslogix_full') IS NOT NULL
BEGIN
ALTER DATABASE [saleslogix_full] SET SINGLE_USER WITH
ROLLBACK IMMEDIATE;
DROP DATABASE [saleslogix_full];
END
restore database saleslogix_full
from disk = 'C:\x\y\z\data-snapshots\saleslogix_full.bak' with Recovery,
move 'saleslogix_full' to 'C:\x\y\z\saleslogix_full.mdf',
move 'saleslogix_full_log' to 'C:\x\y\z\saleslogix_full_log.ldf'
O acima é invocado conectando-se ao banco de dados 'mestre' do (localdb)\MSSQLLocal
servidor. Novamente, "funciona na minha máquina" executando o Visual Studio 2019. Mas não funciona em nenhum desses agentes do Azure: windows-2019
evs2017-win2016
Detalhes adicionais – Snippet de log do agente do Azure
A total of 6 test files matched the specified pattern.
X SeededSuccessfully_SalesforceIntegration
Error Message:
Class Initialization method MyCorp.Data.ReplicationWorker.Tests.Test1.ClassInit threw exception. System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException: Cannot create more than one clustered index on table 'dbo.sysschemaarticles'. Drop the existing clustered index 'PK_dbo.sysschemaarticles' before creating another.
Database 'saleslogix_full' was restored, however an error was encountered while replication was being restored/removed. The database has been left offline. See the topic MSSQL_ENG003165 in SQL Server Books Online.
RESTORE DATABASE is terminating abnormally.
Processed 1120 pages for database 'saleslogix_full', file 'saleslogix_full' on file 1.
Processed 2 pages for database 'saleslogix_full', file 'saleslogix_full_log' on file 1..
Agora a joia enterrada na mensagem de log acima é:
Cannot create more than one clustered index on table 'dbo.sysschemaarticles'. Drop the existing clustered index 'PK_dbo.sysschemaarticles' before creating another
Antes de me aprofundar em como fazer isso, alguém pode me indicar uma direção parapor que isso funciona na minha caixa do Windows 10, mas não no meu agente de pipeline do Azure?Meu instinto inicial é dizer que há uma diferença nas edições SQL "localdb"
Responder1
Acabei colocando try{...}catch{..}
em torno do meu código .NET que era responsável pela instrução SQL de bombardeio.
A captura é específica para um System.Data.SqlClient.SqlException
erro
Dentro do catch, executo esse SQL:
"ALTER DATABASE saleslogix_full SET ONLINE"
E todos os meus testes de integração parecem passar no banco de dados