Развертывание проектов баз данных

Джейсон Ли

Примечание

Во многих корпоративных сценариях развертывания требуется возможность публикации добавочных обновлений в развернутой базе данных. Альтернативой является повторное создание базы данных при каждом развертывании, что означает потерю всех данных в существующей базе данных. При работе с Visual Studio 2010 рекомендуется использовать VSDBCMD для добавочной публикации базы данных. Однако следующая версия Visual Studio и конвейер веб-публикации (WPP) будут включать средства, поддерживающие добавочную публикацию напрямую.

Если открыть пример решения Диспетчера контактов в Visual Studio 2010, вы увидите, что проект базы данных содержит папку Properties, содержащую четыре файла.

Если открыть пример решения Диспетчера контактов в Visual Studio 2010, вы увидите, что проект базы данных содержит папку Properties, содержащую четыре файла.

Вместе с файлом проекта (в данном случае ContactManager.Database.dbproj ) эти файлы управляют различными аспектами процесса сборки и развертывания:

  • Файл Database.sqlcmdvars содержит значения для всех переменных SQLCMD, используемых при развертывании проекта. Каждая конфигурация решения (например, отладка и выпуск) может указывать отдельный файл .sqlcmdvars.
  • Файл Database.sqldeployment предоставляет параметры, относящиеся к развертыванию, такие как использование параметров сортировки, определенных в проекте, или параметров сортировки целевого сервера, создание целевой базы данных каждый раз или просто изменение существующей базы данных для ее обновления и т. д. В каждой конфигурации решения может быть указан отдельный файл .sqldeployment.
  • Файл Database.sqlpermissions — это XML-документ, который можно использовать для определения разрешений, которые необходимо добавить в целевую базу данных. Все конфигурации решения используют один и тот же файл .sqlpermissions.
  • В файле Database.sqlsettings указываются свойства уровня базы данных, используемые при создании базы данных, такие как параметры сортировки для использования, поведение операторов сравнения и т. д. Все конфигурации решения используют один и тот же файл .sqlsettings.

Стоит немного открыть эти файлы в Visual Studio и ознакомиться с содержимым.

При сборке проекта базы данных в процессе сборки создаются два файла:

  • Схема базы данных (dbschema-файл). Здесь описывается схема базы данных, которую требуется создать в формате XML.
  • Манифест развертывания (файл .deploymanifest). Он содержит все сведения, необходимые для создания и развертывания базы данных. Он ссылается на DBSCHEMA-файл вместе с другими ресурсами, такими как инструкции по развертыванию (файл .sqldeployment) и любые скрипты SQL перед развертыванием или после развертывания.

Здесь показана связь между этими ресурсами:

Связь между указанными выше ресурсами

Как видите, sqlsettings-файл и файл .sqlpermissions являются входными данными для процесса сборки. Вместе с файлом проекта базы данных эти файлы используются для создания файла схемы базы данных. Sqldeployment-файл и файл .sqlcmdvars проходят процесс сборки без изменений. Манифест развертывания указывает расположение схемы базы данных, sqldeployment-файла, файла .sqlcmdvars и любых скриптов SQL перед развертыванием или после развертывания.

Зачем использовать VSDBCMD для развертывания проекта базы данных?

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

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

