查询通知 - sys.dm_qn_subscriptions
适用范围:SQL Server
返回有关服务器中的活动查询通知订阅的信息。 可以使用此视图检查服务器或指定数据库中的活动订阅,或者检查指定服务器主体。
列名称 | 数据类型 | 说明 |
---|---|---|
id | int | 订阅的 ID。 |
database_id | int | 执行通知查询所在数据库的 ID。 该数据库存储该订阅的相关信息。 |
sid | varbinary(85) | 创建并拥有该订阅的服务器主体的安全 ID。 |
object_id | int | 存储有关订阅参数信息的内部表的 ID。 |
created | datetime | 创建订阅的日期和时间。 |
timeout | int | 订阅超时(以秒为单位)。 在经过这段时间后,通知将标记为激发。 注意:实际触发时间可能大于指定的超时时间。但是,如果使订阅失效的更改发生在指定的超时之后,但在触发订阅之前,SQL Server 可确保在发生更改时触发。 |
status | int | 指示订阅的状态。 有关代码列表,请参阅备注下的表。 |
关系基数
源 | 操作 | 开 | 类型 |
---|---|---|---|
sys.dm_qn_subscriptions | sys.databases | database_id | 多对一 |
sys.dm_qn_subscriptions | sys.internal_tables | object_id | 多对一 |
注解
状态代码为 0 指示未确定的状态。
下面的状态代码指示由于更改而激发了订阅:
代码 | 次要状态 | 信息 |
---|---|---|
65798 | 因为更改数据而激发订阅 | 由插入触发的订阅 |
65799 | 因为更改数据而激发订阅 | 删除 |
65800 | 因为更改数据而激发订阅 | 更新 |
65801 | 因为更改数据而激发订阅 | 合并 |
65802 | 因为更改数据而激发订阅 | 截断表 |
66048 | 因为超时而激发订阅 | 未确定的信息模式 |
66315 | 因为更改对象而激发订阅 | 删除了对象或用户 |
66316 | 因为更改对象而激发订阅 | 修改了对象 |
66565 | 因为分离或删除了数据库而激发订阅 | 重新启动了服务器或数据库 |
66571 | 因为分离或删除了数据库而激发订阅 | 删除了对象或用户 |
66572 | 因为分离或删除了数据库而激发订阅 | 修改了对象 |
67341 | 由于服务器上缺少 od 资源而激发订阅 | 由于服务器上缺少 od 资源而激发订阅 |
下面的状态代码指示无法创建订阅:
代码 | 次要状态 | 信息 |
---|---|---|
132609 | 因为不支持此语句而导致订阅创建失败 | 查询过于复杂 |
132610 | 因为不支持此语句而导致订阅创建失败 | 用于订阅的语句无效 |
132611 | 因为不支持此语句而导致订阅创建失败 | 用于订阅的设置选项无效 |
132612 | 因为不支持此语句而导致订阅创建失败 | 隔离级别无效 |
132622 | 因为不支持此语句而导致订阅创建失败 | 供内部使用 |
132623 | 因为不支持此语句而导致订阅创建失败 | 超出每个表的模板限制 |
下面的状态代码供内部使用,它们归类为检查终止和初始化模式:
代码 | 次要状态 | 信息 |
---|---|---|
198656 | 供内部使用:检查终止和初始化模式 | 未确定的信息模式 |
198928 | 订阅已损坏 | 因为数据库分离而激发订阅 |
198929 | 订阅已损坏 | 因为删除了用户而激发订阅 |
198930 | 订阅已损坏 | 因为重新订阅而删除了订阅 |
198931 | 订阅已损坏 | 订阅已终止 |
199168 | 订阅处于活动状态。 | 未确定的信息模式 |
199424 | 该订阅已初始化,但尚未处于活动状态 | 未确定的信息模式 |
权限
需要针对服务器的 VIEW SERVER STATE 权限。
注意
如果用户不具备 VIEW SERVER STATE 权限,该视图将返回当前用户所拥有的订阅的有关信息。
SQL Server 2022 及更高版本的权限
要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
示例
A. 返回当前用户的活动查询通知订阅
以下示例返回当前用户的活动查询通知订阅。 如果用户拥有 VIEW SERVER STATE 权限,则将返回服务器中的所有活动订阅。
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions;
GO
B. 返回指定用户的活动查询通知订阅
以下示例返回通过登录 Ruth0
进行的活动查询通知订阅。
SELECT id, database_id, sid, object_id, created, timeout, status
FROM sys.dm_qn_subscriptions
WHERE sid = SUSER_SID('Ruth0');
GO
°C 返回查询通知订阅的内部表元数据
以下示例返回查询通知订阅的内部表元数据。
SELECT qn.id AS query_subscription_id
,it.name AS internal_table_name
,it.object_id AS internal_table_id
FROM sys.internal_tables AS it
JOIN sys.dm_qn_subscriptions AS qn ON it.object_id = qn.object_id
WHERE it.internal_type_desc = 'QUERY_NOTIFICATION';
GO
另请参阅
动态管理视图和函数 (Transact-SQL)
查询通知相关的动态管理视图 (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)