Настройка развертываний баз данных для нескольких сред
В этом разделе описывается, как адаптировать свойства базы данных к конкретным целевым средам в рамках процесса развертывания.
Примечание
В этом разделе предполагается, что вы развертываете проект базы данных Visual Studio 2010 с помощью MSBuild.exe и VSDBCMD.exe. Дополнительные сведения о том, почему вы можете выбрать этот подход, см. в разделах Веб-развертывание на предприятии и Развертывание проектов баз данных.
При развертывании проекта базы данных в нескольких местах назначения часто требуется настроить свойства развертывания базы данных для каждой целевой среды. Например, в тестовых средах база данных обычно создается повторно при каждом развертывании, тогда как в промежуточных или рабочих средах вы с большей вероятностью будете вносить добавочные обновления для сохранения данных.
В проекте базы данных Visual Studio 2010 параметры развертывания содержатся в файле конфигурации развертывания (.sqldeployment). В этом разделе показано, как создать файлы конфигурации развертывания для конкретной среды и указать тот, который требуется использовать в качестве параметра VSDBCMD.
Этот раздел является частью серии учебников, основанных на требованиях к развертыванию на предприятии вымышленной компании Fabrikam, Inc. В этой серии учебников используется пример решения диспетчера контактов для представления веб-приложения с реалистичным уровнем сложности, включая приложение ASP.NET MVC 3, службу Windows Communication Foundation (WCF) и проект базы данных.
Метод развертывания в основе этих учебников основан на подходе с разделением файлов проекта, описанном в разделе Основные сведения о файле проекта, в котором процесс сборки управляется двумя файлами проекта: один содержит инструкции сборки, которые применяются к каждой целевой среде, а второй содержит параметры сборки и развертывания для конкретной среды. Во время сборки файл проекта для конкретной среды объединяется с файлом проекта, не зависящим от среды, чтобы сформировать полный набор инструкций по сборке.
Обзор задачи
Для этого раздела предполагается следующее.
- При развертывании решения используется подход с разделением файла проекта, как описано в разделе Общие сведения о файле проекта.
- Вызов VSDBCMD из файла проекта для развертывания проекта базы данных, как описано в разделе Основные сведения о процессе сборки.
Чтобы создать систему развертывания, поддерживающую изменение свойств развертывания базы данных в целевых средах, вам потребуется:
- Создайте файл конфигурации развертывания (.sqldeployment) для каждой целевой среды.
- Создайте команду VSDBCMD, указывающую файл конфигурации развертывания в качестве параметра командной строки.
- Параметризация команды VSDBCMD в файле проекта Microsoft Build Engine (MSBuild), чтобы параметры VSDBCMD соответствовали целевой среде.
В этом разделе показано, как выполнить каждую из этих процедур.
Создание файлов конфигурации развертывания Environment-Specific
По умолчанию проект базы данных содержит один файл конфигурации развертывания с именем Database.sqldeployment. Если открыть этот файл в Visual Studio 2010, вы увидите различные доступные варианты развертывания:
- Параметры сортировки сравнения развертывания. Это позволяет выбрать, следует ли использовать параметры сортировки базы данных проекта ( исходные параметры сортировки) или параметры сортировки базы данных целевого сервера ( целевые параметры сортировки). В большинстве случаев при развертывании в среде разработки или тестирования необходимо использовать параметры сортировки источника. При развертывании в промежуточной или рабочей среде обычно требуется оставить целевые параметры сортировки без изменений, чтобы избежать проблем с взаимодействием.
- Развертывание свойств базы данных. Это позволяет выбрать, следует ли применять свойства базы данных, как определено в файле Database.sqlsettings . При первом развертывании базы данных следует развернуть свойства базы данных. Если вы обновляете существующую базу данных, свойства уже должны быть на месте, и вам не нужно развертывать их снова.
- Всегда повторно создавайте базу данных. Это позволяет выбрать, следует ли повторно создавать целевую базу данных при каждом развертывании или вносить добавочные изменения для обновления целевой базы данных в схеме. При повторном создании базы данных все данные в существующей базе данных будут потеряны. Таким образом, для развертываний в промежуточной или рабочей средах обычно следует задать значение false .
- Блокировать добавочное развертывание, если может произойти потеря данных. Это позволяет выбрать, следует ли останавливать развертывание, если изменение схемы базы данных приведет к потере данных. Обычно для развертывания в рабочей среде устанавливается значение true , чтобы предоставить вам возможность вмешательства и защиты любых важных данных. Если для параметра Всегда повторно создавать базу данныхзадано значение false, этот параметр не будет действовать.
- Выполнение развертывания в однопользовательском режиме. Обычно это не является проблемой в средах разработки или тестирования. Однако для развертываний в промежуточной или рабочей средах обычно следует задать значение true . Это не позволяет пользователям вносить изменения в базу данных во время развертывания.
- Резервное копирование базы данных перед развертыванием. Обычно это значение имеет значение true при развертывании в рабочей среде в качестве меры предосторожности от потери данных. При развертывании в промежуточной среде также может потребоваться задать для него значение true , если промежуточная база данных содержит много данных.
- Создайте инструкции DROP для объектов, которые находятся в целевой базе данных, но не находятся в проекте базы данных. В большинстве случаев это неотъемлемая и важная часть процесса внесения добавочных изменений в базу данных. Если для параметра Всегда повторно создавать базу данныхзадано значение false, этот параметр не будет действовать.
- Не используйте инструкции ALTER ASSEMBLY для обновления типов CLR. Этот параметр определяет, как SQL Server следует обновлять типы среды CLR до более новых версий сборок. В большинстве сценариев для этого параметра должно быть задано значение false .
В этой таблице показаны типичные параметры развертывания для разных целевых сред. Однако параметры могут отличаться в зависимости от конкретных требований.
Разработчик/тестирование | Промежуточное хранение и интеграция | Производство | |
---|---|---|---|
Параметры сортировки сравнения развертывания | Источник | целевого объекта | целевого объекта |
Развертывать свойства базы данных | True | Только первый раз | Только первый раз |
Всегда воссоздавать базу данных | True | Неверно | Неверно |
Блокировать добавочное развертывание при возможности потери данных | Неверно | Возможно | True |
Выполнение скрипта развертывания в однопользовательском режиме | False | True | True |
Резервное копирование базы данных перед развертыванием | Неверно | Возможно | True |
Создание инструкций DROP для объектов, которые находятся в целевой базе данных, но не находятся в проекте базы данных | False | True | True |
Не использовать инструкции ALTER ASSEMBLY для обновления типов CLR | Неверно | Неверно | Неверно |
Примечание
Дополнительные сведения о свойствах развертывания базы данных и вопросах среды см. в разделах Обзор параметров проекта базы данных, Практическое руководство. Настройка свойств для сведений о развертывании, Сборка и развертывание базы данных в изолированной среде разработки и Сборка и развертывание баз данных в промежуточной или рабочей среде.
Для поддержки развертывания проекта базы данных в нескольких назначениях необходимо создать файл конфигурации развертывания для каждой целевой среды.
Создание файла конфигурации для конкретной среды
В Visual Studio 2010 в окне Обозреватель решений щелкните правой кнопкой мыши проект базы данных и выберите пункт Свойства.
На странице свойств проекта базы данных на вкладке Развертывание в строке Файл конфигурации развертывания нажмите кнопку Создать.
В диалоговом окне Новый файл конфигурации развертывания присвойте файлу понятное имя (например, TestEnvironment.sqldeployment) и нажмите кнопку Сохранить.
На странице [Имя_файла].sqldeployment задайте свойства развертывания в соответствии с требованиями целевой среды, а затем сохраните файл.
Обратите внимание, что новый файл добавлен в папку Properties в проекте базы данных.
Указание файла конфигурации развертывания в VSDBCMD
При использовании конфигураций решения (например, отладки и выпуска) в Visual Studio 2010 можно связать файл конфигурации развертывания с каждой конфигурацией. При сборке определенной конфигурации процесс сборки создает файл манифеста развертывания для конкретной конфигурации, который указывает на файл конфигурации развертывания. Однако одной из main целей подхода к развертыванию, описанного в этих руководствах, является предоставление пользователям возможности управлять процессом развертывания без использования Visual Studio 2010 и конфигураций решений. При таком подходе конфигурация решения одинакова независимо от целевой среды развертывания. Чтобы адаптировать развертывание базы данных к определенной целевой среде, можно использовать параметры командной строки VSDBCMD, чтобы указать файл конфигурации развертывания.
Чтобы указать файл конфигурации развертывания в VSDBCMD, используйте параметр p:/DeploymentConfigurationFile и укажите полный путь к файлу. Это переопределит файл конфигурации развертывания, который идентифицирует манифест развертывания. Например, эту команду VSDBCMD можно использовать для развертывания базы данных ContactManager в тестовой среде:
vsdbcmd.exe /a:Deploy
/manifest:"…\ContactManager.Database.deploymanifest"
/cs:"Data Source=TESTDB1;Integrated Security=true"
/p:TargetDatabase=ContactManager
/p:DeploymentConfigurationFile=
"…\ContactManager.Database_TestEnvironment.sqldeployment"
/dd+
/script:"…\Publish-ContactManager-Db.sql"
Примечание
Обратите внимание, что процесс сборки может переименовать файл .sqldeployment при копировании файла в выходной каталог.
При использовании командных переменных SQL в скриптах SQL, выполняемых перед развертыванием или после развертывания, можно использовать аналогичный подход для связывания файла SQLCMDVARS для конкретной среды с развертыванием. В этом случае используйте параметр p:/SqlCommandVariablesFile для идентификации файла .sqlcmdvars.
Выполнение команды VSDBCMD из файла проекта MSBuild
Команду VSDBCMD можно вызвать из файла проекта MSBuild с помощью задачи Exec в целевом объекте MSBuild. В простейшей форме он будет выглядеть следующим образом:
<Target Name="DeployDatabase">
<PropertyGroup>
<_Cmd>
Add your VSDBCMD command here
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
- На практике, чтобы упростить чтение и повторное использование файлов проекта, необходимо создать свойства для хранения различных параметров командной строки. Это упрощает для пользователей предоставление значений свойств в файле проекта для конкретной среды или переопределение значений по умолчанию из командной строки MSBuild. Если вы используете подход с разделением файлов проекта, описанный в разделе Общие сведения о файле проекта, необходимо разделить инструкции и свойства сборки между двумя файлами соответствующим образом:
- Параметры среды, такие как имя файла конфигурации развертывания, строка подключения к базе данных и имя целевой базы данных, должны находиться в файле проекта для конкретной среды.
- Целевой объект MSBuild, выполняющий команду VSDBCMD, вместе с любыми универсальными свойствами, такими как расположение исполняемого файла VSDBCMD, должен находиться в универсальном файле проекта.
Кроме того, перед вызовом VSDBCMD необходимо выполнить сборку проекта базы данных, чтобы файл .deploymanifest был создан и готов к использованию. Полный пример этого подхода можно найти в разделе Основные сведения о процессе сборки, в котором приводятся пошаговые инструкции по файлам проекта в примере решения Диспетчера контактов.
Заключение
В этом разделе описано, как настроить свойства базы данных для различных целевых сред при развертывании проектов баз данных с помощью MSBuild и VSDBCMD. Этот подход полезен, если необходимо развернуть проекты баз данных в рамках более крупных решений корпоративного уровня. Эти решения часто развертываются в нескольких местах назначения, таких как изолированные среды разработки или тестирования, промежуточные платформы или платформы интеграции, а также рабочие или динамические среды. Для каждой из этих целевых сред обычно требуется уникальный набор свойств развертывания базы данных.
Дополнительные материалы
Дополнительные сведения о развертывании проектов баз данных с помощью VSDBCMD.exe см. в разделе Развертывание проектов баз данных. Дополнительные сведения об использовании пользовательских файлов проекта MSBuild для управления процессом развертывания см. в разделах Общие сведения о файле проекта и Общие сведения о процессе сборки.
Эти статьи на сайте MSDN содержат более общие рекомендации по развертыванию базы данных: