查詢通知 - sys.dm_qn_subscriptions
適用於:SQL Server
傳回伺服器中作用中查詢通知訂閱的相關信息。 您可以使用此檢視來檢查伺服器或指定資料庫中的作用中訂閱,或檢查指定的伺服器主體。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
id | int | 訂用帳戶的標識碼。 |
database_id | int | 執行通知查詢的資料庫標識碼。 此資料庫會儲存與此訂用帳戶相關的資訊。 |
sid | varbinary(85) | 建立並擁有此訂用帳戶之伺服器主體的安全性標識碼。 |
object_id | int | 儲存訂用帳戶參數相關信息的內部數據表標識碼。 |
創建 | 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 | 訂用帳戶建立失敗,因為不支援 語句 | 超過每個數據表的範本限制 |
下列狀態代碼會在內部使用,並分類為 check kill 和 init 模式:
代碼 | 次要狀態 | 資訊 |
---|---|---|
198656 | 在內部使用:檢查 kill 和 init 模式 | 未定義的資訊模式 |
198928 | 訂用帳戶已終結 | 因為已附加 db 而引發訂用帳戶 |
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)