Настройка развертываний баз данных для нескольких сред

Джейсон Ли

В этом разделе описывается, как адаптировать свойства базы данных к конкретным целевым средам в рамках процесса развертывания.

Примечание

В этом разделе предполагается, что вы развертываете проект базы данных Visual Studio 2010 с помощью MSBuild.exe и VSDBCMD.exe. Дополнительные сведения о том, почему вы можете выбрать этот подход, см. в разделах Веб-развертывание на предприятии и Развертывание проектов баз данных.

При развертывании проекта базы данных в нескольких местах назначения часто требуется настроить свойства развертывания базы данных для каждой целевой среды. Например, в тестовых средах база данных обычно создается повторно при каждом развертывании, тогда как в промежуточных или рабочих средах вы с большей вероятностью будете вносить добавочные обновления для сохранения данных.

В проекте базы данных Visual Studio 2010 параметры развертывания содержатся в файле конфигурации развертывания (.sqldeployment). В этом разделе показано, как создать файлы конфигурации развертывания для конкретной среды и указать тот, который требуется использовать в качестве параметра VSDBCMD.

Этот раздел является частью серии учебников, основанных на требованиях к развертыванию на предприятии вымышленной компании Fabrikam, Inc. В этой серии учебников используется пример решения диспетчера контактов для представления веб-приложения с реалистичным уровнем сложности, включая приложение ASP.NET MVC 3, службу Windows Communication Foundation (WCF) и проект базы данных.

Метод развертывания в основе этих учебников основан на подходе с разделением файлов проекта, описанном в разделе Основные сведения о файле проекта, в котором процесс сборки управляется двумя файлами проекта: один содержит инструкции сборки, которые применяются к каждой целевой среде, а второй содержит параметры сборки и развертывания для конкретной среды. Во время сборки файл проекта для конкретной среды объединяется с файлом проекта, не зависящим от среды, чтобы сформировать полный набор инструкций по сборке.

Обзор задачи

Для этого раздела предполагается следующее.

Чтобы создать систему развертывания, поддерживающую изменение свойств развертывания базы данных в целевых средах, вам потребуется:

  • Создайте файл конфигурации развертывания (.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 Неверно Неверно Неверно

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

Создание файла конфигурации для конкретной среды

  1. В Visual Studio 2010 в окне Обозреватель решений щелкните правой кнопкой мыши проект базы данных и выберите пункт Свойства.

  2. На странице свойств проекта базы данных на вкладке Развертывание в строке Файл конфигурации развертывания нажмите кнопку Создать.

    На странице свойств проекта базы данных на вкладке Развертывание в строке Файл конфигурации развертывания нажмите кнопку Создать.

  3. В диалоговом окне Новый файл конфигурации развертывания присвойте файлу понятное имя (например, TestEnvironment.sqldeployment) и нажмите кнопку Сохранить.

  4. На странице [Имя_файла].sqldeployment задайте свойства развертывания в соответствии с требованиями целевой среды, а затем сохраните файл.

    На странице Имя файла .sqldeployment задайте свойства развертывания в соответствии с требованиями целевой среды, а затем сохраните файл.

  5. Обратите внимание, что новый файл добавлен в папку Properties в проекте базы данных.

    Обратите внимание, что новый файл добавлен в папку 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 содержат более общие рекомендации по развертыванию базы данных: