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

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

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

Перед началом

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

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

Для обновления на месте существует четыре варианта:

  • Игнорировать потерю данных. Если значение true, обновление продолжается, даже если некоторые операции приводят к потере данных. Если значение False, эти операции завершают обновление. Например, если таблица в текущей базе данных отсутствует в схеме нового DAC, таблица удаляется, если задано значение True . Значение по умолчанию равно True.

  • Блокировка изменений — если значение true, обновление завершается, если схема базы данных отличается от этой схемы, определенной в предыдущем DAC. Если этот параметр равен False, обновление продолжится даже в случае обнаружения изменений. Значение по умолчанию равно False.

  • Откат при сбое — если true, обновление заключено в транзакцию; если возникают ошибки, выполняется попытка отката. Если значение False, все изменения фиксируются по мере их выполнения и при возникновении ошибок может потребоваться восстановить предыдущую резервную копию базы данных. Значение по умолчанию равно False.

  • Пропустить проверку политики. Если значение true, политика выбора сервера DAC не вычисляется. Если значение false, политика вычисляется, а обновление завершается, если возникает ошибка проверки. Значение по умолчанию равно False.

Ограничения

Обновления DAC могут выполняться только в базе данных SQL или SQL Server 2005 (9.x) с пакетом обновления 4 (SP4) или более поздней версии.

Предварительные условия

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

Перед началом обновления необходимо выполнить несколько действий для проверки пакета DAC и действий по обновлению. Дополнительные сведения о том, как выполнить эти проверки, см. в разделе Validate a DAC Package.

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

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

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

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

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

Безопасность

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

Разрешения

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

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

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

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

  2. Разверните параметр "Задачи" и выберите параметр "Обновить приложения уровня данных".

  3. Выполните шаги в диалоговых окнах мастера.

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

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

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

    4. Страница параметров

    5. Просмотр плана обновления

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отмена — мастер прекращает работу без развертывания DAC.

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

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

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

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

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

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

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

Сохранить отчет . Нажмите кнопку, чтобы сохранить отчет об изменениях, обнаруженных мастером между объектами в базе данных и их коллегами в определении DAC. Затем вы можете просмотреть отчет, чтобы определить, нужно ли предпринять меры после завершения обновления, включив некоторые или все объекты, перечисленные в отчете, в новую базу данных.

< Предыдущая — возвращается на страницу выбора пакета DAC.

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

Отмена — мастер прекращает работу без развертывания DAC.

Страницы параметров

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

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

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

< Предыдущая — возвращается на страницу "Обнаружение изменений ".

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

Отмена — мастер прекращает работу без развертывания DAC.

Просмотр страницы «План обновления»

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

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

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

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

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

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

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

< Предыдущая — возвращается на страницу "Обнаружение изменений ".

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

Отмена — мастер прекращает работу без развертывания DAC.

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

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

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

< Предыдущий — возвращает вас на страницу "Просмотр плана обновления".

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

Отмена — мастер прекращает работу без развертывания DAC.

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

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

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

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

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

С помощью PowerShell

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

  1. Создайте объект сервера SMO и задайте его экземпляру, который содержит обновляемый DAC.

  2. Откройте объект ServerConnection и подключитесь к тому же экземпляру.

  3. Используйте System.IO.File для загрузки файла пакета приложения уровня данных.

  4. Используйте add_DacActionStarted и add_DacActionFinished для подписки на события обновления приложения уровня данных.

  5. Задайте DacUpgradeOptions.

  6. Для обновления приложения уровня данных используйте метод IncrementalUpgrade .

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

Пример (PowerShell)

В следующем примере обновляется DAC с именем MyApplication в экземпляре ядра СУБД по умолчанию с помощью новой версии DAC в пакете MyApplication2017.dacpac.

## Set an SMO Server object to the default instance on the local computer.
CD SQLSERVER:\SQL\localhost\DEFAULT
$srv = get-item .
  
## 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)
  
## Load the DAC package file.
$dacpacPath = "C:\MyDACs\MyApplication2017.dacpac"
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
  
## Subscribe to the DAC upgrade events.
$dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
$dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
  
## Upgrade the DAC and close the package.
$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
  
## Upgrade the DAC
$dacstore.IncrementalUpgrade($dacName, $dacType, $upgradeProperties)
## Close the package file.
$fileStream.Close()

См. также