변경 데이터 캡처 - sys.dm_cdc_log_scan_sessions

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

현재 데이터베이스의 각 로그 검색 세션에 대해 하나의 행을 반환합니다. 반환된 마지막 행은 현재 세션을 나타냅니다. 이 뷰를 사용하면 현재 로그 검색 세션에 대한 상태 정보, 또는 SQL Server 인스턴스가 마지막으로 시작된 이후의 모든 세션에 대한 집계 정보를 반환할 수 있습니다.

SQL Server 인스턴스가 다시 시작되거나 장애 조치(failover)가 발생할 때마다 레코드 sys.dm_cdc_log_scan_sessions 가 다시 설정됩니다. 또한 쿼리된 데이터베이스가 Always On 가용성 그룹의 보조 역할에 있는 경우 레코드가 반환되지 않습니다.

자세한 내용은 CDC(변경 데이터 캡처)란?

열 이름 데이터 형식 설명
session_id int 세션의 ID입니다.

0일 경우 이 행에서 반환된 데이터는 SQL Server 인스턴스가 마지막으로 시작된 이후의 모든 세션에 대한 집계입니다.
start_time datetime 세션이 시작된 시간입니다.

session_id가 0일 경우 집계된 데이터 컬렉션이 시작된 시간입니다.
end_time datetime 세션이 종료된 시간입니다.

NULL = 세션이 활성 상태입니다.

session_id가 0일 경우 마지막 세션이 종료된 시간입니다.
duration int 세션의 기간(초)입니다.

0인 경우 세션에 변경 데이터 캡처 트랜잭션이 포함되어 있지 않습니다.

session_id가 0일 경우 변경 데이터 캡처 트랜잭션이 있는 모든 세션의 총 기간(초)입니다.
scan_phase nvarchar(200) 세션의 현재 단계입니다. 다음은 가능한 값과 해당 설명입니다.

1: 구성 읽기
2: 첫 번째 검색, 해시 테이블 작성
3: 두 번째 검색
4: 두 번째 검색
5: 두 번째 검색
6: 스키마 버전 관리
7: 마지막 검색
8: 완료

session_id가 0일 경우 이 값은 항상 “Aggregate”입니다.
error_count int 발생한 오류 수입니다.

session_id가 0일 경우 모든 세션에서 발생한 총 오류 수입니다.
start_lsn nvarchar(23) 세션의 시작 LSN입니다.

session_id가 0일 경우 마지막 세션의 시작 LSN입니다.
current_lsn nvarchar(23) 현재 검색 중인 LSN입니다.

session_id가 0일 경우 현재 LSN은 0입니다.
end_lsn nvarchar(23) 세션에 대한 LSN 종료

NULL = 세션이 활성 상태입니다.

session_id가 0일 경우 마지막 세션의 종료 LSN입니다.
tran_count bigint 처리된 변경 데이터 캡처 트랜잭션의 수입니다. 이 카운터는 2단계에서 채워집니다.

session_id가 0일 경우 모든 세션에서 처리된 트랜잭션 수입니다.
last_commit_lsn nvarchar(23) 마지막으로 처리된 커밋 로그 레코드의 LSN입니다.

session_id가 0일 경우 세션에 대한 마지막 커밋 로그 레코드 LSN입니다.
last_commit_time datetime 마지막 커밋 로그 레코드가 처리된 시간입니다.

session_id가 0일 경우 세션에 대한 마지막 커밋 로그 레코드 시간입니다.
log_record_count bigint 스캔한 로그 레코드의 수입니다.

session_id가 0일 경우 모든 세션의 검색된 레코드 수입니다.
schema_change_count int 검색된 DDL(데이터 정의 언어) 작업의 수입니다. 이 카운터는 6단계에서 채워집니다.

session_id가 0일 경우 모든 세션에서 처리된 DDL 작업 수입니다.
command_count bigint 처리된 명령 수입니다.

session_id가 0일 경우 모든 세션에 대해 처리된 명령 수입니다.
first_begin_cdc_lsn nvarchar(23) 변경 데이터 캡처 트랜잭션이 포함된 첫 번째 LSN입니다.

session_id가 0일 경우 변경 데이터 캡처 트랜잭션을 포함하는 첫 번째 LSN입니다.
last_commit_cdc_lsn nvarchar(23) 변경 데이터 캡처 트랜잭션이 포함된 마지막 커밋 로그 레코드의 LSN입니다.

session_id가 0일 경우 변경 데이터 캡처 트랜잭션을 포함하는 세션에 대한 마지막 커밋 로그 레코드 LSN입니다.
last_commit_cdc_time datetime 변경 데이터 캡처 트랜잭션이 포함된 마지막 커밋 로그 레코드가 처리된 시간입니다.

session_id가 0일 경우 변경 데이터 캡처 트랜잭션을 포함하는 세션에 대한 마지막 커밋 로그 레코드 시간입니다.
latency int 세션에서 end_timelast_commit_cdc_time 사이의 차이(초)입니다. 이 카운터는 7단계의 끝에 채워집니다.

session_id가 0일 경우 세션에서 기록된 0이 아닌 마지막 대기 값입니다.
empty_scan_count int 변경 데이터 캡처 트랜잭션이 포함되지 않은 연속 세션 수입니다.
failed_sessions_count int 실패한 세션 수입니다.

설명

DMV에는 sys.dm_cdc_log_scan_sessions 최대 32개의 검사 세션과 모든 검사 세션의 집계가 포함 session_id= 0됩니다. 따라서 언제든지 이 동적 관리 뷰에는 최대 33개의 행이 포함될 수 있습니다.

사용 권한

sys.dm_cdc_log_scan_sessions 동적 관리 뷰를 쿼리하려면 VIEW DATABASE STATE 권한이 필요합니다. 동적 관리 뷰 사용 권한에 관한 자세한 내용은 동적 관리 뷰 및 함수(Transact-SQL)를 참조하세요.

SQL Server 2022 이상에 대한 권한

데이터베이스에 대한 VIEW DATABASE PERFORMANCE STATE 권한이 필요합니다.

다음 예제에서는 최신 세션에 대한 정보를 반환합니다.

USE AdventureWorks2022;  
GO  
SELECT session_id, start_time, end_time, duration, scan_phase,  
    error_count, start_lsn, current_lsn, end_lsn, tran_count,  
    last_commit_lsn, last_commit_time, log_record_count, schema_change_count,  
    command_count, first_begin_cdc_lsn, last_commit_cdc_lsn,   
    last_commit_cdc_time, latency, empty_scan_count, failed_sessions_count  
FROM sys.dm_cdc_log_scan_sessions  
WHERE session_id = (SELECT MAX(b.session_id) FROM sys.dm_cdc_log_scan_sessions AS b);  
GO  

다음 단계