Существует три main подхода, которые можно использовать для развертывания проекта базы данных:

  • Функции развертывания можно использовать с типом проекта базы данных в Visual Studio 2010. При сборке и развертывании проекта базы данных в Visual Studio 2010 в процессе развертывания используется манифест развертывания для создания файла развертывания на основе SQL, относящегося к конфигурации сборки. Это приведет к созданию базы данных, если она еще не существует, или внесению необходимых изменений в базу данных, если она уже существует. Вы можете использовать SQLCMD.exe для запуска этого файла на целевом сервере или настроить Visual Studio для создания и запуска файла. Недостаток этого подхода заключается в том, что вы имеете ограниченный контроль над параметрами развертывания. Часто также может потребоваться изменить файл развертывания SQL, чтобы предоставить значения переменных для конкретной среды. Этот подход можно использовать только на компьютере с установленной Visual Studio 2010, и разработчику потребуется знать и предоставлять строки подключения и учетные данные для всех целевых сред.
  • Вы можете использовать средство веб-развертывания служб IIS для развертывания базы данных в рамках проекта веб-приложения. Однако этот подход гораздо сложнее, если требуется развернуть проект базы данных, а не просто реплицировать существующую локальную базу данных на целевом сервере. Вы можете настроить веб-развертывание для выполнения скрипта развертывания SQL, создаваемого проектом базы данных, но для этого необходимо создать пользовательский файл целевых объектов WPP для проекта веб-приложения. Это значительно усложняет процесс развертывания. Кроме того, веб-развертывание не поддерживает добавочные обновления для существующих баз данных напрямую. Дополнительные сведения об этом подходе см. в статье Расширение конвейера веб-публикации для развернутого SQL-файла проекта базы данных пакета.
  • Для развертывания базы данных можно использовать служебную программу VSDBCMD, используя схему базы данных или манифест развертывания. Вы можете вызывать VSDBCMD.exe из целевого объекта MSBuild, что позволяет публиковать базы данных в рамках более крупного процесса развертывания на основе скриптов. Вы можете переопределить переменные в файле SQLCMDVARS и множество других свойств базы данных с помощью команды VSDBCMD, которая позволяет настроить развертывание для разных сред без создания нескольких конфигураций сборки. VSDBCMD предоставляет функциональные возможности дифференциации, что означает, что она внесет только необходимые изменения, чтобы согласовать целевую базу данных со схемой базы данных. VSDBCMD также предлагает широкий спектр параметров командной строки, которые обеспечивают точное управление процессом развертывания.

Из этого обзора видно, что использование VSDBCMD с MSBuild лучше всего подходит для типичного сценария корпоративного развертывания:

Поддерживает Visual Studio 2010 Web Deploy 2.0 VSDBCMD.exe
Поддерживает удаленное развертывание? Да Да Да
Поддерживает добавочные обновления? Да Нет Да
Поддерживает скрипты до и после развертывания? Да Да Да
Поддерживает развертывание в нескольких средах? Ограниченный Ограниченный Да
Поддерживает развертывание по сценарию? Ограниченный Да Да

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

Основные сведения о процессе развертывания

Служебная программа VSDBCMD позволяет развернуть базу данных с помощью схемы базы данных (dbschema-файл) или манифеста развертывания (deploymanifest-файла). На практике вы почти всегда используете манифест развертывания, так как манифест развертывания позволяет указать значения по умолчанию для различных свойств развертывания и определить все скрипты SQL перед развертыванием или после развертывания, которые вы хотите запустить. Например, эта команда VSDBCMD используется для развертывания базы данных ContactManager на сервере базы данных в тестовой среде:

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

В данном случае:

  • Параметр /a (или /Action) указывает, что требуется выполнить VSDBCMD. Для этого параметра можно задать значение Импорт или Развертывание. Параметр Импорт используется для создания DBSCHEMA-файла из существующей базы данных, а параметр Развернуть используется для развертывания DBSCHEMA-файла в целевой базе данных.
  • Параметр /manifest (или /ManifestFile) определяет deploymanifest-файл, который требуется развернуть. Если вы хотите использовать DBSCHEMA-файл, используйте параметр /model (или /ModelFile).
  • Параметр /cs (или /ConnectionString) предоставляет строку подключения для целевого сервера базы данных. Обратите внимание, что сюда не входит имя базы данных— VSDBCMD необходимо подключиться к серверу для создания базы данных; Ему не нужно подключаться к отдельной базе данных. Если файл .deploymanifest содержит строку подключения, этот параметр можно опустить. Если вы используете параметр в любом случае, значение переключателя переопределит значение .deploymanifest.
  • Свойство /p:TargetDatabase предоставляет имя, которое вы хотите назначить целевой базе данных при создании. Это переопределяет значение свойства TargetDatabase в файле .deploymanifest. Вы можете использовать синтаксис /p:[имя_свойства], чтобы задать широкий спектр свойств развертывания и переопределить любые переменные SQLCMD, объявленные в файле .sqlcmdvars.
  • Параметр /dd+ (или /DeployToDatabase+) указывает, что вы хотите создать развертывание и развернуть его в целевой среде. Если указать параметр /dd-или опустить параметр, VSDBCMD создаст скрипт развертывания, но не развернет его в целевой среде. Этот переключатель часто является источником путаницы и более подробно описан в следующем разделе.
  • Параметр /script (или /DeploymentScriptFile) указывает, где вы хотите создать скрипт развертывания. Это значение не влияет на процесс развертывания.

