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

Джейсон Ли

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

Замечание

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

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

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

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

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

Обзор задачи

В этом разделе предполагается, что:

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

  • Создайте файл конфигурации развертывания (.sqldeployment) для каждой целевой среды.
  • Создайте команду VSDBCMD, указывающую файл конфигурации развертывания в качестве коммутатора командной строки.
  • Параметризируйте команду VSDBCMD в файле проекта системы сборки (MSBuild), чтобы параметры VSDBCMD соответствовали целевой среде.

В этом разделе показано, как выполнять каждую из этих процедур.

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

По умолчанию проект базы данных содержит один файл конфигурации развертывания с именем Database.sqldeployment. Если открыть этот файл в Visual Studio 2010, вы увидите различные варианты развертывания, доступные для вас:

  • Сравнение развертываний. Это позволяет выбрать, следует ли использовать параметры сортировки базы данных проекта ( исходная сортировка) или параметры сортировки базы данных целевого сервера ( целевая сортировка). В большинстве случаев при развертывании в среде разработки или тестирования необходимо использовать параметры сортировки источников. При развертывании в промежуточной или продуктовой среде обычно требуется оставить целевую сортировку без изменений, чтобы избежать проблем с взаимодействием.
  • Развертывание свойств базы данных. Это позволяет выбрать, следует ли применять свойства базы данных, как определено в файле Database.sqlsettings . При первом развертывании базы данных следует настроить её свойства. Если вы обновляете существующую базу данных, свойства уже должны быть на месте, и вам не нужно снова развертывать их.
  • Всегда повторно создайте базу данных. Это позволяет выбрать, следует ли повторно создавать целевую базу данных при каждом развертывании или вносить изменения по частям, чтобы обновить целевую базу данных в соответствии с вашей схемой. При повторном создании базы данных вы потеряете все данные в существующей базе данных. Как правило, необходимо установить значение false для развертываний в промежуточных или рабочих средах.
  • Блокировать добавочное развертывание, если может возникнуть потеря данных. Это позволяет выбрать, следует ли остановить развертывание, если изменение схемы базы данных приведет к потере данных. Обычно это значение устанавливается в true для развертывания в рабочей среде, чтобы предоставить вам возможность вмешиваться и защищать любые важные данные. Если вы установили для параметра Always re-create database значение false, этот параметр не будет иметь эффекта.
  • Выполнение развертывания в однопользовательском режиме. Обычно это не проблема в средах разработки или тестирования. Однако обычно это значение следует устанавливать в true при развертываниях в промежуточной или рабочей среде. Это предотвращает внесение изменений в базу данных пользователями во время развертывания.
  • Резервное копирование базы данных перед развертыванием. Обычно вы устанавливаете это на true, когда развертываете в рабочей среде, чтобы предотвратить потерю данных. Вы также можете задать значение true при развертывании в промежуточной среде, если промежуточная база данных содержит много данных.
  • Создайте инструкции DROP для объектов, которые находятся в целевой базе данных, но не находятся в проекте базы данных. В большинстве случаев это неотъемлемая и важная часть внесения добавочных изменений в базу данных. Если вы установили для параметра Always re-create database значение false, этот параметр не будет иметь эффекта.
  • Не используйте инструкции ALTER ASSEMBLY для обновления типов CLR. Этот параметр определяет, как SQL Server должен обновлять типы среды CLR до более новых версий сборок. Это должно быть установлено в false в большинстве сценариев.

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

Разработчик и тестирование Промежуточная/интеграция Производство
Сопоставление развертываний Исходный материал Цель Цель
Развертывание свойств базы данных True Только первый раз Только первый раз
Всегда повторно создавать базу данных True Неправда Неправда
Блокировать добавочное развертывание, если может возникнуть потеря данных Неправда Может быть True
Выполнение скрипта развертывания в однопользовательском режиме Неправда True True
Резервное копирование базы данных перед развертыванием Неправда Может быть True
Создание инструкций DROP для объектов, которые находятся в целевой базе данных, но не находятся в проекте базы данных. Неправда True True
Не используйте операторы ALTER ASSEMBLY для обновления типов CLR Неправда Неправда Неправда

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

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

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

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

    На странице свойств проекта базы данных, на вкладке

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

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

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

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

    Обратите внимание, что новый файл добавляется в папку

Указание файла конфигурации развертывания в VSDBCMD

При использовании конфигураций решений (например, отладки и выпуска) в Visual Studio 2010 можно связать файл конфигурации развертывания с каждой конфигурацией. При сборке конкретной конфигурации процесс сборки создает файл манифеста развертывания для конкретной конфигурации, указывающий на файл конфигурации конкретной конфигурации. Однако одной из основных целей подхода к развертыванию, описанному в этих руководствах, является предоставление людям возможности управлять процессом развертывания без использования конфигураций решений 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 был создан и готов к использованию. Полный пример этого подхода представлен в разделе "Общие сведения о процессе сборки", который описывает файлы проекта в примере решения Диспетчера контактов.

Conclusion

В этом разделе описано, как настроить свойства базы данных в разных целевых средах при развертывании проектов баз данных с помощью MSBuild и VSDBCMD. Этот подход полезен при развертывании проектов базы данных в рамках более крупных корпоративных решений. Эти решения часто развертываются в нескольких местах назначения, таких как изолированные среды разработки или тестирования, промежуточные платформы или платформы интеграции, а также рабочие или живые среды. Для каждой из этих целевых сред обычно требуется уникальный набор свойств развертывания базы данных.

Дальнейшее чтение

Дополнительные сведения о развертывании проектов баз данных с помощью VSDBCMD.exeсм. в разделе "Развертывание проектов баз данных". Дополнительные сведения об использовании пользовательских файлов проекта MSBuild для управления процессом развертывания см. в разделе "Общие сведения о файле проекта " и "Общие сведения о процессе сборки".

Эти статьи в MSDN содержат более общие рекомендации по развертыванию базы данных: