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


Общие сведения о построении и развертывании базы данных

Чтобы создать базу данных или опубликовать изменения существующей базы данных из проекта базы данных на сервере базы данных, необходимо построить проект базы данных, а затем развернуть его на этом сервере.

На этапе построения проекта базы данных компилируется в файлы, используемые для развертывания. К этим файлам относятся DBSCHEMA-файл, DEPLOYMENTMANIFEST-файл, а также скрипты, выполняемые до и после развертывания. При построении проекта базы данных сравнение с конечной базой данных не выполняется. При развертывании проекта базы данных результаты операции построения сравниваются с конечной базой данных (если конечная база данных существует) и идентифицируются действия, необходимые для обновления конечной базы данных, чтобы она соответствовала проекту базы данных. В зависимости от параметров, эти обновления развертываются в конечной базе данных.

Кроме того, можно создать скрипт развертывания (файл .SQL), а затем изменить его перед развертыванием на промежуточном или производственном сервере с помощью редактора Transact-SQL или другого инструмента, такого как SQL Server Management Studio. Операция построения "Очистить" удаляет все существующие артефакты построения, такие как скрипты, манифесты развертывания и DBSCHEMA-файлы.

Скрипты развертывания

Пользователи могут создавать скрипты, выполняемые до или после скриптов, создающих или обновляющих целевой объект. Может существовать только один скрипт, выполняемый перед развертыванием и один скрипт, выполняемый после развертывания. Дополнительные сведения см. в разделе Создание и изменение скриптов базы данных.

Манифест развертывания

При построении проекта базы данных создается манифест развертывания. Этот манифест содержит все сведения о конфигурации на уровне проекта, необходимые для развертывания без файла проекта базы данных (DBPROJ).

Файл манифеста развертывания (DEPLOYMANIFEST) – XML-файл, структура которого во много сходна с файлом проекта MSBuild. DEPLOYMANIFEST-файл создается в папке sql\Конфигурация, расположенной в папке проекта базы данных, где Конфигурация – это конфигурация построения, например отладка или выпуск.

В следующем примере демонстрируется DEPLOYMANIFEST-файл для пустого проекта базы данных SQL Server 2008 с именем Empty2008DbProj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetConnectionString>Data Source=stevenpoauth\sql2k8;Integrated Security=True;Pooling=False</TargetConnectionString>
    <TargetDatabase>Empty2008DbProj</TargetDatabase>
    <DeployToDatabase>True</DeployToDatabase>
    <DeployToScript>True</DeployToScript>
    <SourceModel>Empty2008DbProj.dbschema</SourceModel>
    <DeployScriptFileName>Empty2008DbProj.sql</DeployScriptFileName>
    <DeploymentConfigurationFile>Empty2008DbProj_Database.sqldeployment</DeploymentConfigurationFile>
  </PropertyGroup>
  <PropertyGroup>
    <SqlCommandVariablesFile>Empty2008DbProj_Database.sqlcmdvars</SqlCommandVariablesFile>
  </PropertyGroup>
  <ItemGroup>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PostDeployment.sql">
      <__PostdeploymentMetadata>
      </__PostdeploymentMetadata>
    </DeploymentExtensionConfiguration>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PreDeployment.sql">
      <__PredeploymentMetadata>
      </__PredeploymentMetadata>
    </DeploymentExtensionConfiguration>
  </ItemGroup>
  <ItemGroup>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPlanOrderModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPrePostDeploymentModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Refactoring.SqlRefactoringDeploymentContributor">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
  </ItemGroup>
</Project>

В файле манифеста развертывания содержится один или несколько узлов PropertyGroup, определяющих конфигурацию, используемую по умолчанию при развертывании. В файле манифеста развертывания содержатся также узлы ItemGroup, содержащие узлы DeploymentExtensionConfiguration и узлы Reference.

Узлы DeploymentExtensionConfiguration определяют файлы конфигурации, которые в процессе развертывания передаются в его расширения. В этих файлах конфигурации содержатся скрипты, выполняемые до и после развертывания, а также журнал рефакторинга, используемый для сохранения намерений при развертывании.

Узлы Reference определяют все артефакты, на которые ссылается проект и которые копируются в выходную папку при построении проекта. Файлы, на которые указывают ссылки, обрабатываются в процессе развертывания, что обеспечивает правильность создания модели базы данных.

Транзакции в скрипте развертывания

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

Версия SQL Server

Объекты вне транзакции развертывания

SQL Server 2008 

Членство роли сервера

Конечные точки

Полнотекстовые индексы

Полнотекстовые каталоги

Связанные серверы

Данные для входа на связанные серверы

Сеансы событий

Спецификация аудита сервера

Списки полнотекстовых ограничений

SQL Server 2005

Членство роли сервера

