クエリ通知 - 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)