sys.sp_cdc_cleanup_change_table(Transact-SQL)
적용 대상: SQL Server
지정된 @low_water_mark 값에 따라 현재 데이터베이스의 변경 테이블에서 행을 제거합니다. 이 저장 프로시저는 변경 테이블 정리 프로세스를 직접 관리하려는 사용자를 위해 제공됩니다. 그러나 프로시저는 변경 테이블에 있는 데이터의 모든 소비자에게 영향을 주므로 주의해야 합니다.
구문
sys.sp_cdc_cleanup_change_table [ @capture_instance = ] 'capture_instance'
, [ @low_water_mark = ] low_water_mark
, [ @threshold = ] 'delete threshold'
, [ @fCleanupFailed = ] 'cleanup failed' OUTPUT
[ ; ]
인수
[ @capture_instance = ] 'capture_instance'
변경 테이블과 연결된 캡처 인스턴스의 이름입니다. @capture_instance sysname이며, 기본값이 없으므로 사용할 수 없습니다NULL
.
capture_instance 현재 데이터베이스에 있는 캡처 인스턴스의 이름을 지정해야 합니다.
[ @low_water_mark = ] low_water_mark
@capture_instance 대한 새 하위 워터마크로 사용되는 LSN(로그 시퀀스 번호)입니다. @low_water_mark 기본값이 없는 binary(10)입니다.
값이 아닌 NULL
경우 cdc.lsn_time_mapping 테이블에서 현재 항목의 값으로 start_lsn
표시되어야 합니다. 다른 항목이 cdc.lsn_time_mapping
새 하위 워터마크로 식별된 항목과 동일한 커밋 시간을 공유하는 경우 해당 항목 그룹과 연결된 가장 작은 LSN이 하위 워터마크로 선택됩니다.
값이 명시적으로 설정된 NULL
경우 @capture_instance 대한 현재 @low_water_mark 정리 작업의 상한을 정의하는 데 사용됩니다.
참고 항목
@low_water_mark LSN 임계값입니다. LSN 값이 제공된 값보다 낮은 트랜잭션은 처리되며 해당 값은 제외됩니다.
[ @threshold = ] 'delete threshold'
정리할 때 단일 문을 사용하여 삭제할 수 있는 최대 삭제 항목 수입니다. @threshold 기본값이 5000인 bigint입니다.
[ @fCleanupFailed = ] '정리 실패' OUTPUT
정리 작업이 실패했는지 여부를 나타내는 OUTPUT 매개 변수입니다. @fCleanupFailed 비트이며 기본값은 .입니다0
.
결과 집합
선택적 @fCleanupFailed OUTPUT 매개 변수를 사용하지 않는 한 None입니다.
반환 코드 값
0
(성공) 또는 1
(실패).
예제
-- Declaring a variable and Setting to zero first
SELECT @cleanup_failed_bit = 0;
-- Execute cleanup and obtain output bit
EXEC @retcode = sys.sp_cdc_cleanup_change_table
@capture_instance = '<CaptureInstance>',
@low_water_mark = @LSN, --== LSN to be used for new low watermark for capture instance
@threshold = 1,
@fCleanupFailed = @cleanup_failed_bit OUTPUT;
-- Leverage @cleanup_failed_bit output to check the status.
SELECT IIF(@cleanup_failed_bit > 0, 'CLEANUP FAILURE', 'CLEANUP SUCCESS');
CLEANUP SUCCESS
설명
sys.sp_cdc_cleanup_change_table
는 다음 작업을 수행합니다.
@low_water_mark 매개 변수인
start_lsn
NULL
경우 @capture_instance 값은 변경되지 않은 상태로 유지됩니다. 그러나 현재 하위 워터마크가 프로시저에 @low_water_mark 매개 변수를 사용하여 지정된 하위 워터마크 값보다 크면 오류 22957이 throw됩니다. 오류 22957에 대한 오류 메시지는LSN %s, specified as the new low endpoint for the change table associated with capture instance '%s', is not within the Change Data Capture timeline [%s, %s].
참고 항목
새 하위 워터마크는 저장 프로시저 호출에 지정된 하위 워터마크가 아닐 수 있습니다. 테이블의
cdc.lsn_time_mapping
다른 항목이 동일한 커밋 시간을 공유하는 경우 항목 그룹에 표시되는 가장start_lsn
작은 항목이 조정된 하위 워터마크로 선택됩니다. @low_water_mark 매개 변수가NULL
있거나 현재 하위 워터마크가 새 하위 워터마크보다 큰 경우 캡처 인스턴스의start_lsn
값은 변경되지 않은 상태로 유지됩니다.하위 워터마크보다 작은 값으로
__$start_lsn
테이블 항목을 변경하면 삭제됩니다. 삭제 임계값은 단일 트랜잭션에서 삭제된 행 수를 제한하는 데 사용됩니다. 항목을 성공적으로 삭제하지 못한 것으로 보고되지만 호출을 기반으로 했을 수 있는 캡처 인스턴스의 하위 워터마크 변경에는 영향을 주지 않습니다.저장 프로시저가
sys.sp_cdc_cleanup_change_table
캡처 인스턴스를 업데이트start_lsn
한 후 시간이 초과되었지만 변경 테이블 데이터를 삭제하지 않으면 저장 프로시저를 사용하여 데이터 보존 값을 늘리면 저장 프로시저 를 다음 실행하기 전에 sys.sp_cdc_change_job 저장 프로시저sys.sp_cdc_cleanup_change_table
가 지정된 보존 기간 동안 데이터를 보존하지 않습니다. cdc.change_tables 값은start_lsn
새 하위 워터마크로 처리되어야 합니다. 저장 프로시저는sys.sp_cdc_cleanup_change_table
새로 지정된 데이터 보존 기간과 일치하도록 값을 설정start_lsn
하지 않습니다. 이 프로시저는 항상 낮은 워터마크를 기반으로 정리를 수행합니다. cdc.change_tables 값보다 크거나 같은 @low_water_mark 매개 변수의start_lsn
값을 지정하면 오류 22957이 생성되지 않습니다.정리 테이블 프로세스를 관리하는 데 사용하고
sys.sp_cdc_cleanup_change_table
호출될 때sys.sp_cdc_cleanup_change_table
CDC 검사와 CDC 정리 간에 교착 상태가 발생하는 경우 오류 22852는 심각도 10(정보 메시지)으로 기록됩니다. 오류 22852에 대한 메시지는 다음과 같습니다.Could not delete change table entries made obsolete by a change in one or more low water marks for capture instances of database <DatabaseName>. The failure occurred when executing the command <CommandName>. The error returned was <ErrorInfo>. Use the action and error to determine the cause of the failure and resubmit the request.
다음과 같은 경우에 사용합니다 sys.sp_cdc_cleanup_change_table
.
정리 에이전트 작업은 삭제 실패를 보고합니다.
관리자는 이 저장 프로시저를 명시적으로 실행하여 실패한 작업을 다시 시도할 수 있습니다. 지정된 캡처 인스턴스에 대한 정리를 다시 시도하려면 @low_water_mark 매개 변수를 실행하고
sys.sp_cdc_cleanup_change_table
지정NULL
합니다.정리 에이전트 작업에서 사용하는 간단한 보존 기반 정책이 적절하지 않습니다.
이 저장 프로시저는 단일 캡처 인스턴스에 대한 정리를 수행하므로 개별 캡처 인스턴스에 대한 정리 규칙을 조정하는 사용자 지정 정리 전략을 빌드하는 데 사용할 수 있습니다.
사용 권한
db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다.