Конечные точки

Полнотекстовые индексы

Полнотекстовые каталоги

Связанные серверы

Данные для входа на связанные серверы

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

Соображения относительно изменений развертывания в существующей базе данных

При развертывании изменений в существующей базе данных некоторые из них могут привести к потере данных. Если изменение может привести к потере данных в таблице, в случае установки флажка Блокировать добавочное развертывание при возможности потери данных развертывание будет отменено. По умолчанию этот флажок установлен, однако он отображается в окне "Свойства" проекта. Дополнительные сведения см. в разделе Общие сведения о параметрах проекта базы данных.

Следующие виды изменений приводят к потере данных: удаление и повторное создание таблицы, изменение размера столбца (char(100) на char(50) или nchar(100) на char(100)), изменение параметров сортировки столбца символьного типа.

Примечание

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

Восстановление после развертывания, завершившегося неудачей

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

Исключенные файлы

Если исключить файлы из проекта базы данных, объекты базы данных, определенные в этих файлах, не будут включены в DBSCHEMA-файл, созданный при построении проекта базы данных. Эти объекты не развертываются, поскольку они не включены в DBSCHEMA-файл. Если работа над одним или несколькими объектами еще не завершена, но требуется развернуть уже готовые объекты, можно исключить часть файлов из построения, чтобы только готовые объекты были включены в DBSCHEMA-файл и развернуты в целевой базе данных. Впоследствии, когда эти файлы будут готовы к развертыванию, их можно снова включить, и развертывание обновит базу данных новыми объектами, не изменяя существующие объекты (если в проекте они не изменились). Дополнительные сведения см. в разделе Практическое руководство. Исключение файлов из проекта базы данных.

Важно!

При исключении объектов из проекта базы данных, существующего в конечной базе данных с последующим развертыванием этого проекта возможна утрата данных.Эти объекты будут удалены из конечной базы данных, если в конфигурации развертывания установлен флажок Создавать инструкции DROP для объектов, находящихся в конечной базе данных, но вне проекта базы данных.

Проекты сервера

В проектах сервера содержатся определения объектов в "главной" базе данных. Конечная база данных проекта сервера всегда называется "главной". Для каждого параметра сервера можно указать, нужно ли проверять значение этого параметра при развертывании проекта сервера. Непроверенные параметры игнорируются. Если значение параметра сервера не совпадает со значением параметра, который необходимо проверить, развертывание завершится сбоем, а на экране отобразится сообщение об ошибке.

Построение из командной строки

Операции построения, развертывания или очистки можно выполнять не только из пользовательского интерфейса Visual Studio, но и в командной строке с помощью утилиты MSBuild.exe. При этом можно задавать цели Build, Deploy, Rebuild и Clean. По умолчанию процессы построения и развертывания используют свойства проекта, определенные в проекте базы данных (в файле .dbproj file или .dbproj.user). Однако эти свойства можно переопределить в командной строке или файле ответов.

Важно!

Перед выполнением построения из командной строки следует закрыть Visual Studio.Если выполнить построение из командной строки с выполняющейся средой Visual Studio, некоторые ошибки могут не перехватываться.

Можно также использовать программу VSDBCMD.EXE для развертывания DBSCHEMA-файла из командной строки. VSDBCMD можно использовать на компьютере, на который не установлена программа Visual Studio. Дополнительные сведения см. в разделе Практическое руководство. Подготовка базы данных к развертыванию из командной строки с помощью программы VSDBCMD.EXE. При развертывании производственной среды можно использовать программу VSDBCMD или можно создать скрипт развертывания, а затем произвести развертывание этого скрипта вручную с помощью редактора Transact-SQL или другого инструмента, такого как SQL Server Management Studio.

