쿼리 알림 - sys.dm_qn_subscriptions
적용 대상: SQL Server
서버에서 활성 쿼리 알림 구독에 관한 정보를 반환합니다. 이 보기를 사용하여 서버 또는 지정된 데이터베이스에서 활성 구독을 확인하거나 지정된 서버 보안 주체를 확인할 수 있습니다.
열 이름 | 데이터 형식 | Description |
---|---|---|
id | int | 구독의 ID입니다. |
database_id | int | 알림 쿼리가 실행된 데이터베이스의 ID입니다. 이 데이터베이스는 이 구독과 관련된 정보를 저장합니다. |
sid | varbinary(85) | 이 구독을 만들고 소유한 서버 보안 주체의 보안 ID입니다. |
object_id | int | 구독 매개 변수에 대한 정보를 저장하는 내부 테이블의 ID입니다. |
created | 날짜/시간 | 구독을 만든 날짜 및 시간입니다. |
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은 정의되지 않은 상태를 나타냅니다.
다음 상태 코드는 변경으로 인해 구독이 발생했음을 나타냅니다.
코드 | 부 상태 | 정보 |
---|---|---|
65798 | 데이터가 변경되어 구독이 발생했습니다. | 삽입에 의해 트리거된 구독 |
65799 | 데이터가 변경되어 구독이 발생했습니다. | 삭제 |
65800 | 데이터가 변경되어 구독이 발생했습니다. | 엽데이트 |
65801 | 데이터가 변경되어 구독이 발생했습니다. | Merge |
65802 | 데이터가 변경되어 구독이 발생했습니다. | 테이블 자르기 |
66048 | 제한 시간이 만료되어 구독이 발생했습니다. | 정의되지 않은 정보 모드입니다. |
66315 | 개체가 변경되어 구독이 발생했습니다. | 개체 또는 사용자가 삭제되었습니다. |
66316 | 개체가 변경되어 구독이 발생했습니다. | 개체가 변경되었습니다. |
66565 | 데이터베이스가 분리되었거나 삭제되어 구독이 발생했습니다. | 서버 또는 db를 다시 시작했습니다. |
66571 | 데이터베이스가 분리되었거나 삭제되어 구독이 발생했습니다. | 개체 또는 사용자가 삭제되었습니다. |
66572 | 데이터베이스가 분리되었거나 삭제되어 구독이 발생했습니다. | 개체가 변경되었습니다. |
67341 | 서버의 od 리소스 부족으로 인해 구독이 트리거되었습니다. | 서버의 od 리소스 부족으로 인해 구독이 트리거되었습니다. |
다음 상태 코드는 구독을 만들지 못했음을 나타냅니다.
코드 | 부 상태 | 정보 |
---|---|---|
132609 | 문이 지원되지 않아 구독을 만들지 못했습니다. | 쿼리가 너무 복잡합니다. |
132610 | 문이 지원되지 않아 구독을 만들지 못했습니다. | 구독에 대한 잘못된 문 |
132611 | 문이 지원되지 않아 구독을 만들지 못했습니다. | 구독에 대한 잘못된 설정 옵션 |
132612 | 문이 지원되지 않아 구독을 만들지 못했습니다. | 잘못된 격리 수준 |
132622 | 문이 지원되지 않아 구독을 만들지 못했습니다. | 내부적으로 사용 |
132623 | 문이 지원되지 않아 구독을 만들지 못했습니다. | 테이블당 템플릿 제한 초과 |
다음 상태 코드는 내부적으로 사용되며 check kill 및 init 모드로 분류됩니다.
코드 | 부 상태 | 정보 |
---|---|---|
198656 | 내부적으로 사용: kill 및 init 모드 확인 | 정의되지 않은 정보 모드입니다. |
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)