クエリ通知 - sys.dm_qn_subscriptions

適用対象: SQL サーバー

サーバーのアクティブ クエリ通知サブスクリプションに関する情報を返します。 このビューは、サーバーまたは指定したデータベース内のアクティブなサブスクリプションを確認したり、指定したサーバー プリンシパルを確認する際に使用できます。

列名 データ型 説明
id int サブスクリプションの ID。
database_id int 通知クエリが実行されたデータベースの ID。 このデータベースには、このサブスクリプションに関連する情報が格納されます。
sid varbinary(85) このサブスクリプションを作成して所有しているサーバー プリンシパルのセキュリティ ID。
object_id int サブスクリプション パラメーターに関する情報を格納する内部テーブルの ID。
created datetime サブスクリプションが作成された日時。
timeout int サブスクリプションのタイムアウト (秒単位)。 通知は、この時間が経過した後に発生するフラグが設定されます。

注: 実際の起動時間は、指定されたタイムアウトを超える可能性があります。ただし、サブスクリプションを無効にする変更が、指定されたタイムアウト後に、サブスクリプションが起動される前に発生した場合、SQL Server は変更が行われた時点で発生することを確認します。
status int サブスクリプションの状態を示します。 コードの一覧については、「解説」の表を参照してください。

リレーションシップカーディナリティ

ソース ターゲット オン Type
sys.dm_qn_subscriptions sys.databases database_id 多対一
sys.dm_qn_subscriptions sys.internal_tables object_id 多対一

解説

状態コードが 0 の場合は、未定義の状態であることを示します。

次の状態コードは、変更が原因でサブスクリプションが発生したことを示しています。

コード マイナー ステータス Info
65798 データが変更されたために発生したサブスクリプション 挿入によってトリガーされるサブスクリプション
65799 データが変更されたために発生したサブスクリプション 削除
65800 データが変更されたために発生したサブスクリプション 更新する
65801 データが変更されたために発生したサブスクリプション マージする
65802 データが変更されたために発生したサブスクリプション テーブルを切り捨てる
66048 タイムアウトが発生したため、サブスクリプションが起動しました 未定義の情報モード
66315 オブジェクトが変更されたために発生したサブスクリプション オブジェクトまたはユーザーが削除されました
66316 オブジェクトが変更されたために発生したサブスクリプション オブジェクトが変更されました
66565 データベースがデタッチまたは削除されたため、サブスクリプションが起動しました サーバーまたはデータベースが再起動されました
66571 データベースがデタッチまたは削除されたため、サブスクリプションが起動しました オブジェクトまたはユーザーが削除されました
66572 データベースがデタッチまたは削除されたため、サブスクリプションが起動しました オブジェクトが変更されました
67341 サーバーのリソースが不足しているため、サブスクリプションがトリガーされました サーバーのリソースが不足しているため、サブスクリプションがトリガーされました

次の状態コードは、サブスクリプションの作成に失敗したことを示しています。

コード マイナー ステータス Info
132609 ステートメントがサポートされていないため、サブスクリプションを作成できませんでした クエリが複雑すぎる
132610 ステートメントがサポートされていないため、サブスクリプションを作成できませんでした サブスクリプションのステートメントが無効です
132611 ステートメントがサポートされていないため、サブスクリプションを作成できませんでした サブスクリプションの設定オプションが無効です
132612 ステートメントがサポートされていないため、サブスクリプションを作成できませんでした 分離レベルが無効です
132622 ステートメントがサポートされていないため、サブスクリプションを作成できませんでした 内部的に使用される
132623 ステートメントがサポートされていないため、サブスクリプションを作成できませんでした テーブルあたりのテンプレート制限を超える

次の状態コードは内部で使用され、check kill モードおよび init モードとして分類されます。

コード マイナー ステータス Info
198656 内部使用: check kill モードおよび init モード 未定義の情報モード
198928 サブスクリプションが破棄されました db がアタッチされたために発生したサブスクリプション
198929 サブスクリプションが破棄されました ユーザーが削除されたため、サブスクリプションが起動しました
198930 サブスクリプションが破棄されました サブスクリプションの再サブスクリプションが原因で削除されました
198931 サブスクリプションが破棄されました サブスクリプションが強制終了されました
199168 サブスクリプションがアクティブです 未定義の情報モード
199424 サブスクリプションが初期化されていますが、まだアクティブではありません 未定義の情報モード

アクセス許可

サーバーに対する VIEW SERVER STATE 権限が必要です。

Note

ユーザーに 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)