Поделиться через


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

Джейсон Ли

Примечание.

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

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

Если открыть пример решения Contact Manager в Visual Studio 2010, вы увидите, что проект базы данных содержит папку

Вместе с файлом проекта (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 для развертывания проекта базы данных?

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

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

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

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

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

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

Остальная часть этого раздела описывает использование 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>

Значение этого свойства задается в соответствии со свойствами проекта базы данных. Если задать действие "Развернуть" для создания скрипта развертывания (.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 и процессе развертывания базы данных: