Как извлечь базу данных MSSQLServer как.dacpac без VerifyExtraction?
Я хочу извлечь схему базы данных базы данных MSSQLServer с помощью Server Management Studio. Я использую команду "Извлечь приложение уровня данных.."
В базе данных есть несколько ссылок на другую базу данных. Из-за этого я получаю следующую ошибку.
Ошибка извлечения базы данных: проверка модели схемы для пакета данных не удалась. Ошибка SQL71562: Ошибка проверки элемента [dbo].[X] содержит неразрешенную ссылку на объект [dbo].[Y]. Внешние ссылки не поддерживаются при создании пакета с этой платформы.
Проблема в том, что SSMS использует SQLPackage.exe с параметром / p: VerifyExtraction = True. Когда я использую консоль и вызываю SQLPackage.exe без этого параметра, он по умолчанию использует /p:VerifyExtraction=False, и я могу создать файл.dacpac.
Есть ли способ настроить SSMS для отключения проверки?
2 ответа
Я также не смог найти метод, который работает в SSMS (2008 R2 или 2012), но Visual Studio (2013) с SSDT, похоже, работает: в VS перейдите в обозреватель объектов SQL Server, подключитесь к рассматриваемому серверу щелкните правой кнопкой мыши соответствующую базу данных, Извлеките приложение уровня данных, а затем настройте параметры извлечения, одним из которых является "Подтвердить извлечение". Я не знаю, почему MS не просто встраивает это в SSMS.
Однако я заметил одну странную вещь, заключающуюся в том, что VS будет извлекать.DacPac только с помощью этого метода. Даже если вы решите добавить данные в извлечение, расширение все равно будет.DacPac. У меня сложилось впечатление, что.DacPacs предназначены исключительно для Schema Only, а.BacPacs - для Schema + Data. В любом случае, после того, как VS создал файл.DacPac (схема + данные), SSMS смог нормально его импортировать с помощью мастера "Развернуть приложение уровня данных...".
Если вы не можете использовать Visual Studio, вы можете использовать командную строку SqlPackage
приложение для извлечения схемы из базы данных. По умолчанию это не проверяет схему (нет, я не знаю, почему SSMS и предложение командной строки имеют разные значения по умолчанию!). SqlPackage.exe
можно найти в C:\Program Files (x86)\Microsoft SQL Server\<SQL_VERSION>\DAC\bin
,
Например, следующее извлекает схему для MyDatabase
из локального экземпляра SQL Server и выводит его в .dacpac
файл в локальной файловой системе:
sqlpackage /Action:Extract /SourceDatabaseName:"MyDatabase" /SourceServerName:localhost /TargetFile:"C:\SomeDirectory\MyDatabase.dacpac"
Если вы хотите включить проверку схемы на более позднем этапе, вы можете установить флаг явно, добавив /p:VerifyExtraction=True
в командной строке.
Полная информация о SqlPackage.exe
можно найти здесь: