NS<NotificationClassName>NotificationDistribution 檢視
結合若干內部 Microsoft SQL Server Notification Services 資料表中的資料,共同提供有關通知散發嘗試的資訊。Notification Services 會利用下述命名慣例,為每一個通知類別建立一份檢視:NSNotificationClassNameNotificationDistribution。
例如,Notification Services 所檢附的 Stock 範例有兩個通知類別:StockNotifications 和 PortfolioNotifications。相關的檢視稱為 NSStockNotificationsNotificationDistribution 和 NSPortfolioNotificationsNotificationDistribution。
NSNotificationClassNameNotificationDistribution 檢視包含下表所顯示的資料行。
資料行 | 資料類型 | 描述 |
---|---|---|
NotificationId |
bigint |
通知識別碼。 |
DeliveryChannelName |
nvarchar (255) |
傳遞通知所用的傳遞通道名稱。 |
DistributorName |
nvarchar(255) |
傳遞通知所用的散發者名稱。 |
DeliveryRequestTime |
datetime |
散發者將通知資料交給傳遞通訊協定加以傳遞的日期和時間。 |
SentTime |
datetime |
實際傳送通知的時間。 |
DeliveryStatusDescription |
nvarchar(255) |
傳遞嘗試的狀態:尚未嘗試、已成功或是已失敗。如需詳細資訊,請參閱「備註」一節。 |
DeliveryStatusInfo |
nvarchar(2048) |
在報告 notificationstatus 狀態時,傳遞通訊協定傳回給散發者的狀態訊息。它通常是用來報告失敗的原因。NULL 表示沒有傳送任何狀態訊息。 |
NotificationText |
nvarchar(2048) |
通知的文字。 |
SubscriberId |
nvarchar(255) |
通知的訂閱者識別碼。 |
DeviceName |
nvarchar(255) |
訂閱中所指定的傳遞裝置名稱。 |
SubscriberLocale |
nvarchar(10) |
通知的訂閱者地區設定。 |
通知類別欄位 (1-n) |
application-defined |
通知類別中所指定的所有資料行也會出現在這份檢視中。 |
LinkNotificationId |
bigint |
在使用摘要傳遞時,併入摘要中之第一項通知的識別碼。摘要中所有後續通知,都包含這個識別碼。NULL 表示通知不是摘要中的後續通知。 |
備註
NSNotificationClassNameNotificationDistribution 檢視位在應用程式資料庫中。
檢視中的可用資料量,是透過應用程式定義中的散發者記錄設定,在每一個應用程式加以控制。這些應用程式執行設定會控制寫到散發記錄中的內容,因而也會控制這份檢視所能使用的內容。如需詳細資訊,請參閱<設定散發者記錄>。
在 NSNotificationClassNameNotificationDistribution 檢視中,一項通知可以有多個資料列,每一個資料列都代表一次傳遞嘗試。例如,如果一個通知傳遞失敗兩次之後終於成功了,則在這份檢視中,該通知就會出現三個資料列,直到移除處理將這些資料移除為止。
請使用 DeliveryStatusDescription 資料行來判斷通知傳遞狀態。下表含有狀態碼的描述。
DeliveryStatusDescription 值 | 描述 |
---|---|
未曾傳遞過:第一次嘗試暫止中 |
散發者尚未傳遞通知。可能是因為應用程式設定、尚未散發的通知、發生散發問題 (例如,散發者停用) 或是失敗太多次 (由 FailuresBeforeAbort 設定加以控制) 所導致。 |
傳遞成功 |
傳遞通訊協定傳回一值,表示已經成功傳遞。 |
傳遞失敗 |
發生下列一個事件:
|
若要排解失敗的傳遞,請在 Microsoft Windows 事件檢視器的應用程式記錄檔中,找出錯誤訊息。請注意,一個傳遞失敗也許包含了好幾個錯誤;請查看每一個 Notification Services 錯誤訊息的描述。
權限
sysadmin 和 db_owner 伺服器角色的成員,以及 Notification Services 的 NSAnalysis 角色,都可以使用這份檢視。
範例
請在 Stock 範例中執行下述查詢,判斷是否有任何通知傳遞嘗試失敗:
USE StockInstanceStock;
SELECT NotificationId, DeliveryStatusInfo
FROM NSStockNotificationsNotificationDistribution
WHERE DeliveryStatusDescription = N'Delivery failed';
上述查詢會傳回所有尚未利用移除處理移除的失敗通知。如果一項通知含有多個失敗的傳遞嘗試,查詢會傳回每個失敗各一個資料列。
若要從 Stock 範例傳回曾經失敗一或多次的通知清單,請執行下述查詢:
USE StockInstanceStock;
SELECT DISTINCT(NotificationId)
FROM NSStockNotificationsNotificationDistribution
WHERE DeliveryStatusDescription = N'Delivery failed';