Невозможно импортировать SQL Azure BACPAC в 2016 CTP
Я очень хорошо знаком с процессом экспорта из Azure SQL V12 в мой компьютер dev, а затем импорта в мой локальный экземпляр sql (2014). Я раскручиваю новую коробку Win10 и установил SQL 2016 CTP. Я подключаюсь к тому же экземпляру Azure и могу работать с ним - и могу экспортировать.bacpac, как и в 2014 году.
Но когда я пытаюсь импортировать в локальную, я получаю:
Could not import package.
Warning SQL72012: The object [FOO33_Data] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box.
Warning SQL72012: The object [FOO33_Log] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box.
Error SQL72014: .Net SqlClient Data Provider: Msg 547, Level 16, State 0, Line 3 The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_dbo.Address_dbo.User_idUser". The conflict occurred in database "FOO33", table "dbo.User", column 'idUser'.
Error SQL72045: Script execution error. The executed script:
PRINT N'Checking constraint: FK_dbo.Address_dbo.User_idUser [dbo].[Address]';
ALTER TABLE [dbo].[Address] WITH CHECK CHECK CONSTRAINT [FK_dbo.Address_dbo.User_idUser];
1 ответ
Поскольку этот вопрос также задавали и отвечали на MSDN, я поделюсь здесь. https://social.msdn.microsoft.com/Forums/azure/en-US/0b025206-5ea4-4ecb-b475-c7fabdb6df64/cannot-import-sql-azure-bacpac-to-2016-ctp?forum=ssdsgetstarted
Текст из связанного ответа:
Я подозреваю, что здесь происходит что-то не то, что операция экспорта была выполнена с использованием экземпляра БД, который изменялся во время экспорта. Это может привести к тому, что экспортированные данные таблицы будут несовместимыми, поскольку, в отличие от физического резервного копирования и восстановления SQL Server, экспорт не гарантирует согласованность транзакций. Вместо этого они по сути выполняются путем подключения к каждой таблице в базе данных по очереди и запуска команды select *. Если связь между внешним ключом существует между двумя таблицами и данные таблицы считывания несовместимы, это приводит к ошибке во время импорта после того, как данные записаны в базу данных, а код импорта пытается повторно включить внешний ключ. Мы предлагаем использовать механизм копирования базы данных (создайте базу данных copyDb как копию originalDb), которая гарантирует копию с транзакционной согласованностью, а затем экспортирует из неизменяемой копии базы данных.