다음을 통해 공유


sys.sp_cdc_cleanup_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_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는 다음 작업을 수행합니다.

  1. @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 값은 변경되지 않은 상태로 유지됩니다.

  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_tablesstart_lsn 새 하위 워터마크로 처리되어야 합니다. 저장 프로시저는 sys.sp_cdc_cleanup_change_table 새로 지정된 데이터 보존 기간과 일치하도록 값을 설정 start_lsn 하지 않습니다. 이 프로시저는 항상 낮은 워터마크를 기반으로 정리를 수행합니다. cdc.change_tables 값보다 크거나 같은 @low_water_mark 매개 변수의 start_lsn 값을 지정하면 오류 22957이 생성되지 않습니다.

  4. 정리 테이블 프로세스를 관리하는 데 사용하고 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 고정 데이터베이스 역할의 멤버 자격이 필요합니다.