Поделиться через


Использование MSDeploy с поставщиком dbSqlPackage

 

DbSqlPackage — это поставщик MSDeploy, который обеспечивает взаимодействие с базами данных SQL Server и SQL Azure.DbSqlPackage поддерживает следующие действия.

  • Извлечение: создает файл моментального снимка базы данных (DACPAC) из активной базы данных SQL Server или SQL Azure.

  • Публикация: выполняет добавочное обновление схемы базы данных в соответствии со схемой исходного DACPAC-файла.

  • DeployReport: создает отчет в формате XML по изменениям, которые должны быть внесены в результате публикации.

  • Скрипт: создает скрипт Transact-SQL, эквивалентный скрипту, который выполняется действием публикации.

Дополнительные сведения относительно DACFx см. в документации по API, управляемых DACFx, по адресу https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dac.aspx или SqlPackage.exe (средство командной строки DACFx).

Важно!


Компонент поставщика dbSqlPackage будет удален из следующей основной версии Visual Studio.Сведения о выполнении публикации базы данных с помощью с веб-развертывания см. в статье Поставщик dbDacFx для добавочной публикации базы данных.

Синтаксис командной строки

Программа MSDeploy с поставщиком dbSqlPackage использует командную строку в следующем формате.

  
MSDeploy –verb: MSDeploy-verb –source:dbSqlPackage="Input"[,dbSqlPackage-source-parameters] –dest:dpSqlPackage="Input"[,dbSqlPackage-target-parameters]  

Команды MS-Deploy

Команды MS-Deploy задаются с помощью параметра –verb в командной строке MS-Deploy.Поставщик dbSqlPackage поддерживает следующие команды MSDeploy.

Команда Описание
дамп Предоставляет сведения, включая имя, номер версии и описание базы данных-источника, содержащиеся в DACPAC-файле.Укажите базу данных-источник, используя следующий формат командной строки:

msdeploy –verb:dump –source:dbSqlPackage=”.dacpac-file-path
sync Задает действия dbSqlPackage, используя следующий формат командной строки:

msdeploy –verb:sync –source:dbSqlPackage=”input” [,DbSqlPackage-source-parameters] -dest:dbSqlPackage=”input” [,DbSqlPackage-destination-parameters]

Допустимые параметры источника и назначения для команды синхронизации см. в следующих разделах.

База данных-источник dbSqlPackage

Поставщик dbSqlPackage принимает либо допустимую строку подключения SQL Server/SQL Azure или путь к DACPAC-файлу на диске.Синтаксис задания входного источника для поставщика:

Ввод По умолчанию Описание
-source:dbSqlPackage={input} N/A input — допустимая строка подключения SQL Server или SQL Azure либо путь к DACPAC-файлу на диске. Note: При использовании строки подключения в качестве источника ввода поддерживаются только свойства строки подключения InitialCatalog, DataSource, UserID, Password, IntegratedSecurity, Encrypt, TrustServerCertificate и ConnectionTimeout.

Если источником ввода является строка подключения к активной базе данных SQL Server/SQL Azure, dbSqlPackage извлекает моментальный снимок базы данных в виде DACPAC-файла из активной базы данных SQL Server/SQL Azure.

Параметры Source:

Параметр По умолчанию Описание
Profile:{ string} Неприменимо Указывает путь к файлу приложения уровня данных профиля публикации.Профиль определяет коллекцию свойств и переменных, которые должны использоваться при формировании результирующего DACPAC-файла.Профиль публикации передается в базу данных назначения и используется в качестве параметров по умолчанию при выполнении действия Publish, Script или DeployReport.
DacApplicationName={ string } Имя базы данных Определяет имя приложения для сохранения в метаданных DACPAC.Строкой по умолчанию является имя базы данных.
DacMajorVersion ={integer} 1 Определяет основную версию для сохранения в метаданных DACPAC.
DacMinorVersion={integer} 0 Определяет дополнительный номер версии для сохранения в метаданных DACPAC.
DacApplicationDescription={ string } Неприменимо Определяет описание приложения для сохранения в метаданных DACPAC.
ExtractApplicationScopedObjectsOnly={True | False} True Если задано значение True, то из источника извлекаются только объекты в области приложения.Если задано значение False, извлекаются как объекты в области приложения, так и объекты вне этой области.
ExtractReferencedServerScopedElements={True | False} True Если задано значение True, извлекаются имя входа, аудит сервера и объекты учетных данных, на которые ссылаются объекты базы данных-источника.
ExtractIgnorePermissions={True | False} False Если задано значение True, пропускается извлечение разрешений для всех извлеченных объектов. Если задано значение False — извлечение разрешений не пропускается.
ExtractStorage={File|Memory} File Указывает тип резервного хранилища для модели схемы, используемой во время извлечения.
ExtractIgnoreExtendedProperties={True|False} False Указывает, следует ли пропускать расширенные свойства.
VerifyExtraction = {True|False} False Указывает, следует ли проверять извлеченный DACPAC-файл.