Дополнительные сведения о VSDBCMD см. в разделах Справочник по командной строке для VSDBCMD.EXE (развертывание и импорт схемы) и Практическое руководство. Подготовка базы данных к развертыванию из командной строки с помощью VSDBCMD.EXE.

Пример использования VSDBCMD из файла проекта MSBuild см. в разделе Основные сведения о процессе сборки. Примеры настройки параметров развертывания базы данных для нескольких сред см. в разделе Настройка развертываний баз данных для нескольких сред.

Основные сведения о коммутаторе DeployToDatabase

Поведение параметра /dd или /DeployToDatabase зависит от того, используете ли вы VSDBCMD с DBSCHEMA-файлом или файлом .deploymanifest. Если вы используете DBSCHEMA-файл, поведение довольно простое:

  • Если указать /dd+ или /dd, VSDBCMD создаст скрипт развертывания и развернет базу данных.
  • Если указать параметр /dd- или пропустить параметр, VSDBCMD создаст только скрипт развертывания.

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

<DeployToDatabase>False</DeployToDatabase>

Значение этого свойства задается в соответствии со свойствами проекта базы данных. Если для действия Развернуть задано значение Create a deployment script (.sql) (Создание скрипта развертывания (.sql), значение будет равно False. Если для действия Развернуть задано значение Создать скрипт развертывания (.sql) и выполнить развертывание в базе данных, будет задано значение True.

Примечание

Эти параметры связаны с определенной конфигурацией сборки и платформой. Например, если настроить параметры для конфигурации отладки , а затем опубликовать с помощью конфигурации Выпуска , параметры не будут использоваться.

Например, если настроить параметры для конфигурации отладки, а затем опубликовать с помощью конфигурации Выпуска, параметры не будут использоваться.

Примечание

В этом сценарии для действия Развертывание всегда должно быть задано значение Создать скрипт развертывания (.sql), так как вы не хотите, чтобы Visual Studio 2010 развертывал базу данных. Иными словами, свойство DeployToDatabase всегда должно иметь значение False.

При указании свойства DeployToDatabase параметр /dd переопределяет свойство только в том случае, если свойство имеет значение false:

  • Если свойство DeployToDatabase имеет значение False и вы указываете /dd+ или /dd, VSDBCMD переопределит свойство DeployToDatabase и развернет базу данных.
  • Если свойство DeployToDatabase имеет значение False и вы указываете параметр /dd- или пропускаете параметр, VSDBCMD не развертывает базу данных.
  • Если свойство DeployToDatabase имеет значение True, VSDBCMD проигнорирует параметр и развернет базу данных.
  • Скрипт развертывания создается в каждом случае, независимо от того, развертывается ли база данных.

Заключение

В этом разделе представлен обзор процесса сборки и развертывания для проектов баз данных в Visual Studio 2010. В нем также описано, как можно использовать VSDBCMD.exe с MSBuild для поддержки развертывания базы данных корпоративного масштаба.

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

Дополнительные материалы

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

В этих разделах на сайте MSDN содержатся более подробные рекомендации и общие сведения о проектах баз данных Visual Studio и процессе развертывания базы данных: