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


Как обновить приложение уровня данных

Для изменения схемы и свойств развернутого в настоящее время приложения уровня данных (DAC) с заданием схемы и свойств, определенных в новой версии приложения уровня данных, используется мастер обновления приложений уровня данных или скрипт Windows PowerShell.

Обновление на месте и параллельное обновление

Существует два типа обновления приложения уровня данных.

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

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

В SQL Server 2008 R2 и Microsoft Visual Studio 2010 имелась платформа DAC Framework 1.0, которая поддерживала только параллельное обновление. Параллельное обновление не поддерживает SQL Azure. В состав SQL Server 2008 R2 с пакетом обновления 1 (SP1) и Visual Studio 2010 с пакетом обновления 1 (SP1) входит новая платформа DAC Framework 1.1, в которой реализовано обновление на месте для служб SQL Azure и экземпляров компонента Database Engine. Дополнительные сведения о платформе DAC Framework 1.1 см. в разделе Поддержка приложений уровня данных для объектов и версий SQL Server

В первоначальной версии мастера обновления приложений уровня данных производилось параллельное обновление DAC Framework 1.0. Версия мастера, включенного в состав SQL Server 2008 R2 с пакетом обновления 1 (SP1), выполняет обновление на месте.

Пользователи SQL Server 2008 R2 могут обновить и платформу DAC Framework 1.1, и мастер обновления, установив SQL Server 2008 R2 с пакетом обновления 1 (SP1).

Подготовка к обновлению

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

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

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

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

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

Выбор параметров обновления приложения уровня данных

Обновление на месте может осуществляться четырьмя способами.

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

Блокировать изменения ― при значении True обновление будет прекращено, если схема базы данных отличается от схемы, определенной в предыдущей версии приложения уровня данных. При значении False обновление продолжится даже в случае обнаружения изменений. Значение по умолчанию равно False.

Откат при сбое ― при значении True обновление оформляется в виде транзакций, а в случае возникновения ошибок выполняется попытка отката изменений. При значении False все изменения фиксируются по мере внесения, а в случае возникновения ошибок необходимо будет восстановить предыдущую версию базы данных из резервной копии. Значение по умолчанию равно False.

Пропуск проверки политики ― при значении True проверка политики выбора сервера DAC не выполняется. При значении False проверка политики выполняется, а если в результате выявляется несоответствие, то обновление прекращается. Значение по умолчанию равно False.

Требования

Обновление DAC может проводиться только членами предопределенных ролей сервера sysadmin или serveradmin либо членами предопределенной роли сервера dbcreator с правами доступа ALTER ANY LOGIN. Имя входа должно быть владельцем существующей базы данных. Этот мастер также может быть запущен от учетной записи системного администратора SQL Server с именем sa.

Имя приложения в пакете приложения уровня данных должно быть таким же, как и имя приложения развернутого приложения уровня данных. Например, если имя текущего приложения уровня данных — GeneralLedger, то обновить его можно только с помощью пакета приложения уровня данных с именем приложения GeneralLedger.

Пароли имен входа

Для повышения безопасности проверки подлинности SQL Server имена входа хранятся в пакете DAC без пароля. При развертывании или обновлении пакета имя входа создается как отключенное имя входа с созданным паролем. Чтобы включить имена входа, войдите в систему под учетной записью, имеющей разрешение ALTER ANY LOGIN и с помощью команды ALTER LOGIN включите имя входа и присвойте ему новый пароль, который можно передать пользователю. Это не требуется для имен входа, использующих проверку подлинности Windows, поскольку SQL Server не управляет их паролями.

Рекомендации по месту на диске

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

При параллельном обновлении текущая база данных для развертываемого пакета DAC сохраняется, при этом также создается новая база данных, в которую копируются имеющиеся данные. Необходимо наличие достаточного свободного места на диске для размещения новой базы данных, которая имеет такой же размер, как и существующая. Перед запуском параллельного обновления убедитесь, что объем данных в текущей базе данных не слишком велик и поместится в новую базу данных. База данных, созданная в результате обновления, получит параметры размера по умолчанию из инструкции CREATE DATABASE. Значение по умолчанию рассчитано на один файл данных с первоначальным размером 3 МБ и неограниченным числом приращений по 1 МБ, а также один файл журнала первоначальным размером 1 МБ и максимальным ограничением размера в 2 ГБ.

Варианты параллельного обновления базы данных

При параллельном обновлении база данных, созданная во время фазы развертывания, получит все параметры по умолчанию из инструкции CREATE DATABASE, кроме следующих.

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

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

Некоторые параметры баз данных, например TRUSTWORTHY, DB_CHAINING и HONOR_BROKER_PRIORITY, нельзя изменять в рамках процедуры развертывания. Физические свойства, например количество файловых групп или количество и размер файлов, нельзя изменять в рамках процедуры развертывания. После завершения развертывания можно настроить базу данных с помощью инструкции ALTER DATABASE, среды Среда SQL Server Management Studio или программы SQL Server PowerShell. Дополнительные сведения см. в разделе Изменение базы данных.

Обновление приложения уровня данных на месте с помощью PowerShell

В этом примере для выполнения обновления приложения уровня данных на месте используется метод DAC Framework 1.1 IncrementalUpgrade(). Этот метод обновляет приложения уровня данных в SQL Server или SQL Azure. Обновлять версию платформы рекомендуется путем установки SQL Server 2008 R2 с пакетом обновления 1 (SP1).

Создайте файл скрипта PowerShell (такой как IncrementalUpgradeDAC.ps1), содержащий следующий код.

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

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Добавьте код, чтобы открыть объект ServerConnection и подключиться к тому же экземпляру.

    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
  3. Добавьте код для загрузки файла пакета DAC. В этом примере происходит загрузка файла MyApplicationVNext.dacpac.

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplicationVNext.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. Добавьте код для подписки на события развертывания DAC.

    ## Subscribe to the DAC deployment events.
    $dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
    $dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
    
  5. Добавьте код, чтобы указать приложение уровня данных для обновления и параметры обновления, обновите приложение уровня данных и закройте файл пакета DAC.

    ## Upgrade the DAC and create the database.
    $dacName  = "MyApplication"
    ## Set the upgrade options.
    $upgradeProperties = New-Object Microsoft.SqlServer.Management.Dac.DacUpgradeOptions
    $upgradeProperties.blockonchanges = $true
    $upgradeProperties.ignoredataloss = $false 
    $upgradeproperties.rollbackonfailure = $true
    $upgradeProperties.skippolicyvalidation = $false
    ## Do not set IgnoreDrift, replaced by BlockOnChanges.
    
    ## Upgrade the DAC and create the database.
    $dacstore.IncrementalUpgrade($dacName, $dacType, $upgradeProperties)
    
    $fileStream.Close()
    

Запустите IncrementalUgradeDAC.ps1 из сеанса PowerShell, в котором была выполнена загрузка оснасток SQL Server PowerShell, или с помощью программы командной строки sqlps.

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

В среде Management Studio для запуска мастера обновления приложений уровня данных необходимо открыть узел сервера в области Обозреватель объектов, выбрать узел Управление, а затем выбрать узел Приложения уровня данных. В области Обозреватель объектов щелкните правой кнопкой мыши узел приложений уровня данных и выберите команду Обновить приложение уровня данных…

ПредупреждениеВнимание!

Мастер обновления приложений уровня данных в первоначальной версии SQL Server 2008 R2 выполнял параллельное обновление, которое не поддерживается на SQL Azure. В этом разделе описано, как с помощью новой версии мастера в SQL Server 2008 R2 с пакетом обновления 1 (SP1) выполнить параллельное обновление.

Щелкните ссылку в приведенном ниже списке, чтобы открыть в мастере подробности, относящиеся к этой странице.

  • Вводная страница

  • Страница «Выбор пакета»

  • Страница «Просмотр политики»

  • Страница «Обнаружение изменений»

  • Анализ плана обновления

  • Страница «Сводка»

  • Страница «Обновление DAC»

Вводная страница

На этой странице описаны шаги обновления приложения уровня данных.

Больше не показывать эту страницу. Щелкните этот флажок, чтобы предотвратить отображение этой страницы в будущем.

Далее > — переход на страницу Выбор пакета.

Отмена — работа мастера завершается без обновления DAC.

Страница «Выбор пакета»

На этой странице указывается пакет приложения уровня данных, содержащий новую версию приложения уровня данных. Страница проходит через два состояния.

Выбор пакета DAC

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

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

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

Версия — доступное только для чтения поле, в котором отображается версия, присвоенная пакету DAC при создании или извлечении из базы данных.

Описание — доступное только для чтения поле, в котором отображается описание, сделанное при создании или извлечении пакета DAC из базы данных.

< Назад — возврат к странице Введение.

Далее > — отображается индикатор выполнения, когда мастер подтверждает, что выбранный файл является исправным пакетом DAC.

Отмена — работа мастера завершается без обновления DAC.

Проверка пакета DAC

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

Проверка содержимого DAC — индикатор выполнения, отражающий текущее состояние процесса выполнения.

< Назад — возврат к первоначальному состоянию страницы Выбор пакета.

Далее > — переход к окончательной версии страницы Выбор пакета.

Отмена — работа мастера завершается без развертывания DAC.

Страница «Просмотр политики»

На этой странице можно просмотреть результаты проверки политики выбора на сервере DAC, если у DAC есть политика. Политика выбора сервера приложения уровня данных не является обязательной, она назначается приложению уровня данных, созданному в среде Microsoft Visual Studio. Политика с помощью аспектов политики выбора серверов задает условия, которым экземпляр компонента Database Engine должен соответствовать, чтобы на нем можно было размещать DAC.

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

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

< Назад — возврат на страницу Выбор пакета.

Далее > — переход на страницу Обнаружение изменений.

Отмена — работа мастера завершается без обновления DAC.

Страница «Обнаружение изменений»

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

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

Результаты обнаружения изменений — указывается, что анализ завершен, а его результаты приводятся ниже.

База данных «ИмяБазыДанных» не изменилась — мастер не обнаружил отличий объектов, определенных в базе данных и их копий из определения приложения уровня данных.

База данных «ИмяБазыДанных» изменилась — мастер обнаружил отличия между объектами из базы данных и их копиями из определения приложения уровня данных.

Продолжить, несмотря на возможные потери изменений — указывает, что пользователь понимает, что некоторые объекты или данные из текущей базы данных не будут перенесены в новую базу данных, но все равно хочет продолжить обновление. Эту кнопку следует нажимать только после анализа отчета об изменениях, понимая, какие действия необходимо выполнить, чтобы вручную передать объекты или данные, которые потребуются в новой базе данных. Если такой уверенности нет, нажмите кнопку Сохранить отчет, чтобы сохранить отчет об изменениях, а затем нажмите кнопку Отмена. Проанализируйте отчет, запланируйте перенос необходимых объектов и данных после завершения обновления, а затем повторно запустите мастер. Дополнительные сведения см. в разделе Обновление приложений уровня данных.

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

< Назад — возврат на страницу Выбор пакета приложения уровня данных.

Далее > — переход на страницу Анализ плана обновления.

Отмена — работа мастера завершается без развертывания приложения уровня данных.

Страница «Анализ плана обновления»

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

Следующие действия будут использоваться для обновления приложения уровня данных. Просмотрите отображенные сведения для проверки правильности произведенных действий. В столбце Действие показаны все действия (например, инструкции Transact-SQL), которые будут выполняться для обновления. В столбце Потеря данных будет содержаться предупреждение, если соответствующее действие может вызвать удаление данных.

Обновить — обновляет список действий.

Сохранить отчет действия — сохраняет содержимое окна действия в виде HTML-файла.

Продолжить, несмотря на возможные потери изменений — указывает, что пользователь понимает, что некоторые объекты или данные из текущей базы данных не будут перенесены в новую базу данных, но все равно хочет продолжить обновление. Эту кнопку следует нажимать только после анализа отчета об изменениях, понимая, какие действия необходимо выполнить, чтобы вручную передать объекты или данные, которые потребуются в новой базе данных. Если не уверены, нажмите кнопку Сохранить отчет действия, чтобы сохранить отчет о выполнении, а затем кнопку Сохранить скрипты, чтобы сохранить скрипт Transact-SQL. После этого нажмите кнопку Отмена. Проанализируйте отчет и скрипт, запланируйте перенос необходимых объектов и данных после завершения обновления, а затем повторно запустите мастер. Дополнительные сведения см. в разделе Обновление приложений уровня данных.

Сохранить скрипты — сохраняет инструкции Transact-SQL, которые будут выполнены для обновления, в текстовом файле.

Восстановить значения по умолчанию — возвращает параметр в значение по умолчанию (false).

< Назад — возврат к странице Обнаружение изменений.

Далее > — переход на страницу Сводка.

Отмена — работа мастера завершается без развертывания приложения уровня данных.

Страница «Сводка»

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

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

< Назад — возвращение к странице Обнаружение изменений.

Далее> — развертывание приложения уровня данных и отображение результатов на странице Обновление приложения уровня данных.

Отмена — работа мастера завершается без развертывания DAC.

Страница «Обновление DAC»

Эта страница сообщает об успешном или неуспешном завершении операции обновления.

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

Сохранить отчет — сохранение отчета об обновлении в HTML-файле. В этом файле содержится отчет о состоянии каждого из действий, в том числе все выданные сообщения об ошибках. По умолчанию используется папка «SQL Server Management Studio\DAC Packages», вложенная в папку «Documents» рабочего каталога учетной записи пользователя Windows.

Готово — завершает работу мастера.

Параллельное обновление приложения уровня данных с помощью PowerShell

В этом примере для выполнения параллельного обновления приложения уровня данных используется метод DAC Framework 1.0 Upgrade(). Метод Upgrade() будет удален в следующей версии SQL Server, он не поддерживает SQL Azure. Для выполнения обновления на месте рекомендуется использовать метод DAC Framework 1.1 IncrementalUpgrade() (описанный выше).

Параллельное обновление может осуществляться двумя способами.

  • Пропускать «дрейф» ― при значении True обновление продолжается даже при обнаружении изменений. При значении False обновление прекращается, если схема базы данных отличается от схемы, определенной в предыдущем приложении уровня данных.

  • Вызывать политику выбора сервера ― при значении True выполняется проверка политики выбора сервера DAC, в случае несоответствия которой обновление прекращается. При значении False проверка политики не выполняется.

Чтобы выполнить обновление на месте, создайте скрипт PowerShell (например, с именем RegisterDAC.ps1), содержащий следующий код.

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

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Добавьте код, чтобы открыть объект ServerConnection и подключиться к тому же экземпляру.

    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
  3. Добавьте код для загрузки файла пакета DAC. В этом примере происходит загрузка файла MyApplicationVNext.dacpac.

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplicationVNext.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. Добавьте код для подписки на события развертывания DAC.

    ## Subscribe to the DAC deployment events.
    $dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
    $dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
    
  5. Добавьте код для обновления DAC и закройте файл пакета DAC.

    ## Upgrade the DAC and create the database.
    $dacName  = "MyApplication"
    $evaluateTSPolicy = $true
    $ignoreDriftOption = $true
    $upgradeProperties = New-Object Microsoft.SqlServer.Management.Dac.DacUpgradeOptions($evaluateTSPolicy, $ignoreDriftOption)
    $dacstore.Upgrade($dacName, $dacType, $upgradeProperties)
    $fileStream.Close()
    

Запустите UgradeDAC.ps1 из сеанса PowerShell, в котором была выполнена загрузка оснасток SQL Server PowerShell, или с помощью программы командной строки sqlps.

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

Обновленное содержимое

Добавлен раздел, посвященный использованию PowerShell.

Добавлены сведения об обновлении на месте и пакете дополнительных компонентов DAC Framework 1.1.

SQL Server 2008 R2 с пакетом обновления 1 (SP1) включает и платформу DAC Framework 1.1, и новый мастер обновления, который выполняет обновление на месте.