쿼리 알림 - sys.dm_qn_subscriptions

적용 대상:SQL Server

서버에서 활성 쿼리 알림 구독에 관한 정보를 반환합니다. 이 보기를 사용하여 서버 또는 지정된 데이터베이스에서 활성 구독을 확인하거나 지정된 서버 보안 주체를 확인할 수 있습니다.

열 이름 데이터 형식 Description
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은 정의되지 않은 상태를 나타냅니다.

다음 상태 코드는 변경으로 인해 구독이 발생했음을 나타냅니다.

코드 부 상태 정보
65798 데이터가 변경되어 구독이 발생했습니다. 삽입에 의해 트리거된 구독
65799 데이터가 변경되어 구독이 발생했습니다. Delete
65800 데이터가 변경되어 구독이 발생했습니다. 엽데이트
65801 데이터가 변경되어 구독이 발생했습니다. 병합
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)