Назад | Перейти на главную страницу

localdb RESTORE SQL работает на моем компьютере с Win 10, но не на моем агенте конвейера Azure.

У меня есть конвейер Azure, который отказывается запускать мои интеграционные тесты (ну, перед запуском тестов он должен создать необходимые базы данных из файлов .bak - и это та часть, которая дает сбой)

Этот SQL вызывается как часть моего MSTest ClassInitialize рутина:

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'

Вышеупомянутое вызывается при подключении к «основной» базе данных (localdb)\MSSQLLocal сервер. Опять же, «работает на моем компьютере» с Visual Studio 2019. Но не работает ни с одним из этих агентов Azure: windows-2019 и vs2017-win2016


Дополнительные сведения - фрагмент журнала агента 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..

Теперь драгоценность, похороненная в приведенном выше сообщении журнала: Cannot create more than one clustered index on table 'dbo.sysschemaarticles'. Drop the existing clustered index 'PK_dbo.sysschemaarticles' before creating another

Прежде чем я углублюсь в то, как это сделать, может ли кто-нибудь указать мне направление почему это работает на моем компьютере с Windows 10, но не на моем агенте конвейера Azure? Мне кажется, что это разница в версиях SQL "localdb".

В итоге я поставил try{...}catch{..} вокруг моего .NET-кода, ответственного за взорванный оператор SQL.

Уловка специфична для System.Data.SqlClient.SqlException ошибка

В уловке я выполняю этот SQL:

"ALTER DATABASE saleslogix_full SET ONLINE"

И все мои интеграционные тесты, похоже, проходят против базы данных