Целевая база данных dbSqlPackage

Поставщик dbSqlPackage в качестве ввода целевой базы данных принимает допустимую строку подключения SQL Server/SQL Azure или путь к DACPAC-файлу на диске.Синтаксис задания целевой базы данных для поставщика:

Ввод По умолчанию Описание
-dest:dbSqlPackage={input} Неприменимо input — допустимая строка подключения SQL Server или SQL Azure либо полный или частичный путь к DACPAC-файлу на диске.Если input представляет собой путь к файлу, другие параметры задать невозможно.

Следующие параметры Destination доступны для всех операций dbSqlPackage:

Свойство По умолчанию Описание
Action={Publish|DeployReport|Script} Неприменимо Необязательные параметры, определяющие действие, которое выполняется на Destination.
AllowDropBlockingAssemblies ={True | False} False Указывает, будет ли публикация SqlClr удалять блокирующие сборки в процессе выполнения плана развертывания.По умолчанию все блокирующие и ссылочные сборки препятствуют обновлению сборки, если необходимо удалить ссылочную сборку.
AllowIncompatiblePlatform={True | False} False Указывает, должно ли продолжаться выполнение действия публикации, несмотря на потенциальную несовместимость платформ SQL Server.
BackupDatabaseBeforeChanges={True | False} False Создает резервную копию базы данных перед развертыванием любых изменений.
BlockOnPossibleDataLoss={ True | False} True Указывает, прекращается ли эпизод публикации, если операция публикации может вызвать потерю данных.
BlockWhenDriftDetected={ True | False} True Указывает, следует ли блокировать обновление базы данных, схема которой больше не соответствует регистрации или регистрация которой удалена.
CommentOutSetVarDeclarations= {True | False} False Указывает, будут ли объявления переменных SETVAR закомментированы в созданном скрипте публикации.Эту возможность можно выбрать, если планируется задавать значения в командной строке программы SQLCMD.exe во время публикации.
CompareUsingTargetCollation={ True | False} False Этот параметр указывает, как обрабатываются параметры сортировки базы данных во время развертывания. По умолчанию параметры сортировки целевой базы данных обновляются, если они не совпадают с параметрами сортировки, указанными источником.Если задан этот параметр, использоваться будут параметры сортировки целевой базы данных (или сервера).
CreateNewDatabase={ True | False} False Указывает, обновляется ли целевая база данных, или ее нужно удалить и создать заново при публикации базы данных.
DeployDatabaseInSingleUserMode={ True | False} False Если указано True, то перед развертыванием база данных будет переведена в однопользовательский режим.
DisableAndReenableDdlTriggers={True | False} True Указывает, следует ли отключить триггеры языка описания данных DDL в начале процесса публикации и включить их в конце.
DoNotAlterChangeDataCaptureObjects={ True | False} True Если указано True, объекты отслеживания измененных данных не меняются.
DoNotAlterReplicatedObjects=( True | False} True Указывает, определяются ли во время проверки реплицируемые объекты.
DropConstraintsNotInSource= {True | False} True Указывает, будут ли при выполнении публикации в целевой базе данных удалены ограничения, которые отсутствуют в моментальном снимке базы данных (DACPAC).
DropDmlTriggersNotInSource= {True | False} True Указывает, будут ли при выполнении публикации в целевой базе данных удалены триггеры языка обработки данных DML, которые отсутствуют в моментальном снимке базы данных (DACPAC).
DropExtendedPropertiesNotInSource= {True | False} True Указывает, будут ли при выполнении публикации в целевой базе данных удалены расширенные свойства, которые отсутствуют в моментальном снимке базы данных (DACPAC).
DropIndexesNotInSource= {True | False} True Указывает, будут ли при выполнении публикации в целевой базе данных удалены индексы, которые отсутствуют в моментальном снимке базы данных (DACPAC).
DropObjectsNotInSource= {True | False} False Указывает, будут ли объекты, которые отсутствуют в моментальном снимке базы данных (DACPAC), удалены из целевой базы данных при выполнении публикации.
DropPermissionsNotInSource= {True | False} False Указывает, будут ли при выполнении публикации в целевой базе данных удалены разрешения, которые отсутствуют в моментальном снимке базы данных (DACPAC).
DropRoleMembersNotInSource= {True | False} False Указывает, будут ли при выполнении публикации в целевой базе данных удалены члены ролей, которые отсутствуют в моментальном снимке базы данных (DACPAC).
GenerateSmartDefaults={True | False} False Указывает, будет ли SqlPackage.exe определять значение по умолчанию автоматически при обновлении таблицы, содержащей данные со столбцом, который не допускает значения NULL.
IgnoreAnsiNulls= {True | False} False Указывает, следует ли пропускать или обновлять различия в параметре ANSI NULLS во время публикации в базе данных.
IgnoreAuthorizer= {True | False} False Указывает, следует пропускать или обновлять различия в параметре Authorizer во время публикации в базе данных.
IgnoreColumnCollation= {True | False} False Указывает, следует пропускать или обновлять различия в параметрах сортировки столбца во время публикации в базе данных.
IgnoreComments= {True | False} False Указывает, следует пропускать или обновлять различия в порядке комментариев во время публикации в базе данных.
IgnoreCryptographicProviderFile= {True | False} True Указывает, следует пропускать или обновлять различия в пути файла для поставщика служб шифрования во время публикации в базе данных.
IgnoreDdlTriggerOrder= {True | False} False Указывает, следует пропускать или обновлять различия в порядке триггеров языка описания данных DDL во время публикации в базе данных.
IgnoreDdlTriggerState={True | False} False Указывает, следует ли пропускать или обновлять различия в состоянии (включен или отключен) триггеров DDL во время публикации в базе данных.
IgnoreDefaultSchema={True | False} False Указывает, следует пропускать или обновлять различия в схеме по умолчанию во время публикации в базе данных.
IgnoreDmlTriggerOrder= {True | False} False Указывает, следует пропускать или обновлять различия в порядке триггеров DML во время публикации в базе данных.
IgnoreDmlTriggerState= {True | False} False Указывает, следует ли пропускать или обновлять различия в состоянии (включен или отключен) триггеров DML во время публикации в базе данных.
IgnoreExtendedProperties= {True | False} False Указывает, следует пропускать или обновлять различия в расширенных свойствах во время публикации в базе данных.
IgnoreFileAndLogFilePath={True | False} True Указывает, следует пропускать или обновлять различия в путях файлов и журналов во время публикации в базе данных.
IgnoreFilegroupPlacement= {True | False} True Указывает, следует ли пропускать или обновлять различия в размещении FILEGROUP во время публикации в базе данных.
IgnoreFileSize= {True | False} True Указывает, следует пропускать или обновлять различия в размере файлов во время публикации в базе данных.
IgnoreFillFactor= {True | False} True Указывает, следует пропускать или обновлять различия в коэффициентах заполнения во время публикации в базе данных.
Свойство По умолчанию Описание
IgnoreFullTextCatalogFilePath= {True | False} True Указывает, следует пропускать или обновлять различия в путях к файлам полнотекстовых индексов и журналов во время публикации в базе данных.
IgnoreIdentitySeed= {True | False} False Указывает, следует пропускать или обновлять различия в начальных значениях для столбца идентификаторов во время публикации в базе данных.
IgnoreIncrement= {True | False} False Указывает, следует пропускать или обновлять различия в приращениях для столбца идентификаторов во время публикации в базе данных.
IgnoreIndexOptions ={True | False} False Указывает, следует пропускать или обновлять различия в параметрах индекса во время публикации в базе данных.
IgnoreIndexPadding= {True | False} True Указывает, следует пропускать или обновлять различия в разреженности индекса во время публикации в базе данных.
IgnoreKeywordCasing= {True | False} True Указывает, следует пропускать или обновлять различия в регистре ключевых слов во время публикации в базе данных.
IgnoreLockHintsOnIndexes= {True | False} False Указывает, следует пропускать или обновлять различия в указаниях блокировки для индексов во время публикации в базе данных.
IgnoreLoginSids= {True | False} True Указывает, следует пропускать или обновлять различия в идентификаторах безопасности (SID) во время публикации в базе данных.
IgnoreNotForReplication= {True | False} False Указывает, следует пропускать или обновлять различия в параметре «не для репликации» во время публикации в базе данных.
IgnoreObjectPlacementOnPartitionScheme= {True | False} True Указывает, следует пропускать или обновлять различия в размещении объектов в схеме секционирования во время публикации в базе данных.
IgnorePartitionSchemes= {True | False} False Указывает, следует пропускать или обновлять различия в функциях и схемах секционирования во время публикации в базе данных.
IgnorePermissions= {True | False} False Указывает, следует пропускать или обновлять различия в разрешениях во время публикации в базе данных.
IgnoreQuotedIdentifiers= {True | False} False Указывает, следует пропускать или обновлять различия в настройках идентификаторов, заключенных в кавычки, во время публикации в базе данных.
IgnoreRoleMembership={True | False} False Указывает, следует пропускать или обновлять различия в членстве в роли имен входа во время публикации в базе данных.
IgnoreRouteLifetime= {True | False} True Указывает, следует пропускать или обновлять различия в именах входа и членстве в роли во время публикации в базе данных.
IgnoreSemicolonBetweenState= {True | False} True Указывает, следует пропускать или обновлять различия в точках с запятой между инструкциями Transact-SQL во время публикации в базе данных.
IgnoreTableOptions= {True | False} False Указывает, следует пропускать или обновлять различия в параметрах таблицы во время публикации в базе данных.
IgnoreUserSettingsObjects= {True | False} False Указывает, следует пропускать или обновлять различия в параметрах настройки пользователей во время публикации в базе данных.
IgnoreWhitespace= {True | False} True Указывает, следует пропускать или обновлять различия в пробелах во время публикации в базе данных.
IgnoreWithNocheckOnCheckConstraints={True | False} False Указывает, следует ли пропускать или обновлять различия в значениях предложения WITH NOCHECK для проверочных ограничений во время публикации в базе данных.
IgnoreWithNocheckOnForeignKeys={True | False} False Указывает, следует ли пропускать или обновлять различия в значениях предложения WITH NOCHECK для внешних ключей во время публикации в базе данных.
IncludeCompositeObjects= {True | False} False Указывает, следует ли включать все составные элементы в единую операцию публикации.
IncludeTransactionalScripts={True | False} False Указывает, следует ли по возможности использовать транзакционные инструкции во время публикации в базе данных.
NoAlterStatementsToChangeClrTypes={True | False} False Указывает, что при публикации (при наличии различий) вместо выполнения инструкции ALTER ASSEMBLY сборка всегда должна удаляться и создаваться повторно.
PopulateFilesOnFilegroups= {True | False} True Указывает, создается ли новый файл при создании новой группы FileGroup в целевой базе данных.
RegisterDataTierApplication={True | False} False Указывает, регистрируется ли схема на сервере базы данных.
ScriptDatabaseCollation {True | False} False Указывает, следует пропускать или обновлять различия в параметрах сортировки базы данных во время публикации в базе данных.
ScriptDatabaseCompatibility= {True | False} True Указывает, следует пропускать или обновлять различия в совместимости базы данных во время публикации в базе данных.
ScriptDatabaseOptions= {True | False} True Указывает, следует задавать или обновлять свойства целевой базы данных во время публикации в базе данных.
ScriptFileSize={True | False} False Определяет, указывается ли размер при добавлении файла в файловую группу.
ScriptNewConstraintValidation= {True | False} True Указывает, следует ли проверять все ограничения как один набор в конце публикации, чтобы избежать ошибок данных, вызванных проверкой ограничений внешнего ключа в процессе выполнения публикации.Если этот параметр имеет значение False, ограничения публикуются без проверки соответствующих данных.
ScriptDeployStateChecks={True | False} False Указывает, следует ли создавать в скрипте публикации инструкции для проверки имен серверов и баз данных на соответствие именам, указанным в проекте базы данных.
ScriptRefreshModule= {True | False} True Указывает, нужно ли включать в конец скрипта публикации инструкции обновления.
Storage={File|Memory} Memory Указывает, как сохраняются элементы при построении модели базы данных.Для обеспечения высокой производительности по умолчанию используется значение Memory.Для очень больших баз данных требуется хранилище с использованием файлов.
TreatVerificationErrorsAsWarnings= {True | False} False Указывает, следует ли рассматривать ошибки, возникающие во время публикации, как предупреждения.Проверка выполняется применительно к сформированному плану развертывания перед его выполнением применительно к целевой базе данных.Проверка плана выявляет такие проблемы, как потеря объектов, существующих только в целевой базе данных (например, индексов), которые должны быть удалены в процессе внесения изменений.Кроме того, она выявляет ситуации, когда зависимые объекты (таблицы, представления и т. д.) существуют в результате наличия ссылок на составной проект, но отсутствуют в целевой базе данных.Можно выбрать, чтобы ошибки проверки трактовались как предупреждения, чтобы получить полный список выявленных проблем, а не останавливать выполнение публикации при возникновении каждой ошибки.
UnmodifiableObjectWarnings= {True | False} True Указывает, следует ли формировать предупреждения, если обнаружены различия в объектах, которые не могут быть изменены (например, если отличаются размеры или пути файлов).
VerifyCollationCompatibility={True | False} True Указывает, проверяется ли совместимость параметров сортировки.
VerifyDeployment={True | False} True Указывает, следует ли выполнять проверки перед началом публикации, которая останавливается при возникновении проблем, которые могут заблокировать успешную публикацию.Например, публикация может остановиться в случае, если во время публикации возникли ошибки, связанные с тем, что внешние ключи в целевой базе данных отсутствуют в проекте базы данных.
System_CAPS_ICON_note.jpg Примечание


