Использование 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 | Указывает, следует ли выполнять проверки перед началом публикации, которая останавливается при возникновении проблем, которые могут заблокировать успешную публикацию.Например, публикация может остановиться в случае, если во время публикации возникли ошибки, связанные с тем, что внешние ключи в целевой базе данных отсутствуют в проекте базы данных. |
Примечание |
---|
|
Примечание |
---|
|
Следующие параметры Destination доступны только для операций DeployReport и Script:
Параметр | По умолчанию | Описание |
---|---|---|
OutputPath={ string } | Неприменимо | Необязательный параметр, сообщающий dbSqlPackage о необходимости создания выходного файла DeployReport XML или Script SQL в папке на диске, определяемой строкой.Это действие перезаписывает все скрипты, существующие в данный момент в расположении, указанном строкой. |
Примечание |
---|
|
Примеры
Далее приведен пример синтаксиса для операции 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>