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

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

Процесс обновления

Процедура обновления приложения уровня данных SQL Server преобразует развернутое приложение уровня данных в другую версию этого же приложения. Например, чтобы обновить приложение Finance версии 1.0 до Finance версии 2.0. Следующие шаги иллюстрируют постой процесс развертывания.

  • Разработчик баз данных создает DAC Finance 1.0, после чего формирует пакет DAC FinanceVersion1.dacpac.

  • Администратор базы данных развертывает DAC Finance 1.0 и запускает его в работу. Теперь на работающем экземпляре компонента Database Engine имеется развернутый DAC с именем Finance и версией 1.0, а также связанная с ним база данных Finance.

  • После этого разработчик баз данных начинает работать над следующей версией, а по завершении этой работы формирует пакет FinanceVersion2.dacpac.

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

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

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

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

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

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

После внесении в базу данных изменений с помощью какого-либо механизма, отличного от обновления DAC, говорится, что база данных «отошла» от связанного с ней DAC. В качестве примеров можно привести использование инструкции CREATE TRIGGER для добавления нового триггера или использование инструкции ALTER TABLE для изменения структуры таблицы. Изменения некоторых типов могут не позволить процессу обновления приложения уровня данных завершиться, в зависимости от указанных параметров обновления. Изменения в обновленной базе данных также будут отсутствовать.

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

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

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

Дополнительные сведения о том, как создавать скрипты переноса объектов в новую базу данных, см. в разделе Как сформировать сценарий (среда SQL Server Management Studio).

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

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

Обновление на месте выполняет следующие действия.

  • Проверяет, что развернутое приложение DAC и пакет DAC имеют одинаковые имена приложения (например, Finance). Оно также проверяет, удовлетворяет ли экземпляр компонента Database Engine требованиям, приведенным в политике выбора сервера (если она задана) в новой версии DAC, а также содержит ли действующая база данных объекты, неподдерживаемые в DAC.

  • Выполняет все изменения, например инструкции CREATE, ALTER и DROP, необходимые для того, чтобы схема базы данных соответствовала схеме, определенной в новой версии DAC.

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

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

Параллельное обновление

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

Параллельное обновление выполняет следующие действия.

  • Проверяет, что развернутое приложение DAC и пакет DAC имеют одинаковые имена приложения (например, Finance). Оно также проверяет, удовлетворяет ли экземпляр компонента Database Engine требованиям, приведенным в политике выбора сервера (если она задана) в новой версии DAC, а также содержит ли действующая база данных объекты, неподдерживаемые в DAC.

  • Развертывает новую версию DAC из пакета DAC. При этом создается новая база данных с временным именем.

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

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

  • Исходная база данных переименовывается путем добавления строки к концу ее имени.

  • Новой базе данных назначается имя исходной базы данных.

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

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

  • Структура таблицы одинакова во всех трех местах: в текущем определении DAC в msdb, текущей базе данных и в новом DAC. Эта таблица будет в новой базе данных, а операция обновления передаст указанные в ней данные в новую базу данных. Передача выполняется с помощью инструкции INSERT на основе инструкции SELECT с выборкой из старой таблицы.

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

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

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

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

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

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

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

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

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

Описано обновление на месте, которое позволяет выполнять платформа DAC Framework 1.1. Удалено содержание, дублированное в других разделах.

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