SqlPackage.exe база данных экспорта / импорта
После миграции Azure в базу данных для предварительного просмотра V12 с помощью SqlPackage.exe для экспорта и импорта БД на локальную машину я получаю сообщение об ошибке:
Error SQL72014: .Net SqlClient Data Provider: Msg 2760, Level 16, State 1, Line 1
The specified schema name "sys" either does not exist or you do not have permission to use it.
Error SQL72045: Script execution error. The executed script:
CREATE TYPE [sys].[script_deployment_databases] AS TABLE (
[logical_server] [sysname] NOT NULL,
[database_name] [sysname] NOT NULL,
UNIQUE NONCLUSTERED ([database_name] ASC, [logical_server] ASC));
На самом деле в Management Studio есть тип пользовательской таблицы, который нельзя удалить.
Как решить?
Я попытался экспортировать со всеми параметрами, используя этот скрипт.
2 ответа
У других людей эта проблема возникла недавно (ссылка).
Проблема заключалась в том, что миграция Microsoft некоторых баз данных случайно создала "ошибочный объект" sys.script_deployment_databases
: определение типа таблицы, которое использует схему sys, но помечено метаданными is_user_defined = 1
, Тот факт, что он "определен пользователем", заставляет bacpacs содержать его. Попытки восстановить bacpac не удаются, потому что он пытается создать его под sys.
Microsoft недавно обновила свои инструменты DacFx и SSDT (а также портал Azure), чтобы, очевидно, игнорировать этот ошибочный объект при экспорте / импорте bacpac.
На заметку по теме: Развертывание dacpac для обновления такой поврежденной базы данных имеет аналогичную проблему, когда при попытке развертывания он пытается отбросить и заново создать все "определяемые пользователем типы таблиц" и завершается неудачно, потому что script_deployment_databases
находится под системой. Тем не менее, в настоящее время инструмент не был исправлен для dacpacs.
Одна техника, чтобы удалить script_deployment_databases
Объект должен скопировать базу данных напрямую, используя CREATE DATABASE [X] AS COPY OF [Y]
, затем переименуйте их так, чтобы копия заменяла оригинал. Объект, по-видимому, опущен из копий.
Решением является установка обновления для платформы приложений уровня данных Microsoft SQL Server. Это можно найти здесь
Нить и ответ от Microsoft можно найти по следующей ссылке
Вот ответ Рауля Гарсии - MS:
Обновление (по состоянию на 2015-март-2):
Внедрены исправления для экспорта и импорта bacpac с сервера базы данных SQL Azure, обновленной до версии V12. Вы сможете успешно экспортировать / импортировать через портал Azure, и вы можете установить эту обновленную версию DacFx для экспорта / импорта через SSMS, SSDT, SqlPackage.exe или DacFx API.
http://www.microsoft.com/en-us/download/details.aspx?id=45886
(Примечание. Необходимо установить ОБА версии MSI для x64 и x86, если вы работаете на компьютере с архитектурой x64.)
Спасибо за терпеливость. Рауль Гарсия