NS<NotificationClassName>NotificationDistribution 视图
将来自若干个内部 Microsoft SQL Server Notification Services 表的数据组合起来,以提供有关通知分发尝试的信息。Notification Services 使用以下命名约定为每个通知类创建一个视图:NSNotificationClassNameNotificationDistribution。
例如,随 Notification Services 提供的 Stock 示例有两个通知类:StockNotifications 和 PortfolioNotifications。关联的视图被命名为 NSStockNotificationsNotificationDistribution 和 NSPortfolioNotificationsNotificationDistribution。
NSNotificationClassNameNotificationDistribution 视图包含下表中显示的列。
列 | 数据类型 | 说明 |
---|---|---|
NotificationId |
bigint |
通知 ID 号。 |
DeliveryChannelName |
nvarchar (255) |
用于传递通知的传递通道的名称。 |
DistributorName |
nvarchar(255) |
用于传递通知的分发服务器的名称。 |
DeliveryRequestTime |
datetime |
分发服务器将通知数据传递到传递协议以进行传递的日期和时间。 |
SentTime |
datetime |
实际发送通知的时间。 |
DeliveryStatusDescription |
nvarchar(255) |
传递尝试的状态:未尝试、成功或失败。有关详细信息,请参阅“备注”部分。 |
DeliveryStatusInfo |
nvarchar(2048) |
报告通知状态时传递协议返回分发服务器的状态消息。此消息通常用于报告失败原因。NULL 指示未发送状态消息。 |
NotificationText |
nvarchar(2048) |
通知的文本。 |
SubscriberId |
nvarchar(255) |
通知的订阅方的 ID。 |
DeviceName |
nvarchar(255) |
订阅中指定的传递设备名称。 |
SubscriberLocale |
nvarchar(10) |
通知的订阅方的区域设置。 |
通知类字段 (1-n) |
application-defined |
通知类中指定的所有列也显示在此视图中。 |
LinkNotificationId |
bigint |
使用摘要传递时在摘要中包含的第一个通知的 ID。摘要中的所有后续通知均包含此 ID。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';