更新應用程式
部署 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 執行個體
- 如何:更新 Notification Services 的執行個體 (SQL Server Management Studio)
- 如何:更新 Notification Services 的執行個體 (命令提示字元)
還原訂閱資料
如果您變更 ADF 中的訂閱類別,Notification Services 會在更新期間重新建立訂閱資料表。發生這種情況時,Notification Services 會將 "Old" 附加至資料表名稱,來重新命名現有的資料表,如下所示:
資料表名稱 | 備份名稱 |
---|---|
NSSubscriptionClassNameSubscriptions |
NSSubscriptionClassNameSubscriptionsOld |
NSSubscriptionClassNameSchedules (限排程的訂閱) |
NSSubscriptionClassNameSchedulesOld (限排程的訂閱) |
NSSubscriptionClassNameTimeZones (限排程的訂閱) |
NSSubscriptionClassNameTimeZonesOld (限排程的訂閱) |
更新應用程式之後,您可以將資料從備份資料表複製到新資料表,來還原訂閱資料。這項作業的執行方式之一,就是利用 Transact-SQL 查詢,從備份資料表中選取資料,然後將它插入新資料表。
如果在還原資料時需要轉換資料 (例如:將條件值加入新的資料行中),建議您利用 SQL Server 2005 Integration Services (SSIS) (SSIS) 移動資料表之間的資料。
確認還原的訂閱資料之後,您應該刪除或重新命名備份資料表。如果您保留資料表,稍後又重新更新訂閱類別,則更新會失敗,因為備份資料表已經存在。
範例
還原事件觸發的訂閱
「航班」範例應用程式有一個訂閱類別,它利用事件觸發規則來產生通知。就這個訂閱類別而言,所有訂閱資料都儲存在一個命名為 NSFlightSubscriptionsSubscriptions 的資料表中。如果您變更訂閱類別,然後更新「航班」應用程式,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。
還原排程的訂閱
「天氣」應用程式使用排程的訂閱。排程的訂閱資料儲存在三個資料表中: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