sys.sp_cdc_클린up_change_table(Transact-SQL)

적용 대상:SQL Server

지정된 @low_water_mark 값에 따라 현재 데이터베이스의 변경 테이블에서 행을 제거합니다. 이 저장 프로시저는 변경 테이블 정리 프로세스를 직접 관리하려는 사용자를 위해 제공됩니다. 그러나 프로시저는 변경 테이블에 있는 데이터의 모든 소비자에게 영향을 주므로 주의해야 합니다.

Transact-SQL 구문 표기 규칙

구문

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 인스턴스의 새 하위 워터마크로 사용할 LSN(로그 시퀀스 번호)입니다. @low_water_mark 기본값이 없는 binary(10)입니다.

값이 null이 아니면 cdc.lsn_time_mapping 테이블에서 현재 항목 의 start_lsn 값으로 표시되어야 합니다. 다른 항목이 cdc.lsn_time_mapping 새 하위 워터마크로 식별된 항목과 동일한 커밋 시간을 공유하는 경우 해당 항목 그룹과 연결된 가장 작은 LSN이 하위 워터마크로 선택됩니다.

값이 명시적으로 NULL로 설정된 경우 @capture 인스턴스에 대한 현재 @low 워터마크를 사용하여 클린up 작업에 대한 상한을 정의합니다.

[ @threshold = ] 'delete threshold'

클린에서 단일 문을 사용하여 삭제할 수 있는 최대 삭제 항목 수입니다. @threshold 기본값이 5000인 bigint입니다.

[ @fCleanupFailed = ] '클린업 실패' OUTPUT

클린up 작업이 실패했는지 여부를 나타내는 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는 다음 작업을 수행합니다.

  1. @low_water_mark 매개 변수가 NULL이면 @capture 인스턴스대한 start_lsn 값은 변경되지 않은 상태로 유지됩니다. 그러나 현재 하위 워터마크가 프로시저에 @low_water_mark 매개 변수를 사용하여 지정된 하위 워터마크 값보다 크면 오류 22957이 throw됩니다. 오류 22957에 대한 오류 메시지는 LSN %s, specified as the new low endpoint for the change table associated with capture instance '%s', isn't within the Change Data Capture timeline [%s, %s].

    참고 항목

    새 하위 워터마크는 저장 프로시저 호출에 지정된 하위 워터마크가 아닐 수 있습니다. 테이블의 cdc.lsn_time_mapping 다른 항목이 동일한 커밋 시간을 공유하는 경우 항목 그룹에 표시되는 가장 작은 start_lsn 조정된 하위 워터마크로 선택됩니다. @low_water_mark 매개 변수가 NULL이거나 현재 하위 워터마크가 새 하위 워터마크보다 크면 캡처 인스턴스의 start_lsn 값이 변경되지 않은 상태로 유지됩니다.

  2. 하위 워터마크보다 작은 값으로 __$start_lsn 테이블 항목을 변경하면 삭제됩니다. 삭제 임계값은 단일 트랜잭션에서 삭제된 행 수를 제한하는 데 사용됩니다. 항목을 성공적으로 삭제하지 못한 것으로 보고되지만 호출을 기반으로 했을 수 있는 캡처 인스턴스의 하위 워터마크 변경에는 영향을 주지 않습니다.

  3. 캡처 인스턴스에 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이 생성되지 않습니다.

  4. 클린up 테이블 프로세스를 관리하는 데 사용하고 sys.sp_cdc_cleanup_change_table 호출될 때 sys.sp_cdc_cleanup_change_table CDC 검사와 CDC 클린up 간에 교착 상태가 발생하면 오류 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 .

  • 클린up 에이전트 작업은 삭제 실패를 보고합니다.

    관리자는 이 저장 프로시저를 명시적으로 실행하여 실패한 작업을 다시 시도할 수 있습니다. 지정된 캡처 인스턴스에 대해 클린 다시 시도하려면 @low_water_mark 매개 변수에 대해 NULL을 실행하고 sys.sp_cdc_cleanup_change_table지정합니다.

  • 클린up 에이전트 작업에서 사용하는 간단한 보존 기반 정책이 적절하지 않습니다.

    이 저장 프로시저는 단일 캡처 인스턴스에 대해 클린 수행하므로 개별 캡처 인스턴스에 클린 대한 규칙을 조정하는 사용자 지정 클린업 전략을 빌드하는 데 사용할 수 있습니다.

사용 권한

db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다.