Обновление приложения

После развертывания экземпляра служб SQL Server Notification Services можно обновить приложения, размещенные в экземпляре. Обновление приложения производится путем изменения определения приложения и последующим использованием среды SQL Server Management Studio или команды nscontrol update для применения изменений.

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

Перед обновлением приложения помните о следующем:

  • При изменении класса подписки в файле определения приложения (ADF) службы Notification Services создают новые таблицы подписок. Службы Notification Services выполняют резервное копирование существующих данных подписок; эти резервные копии можно использовать для восстановления данных подписок. Дополнительные сведения см. ниже, в разделе «Восстановление данных подписок».
  • При обновлении приложения обычно удаляются данные о событиях и уведомлениях. Необходимо запланировать повторную пересылку пакетов событий, которые не были обработаны до обновления, или пакетов событий, которые должны были быть обработаны во время обновления приложения.
  • Убедитесь в том, что весь код в определении приложения, создающий объект SQL Server, проверяет наличие и удаляет или переименовывает все существующие объекты с одинаковыми именами. Процесс обновления не осуществляет автоматического удаления или переименования объектов SQL Server, определенных пользователями, поэтому при явном удалении или переименовании объектов SQL Server исключаются ошибки, связанные с дублирующимися объектами.
  • При использовании служб Notification Services выпуска Standard Edition, при указании в конфигурации экземпляра или определении приложений параметров, не поддерживаемых выпуском Standard Edition, процесс обновления останавливается, и обновление экземпляра не проводится. Дополнительные сведения см. в разделе Выпуски служб Notification Services.

Обновление приложения уведомления

Обновление экземпляра служб Notification Services

Восстановление данных подписки

При изменении класса подписки в файле ADF служб Notification Services во время обновления воссоздают таблицы подписок. При этом службы Notification Services переименовывают существующие таблицы, добавляя к их именам слово «Old», следующим образом:

Имя таблицы Имя резервной копии

NSимя_класса_подпискиSubscriptions

NSимя_класса_подпискиSubscriptionsOld

NSSubscriptionClassNameSchedules (только запланированные подписки)

NSSubscriptionClassNameSchedulesOld (только запланированные подписки)

NSSubscriptionClassNameTimeZones (только запланированные подписки)

NSSubscriptionClassNameTimeZonesOld (только запланированные подписки)

После обновления приложения можно восстановить данные подписки путем копирования данных из таблиц резервных копий в новые таблицы. Одним из способов является использование запросов на языке Transact-SQL для выбора данных из таблиц резервных копий и вставки их в новые таблицы.

При необходимости преобразования данных во время их восстановления, например добавление условного значения в новый столбец, проанализируйте возможность использования служб SQL Server 2005 Integration Services (SSIS) (служб SSIS) для перемещения данных между таблицами.

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

Примеры

Восстановление подписок, запускаемых событиями

Образец приложения Flight для создания уведомлений содержит класс подписок, который использует запускаемые событиями правила. Для этого класса все данные подписки хранятся в таблице с именем NSFlightSubscriptionsSubscriptions. При изменении класса подписки и последующем обновлении приложения Flight служб Notification Services создают резервную копию данных подписки в таблице с именем NSFlightSubscriptionsSubscriptionsOld.

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

USE [FlightInstanceFlight];
SELECT * FROM [NSFlightSubscriptionsSubscriptions];
SELECT * FROM [NSFlightSubscriptionsSubscriptionsOld];

Если известны имена столбцов, то можно написать запрос для копирования данных из NSFlightSubscriptionsSubscriptionsOld в NSFlightSubscriptionsSubscriptions.

При обновлении, используемом в данном примере, столбец Carrier в классе подписок (и правиле) был переименован в Airline. Это изменение отражено в нижеприведенном запросе:

USE [FlightInstanceFlight];
SET IDENTITY_INSERT [dbo].[NSFlightSubscriptionsSubscriptions] ON;
INSERT INTO [dbo].[NSFlightSubscriptionsSubscriptions]
( [SubscriptionId], [SubscriberId], [Created], [Updated], [Enabled], 
    [DeviceName], [SubscriberLocale], [LeavingFrom], [GoingTo], 
    [Airline], [Price] )
SELECT [SubscriptionId], [SubscriberId], [Created], [Updated], 
       [Enabled], [DeviceName], [SubscriberLocale], [LeavingFrom], 
       [GoingTo], [Carrier], [Price]
FROM [dbo].[NSFlightSubscriptionsSubscriptionsOld];
SET IDENTITY_INSERT [dbo].[NSFlightSubscriptionsSubscriptions] OFF;

После успешного завершения выполнения этого запроса можно удалить или переименовать таблицу NSFlightSubscriptionsSubscriptionsOld.

Восстановление запланированных подписок

В приложении Weather используются запланированные подписки. Данные запланированных подписок хранятся в трех таблицах: NSWeatherSubscriptionsSubscription, NSWeatherSubscriptionsSchedules, NSWeatherSubscriptionsTimeZones. При изменении класса подписки и последующем обновлении приложения можно восстановить данные в этих таблицах, используя следующие запросы:

Вначале восстановите данные о часовых поясах:

USE [WeatherInstanceWeather];
INSERT INTO [dbo].[NSWeatherSubscriptionsTimeZones]
    ( [TimeZoneId], [UtcOffset] )
SELECT [TimeZoneId], [UtcOffset]
FROM [dbo].[NSWeatherSubscriptionsTimeZonesOld];

Затем восстановите данные о расписании:

SET IDENTITY_INSERT [dbo].[NSWeatherSubscriptionsSchedules] ON
INSERT INTO [dbo].[NSWeatherSubscriptionsSchedules]
    ( [ScheduleId], [UtcTime], [TimeZoneId], [ScheduleType], 
      [ScheduleData], [ScheduleText] )
SELECT [ScheduleId], [UtcTime], [TimeZoneId], [ScheduleType], 
       [ScheduleData], [ScheduleText]
FROM [dbo].[NSWeatherSubscriptionsSchedulesOld]
ORDER BY [ScheduleId];
SET IDENTITY_INSERT [dbo].[NSWeatherSubscriptionsSchedules] OFF;

И, наконец, восстановите данные подписки:

SET IDENTITY_INSERT [dbo].[NSWeatherSubscriptionsSubscriptions] ON;
INSERT INTO [dbo].[NSWeatherSubscriptionsSubscriptions]
    ( [SubscriptionId], [SubscriberId], [Created], [Updated], 
      [Enabled], [ScheduleId], [DeviceName], [SubscriberLocale], 
      [City] )
SELECT [SubscriptionId], [SubscriberId], [Created], [Updated], 
       [Enabled], [ScheduleId], [DeviceName], [SubscriberLocale], 
       [City]
FROM [dbo].[NSWeatherSubscriptionsSubscriptionsOld];
SET IDENTITY_INSERT [dbo].[NSWeatherSubscriptionsSubscriptions] OFF;

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

См. также

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

Добавление приложения к экземпляру
Удаление приложения из экземпляра

Другие ресурсы

Обновление экземпляров и приложений
Службы SQL Server Integration Services

Справка и поддержка

Получение помощи по SQL Server 2005