Синтаксис командной строки

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

  • MSBuild /target:Build имяРешения.sln
    В этом примере операция построения выполняется для решения с именем имяРешения.sln с использованием свойств проекта, заданных в файлах проекта, которые содержит решение. Если в решении содержится несколько проектов базы данных, они будут строиться вместе со всеми остальными элементами решения. Можно также построить определенный проект базы данных. Цель Build включает в генерируемый скрипт построения скрипты, выполняемые перед развертыванием и после развертывания.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" имяПроекта.dbproj
    В этом примере показано, как развернуть проект базы данных, переопределив при этом имя конечной базы данных и строку подключения.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:DeploymentConfiguration=путьРазвертывания\другаяКонфигурацияРазвертывания.deploymentconfig /p:SqlCommandVarsFile=путьПеременной\альтернативныеПеременные.sqlcmdvars /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" имяПроекта.dbproj
    В этом примере показано, как развернуть проект базы данных, задав при этом другую целевую базу данных и строку подключения и переопределив конфигурацию и переменные развертывания.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:BuildScriptName=имяСкрипта.sql /p:outdir=путьСкриптаПостроения /p:TargetDatabase=обновленнаяЦелеваяБазаДанных;TargetConnectionString="Data Source=имяЭкземпляра\имяЦелевойБазыДанных;Integrated Security=True;Pooling=False" путьПроекта\имяПроекта.dbproj
    В этом примере демонстрируется развертывание базы данных с компьютера, отличного от того, на котором выполнено построение. Например, этот синтаксис можно использовать, если имеется центральный компьютер построения, создающий скрипт построения каждый вечер. Необходимо задать имя скрипта построения, путь, по которому его можно найти (outdir), конечную базу данных и путь и имя файла проекта базы данных.

  • MSBuild @dbbuild.arf имяПроекта.dbproj
    В этом примере демонстрируется использование файла ответов для предоставления аргументов командной строки. Этот файл, dbbuild.arf, может содержать любые допустимые аргументы MSBuild, включая те, что переопределяют свойства проекта.

  • MSBuild /target:Rebuild имяПроекта.dbproj
    В этом примере заново выполняется построение заданного проекта или решения, даже если они не изменились со времени последнего построения.

  • MSBuild /target:Clean имяПроекта.dbproj
    В этом примере демонстрируется удаление всех имеющихся скриптов построения. В большинстве случаев, это действие выполняется с другим операциями построения или развертывания.

Примечание

Ключ /target: можно сократить до /t:, а ключ /property: — до /p:.

Дополнительные сведения см. в разделе Справочные сведения о командной строке MSBuild.

Дополнительные сведений о файлах ответов см. в следующем разделе на веб-сайте Майкрософт: Файлы ответов MSBuild.

Примечание

Для запуска MSBuild.exe нужно либо воспользоваться командной строкой Visual Studio, либо запустить пакетный файл vsvars32.bat.Этот пакетный файл находится в папке, заданной переменной среды %VS80COMNTOOLS%.

Необходимое программное обеспечение на компьютере построения.

В Visual Studio Team Foundation Server 2010 предусмотрена встроенная поддержка построения, развертывания, модульного тестирования и создания данных для проекта базы данных. Нет необходимости устанавливать Visual Studio на компьютер построения. Если на компьютере построения не используется Visual Studio Team Foundation Server 2010, необходимо установить на этот компьютер Visual Studio 2010 Professional, Visual Studio 2010 Premium или Visual Studio 2010 Ultimate.

Кроме того, если требуется производить развертывание базы данных с Team Foundation Build каким-либо иным образом, чем в ходе модульного теста базы данных, необходимо выполнить дополнительную установку. Необходимо скопировать папку %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy и ее содержимое, включая вложенные папки, из установки Visual Studio 2010 на компьютер построения. Дополнительные сведения см. в разделах Практическое руководство. Развертывание изменений с использованием Team Foundation Build и Пошаговое руководство. Определение пользовательского рабочего процесса для развертывания базы данных из Team Foundation Build.

Свойства проекта

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

Переопределение свойств манифеста развертывания

Свойства развертывания по умолчания (например конфигурацию развертывания, строку подключения и переменные SQLCMD) можно переопределить при развертывании из командной строки. Это можно делать в случае необходимости развертывания DBSCHEMA-файла в нескольких средах.

Например, при необходимости развернуть схему, определенную в файле EnterpriseDB.dbproj, в среде разработки, тестовой и производственной среде, можно воспользоваться следующими командами в командной строке.

Среда развертывания

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Development.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Development.sqlcmdvars /p:TargetConnectionString="Data Source=DEV\sql2008;Integrated Security=true;Pooling=false"

Тестовая среда

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\UserTest.sqldeployment /p:SqlCommandVariablesFile=sql\debug\UserTest.sqlcmdvars /p:TargetConnectionString="Data Source=USERTEST\sql2008;Integrated Security=true;Pooling=false"

Производственная среда

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Production.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Production.sqlcmdvars /p:TargetConnectionString="Data Source=PRODUCTION\sql2008;Integrated Security=true;Pooling=false"

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

См. также

Задачи

Практическое руководство. Построение проекта базы данных для создания файла скомпилированной схемы (.dbschema)

Практическое руководство. Развертывание изменений в новой или существующей базе данных

Пошаговое руководство. Создание и развертывание новой базы данных с управлением версиями

Пошаговое руководство. Развертывание изменений в существующей базе данных, находящейся под контролем системы управления версиями

Основные понятия

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

Построение и развертывание баз данных в тестовой или производственной среде

Журнал изменений

Дата

Журнал

Причина

Июль 2010

Для устранения непонимания, о котором сообщалось на форумах MSDN, уточнено, какое программное обеспечение требуется на компьютере построения.

Обратная связь от клиента.