Любые заданные параметры целевой базы данных переопределяют параметры, заданные в исходном профиле публикации.

System_CAPS_ICON_note.jpg Примечание


Для параметра источника профиля публикации необходимо задать переменные и значения SQLCMD, так как их невозможно задать в качестве параметра целевой базы данных.

Следующие параметры Destination доступны только для операций DeployReport и Script:

Параметр По умолчанию Описание
OutputPath={ string } Неприменимо Необязательный параметр, сообщающий dbSqlPackage о необходимости создания выходного файла DeployReport XML или Script SQL в папке на диске, определяемой строкой.Это действие перезаписывает все скрипты, существующие в данный момент в расположении, указанном строкой.
System_CAPS_ICON_note.jpg Примечание


Если параметр OutputPath не предоставлен для действия DeployReport или Script, результатом является сообщение.

Примеры

Далее приведен пример синтаксиса для операции Extract с использованием dbSqlPackage:

MSDeploy.exe –verb:sync –source:dbSqlPackage="<source connection string>”,<source parameter> –dest:dbSqlPackage="<target dacpac file path>”  

Далее приведен пример синтаксиса для операции Publish с использованием dbSqlPackage.

MSDeploy.exe –verb:sync –source:dbSqlPackage="<source dacpac file path>" –dest:dbSqlPackage="<target SQL Server/SQL Azure connection string>",Action=Publish,<destination parameters>  

Далее приведен пример синтаксиса для операции DeployReport с использованием dbSqlPackage.

MSDeploy.exe –verb:sync –source:dbSqlPackage="<source dacpac file path>" –dest:dbSqlPackage="<target SQL Server/SQL Azure connection string>",Action=DeployReport,OutputPath="<path to output XML file>",<destination parameters>  

Далее приведен пример синтаксиса для операции Script с использованием dbSqlPackage.

MSDeploy.exe –verb:sync –source:dbSqlPackage="<source dacpac file path>" –dest:dbSqlPackage="<target SQL Server/SQL Azure connection string>",Action=Script,OutputPath="<path to output sql script>",<destination parameters>