sys.sp_cdc_cleanup_change_table (Transact-SQL)

Gäller för:SQL Server

Tar bort rader från ändringstabellen i den aktuella databasen baserat på det specificerade @low_water_mark värdet. Denna lagrade propus tillhandahålls för användare som vill hantera rensningsprocessen för ändringstabeller direkt. Försiktighet bör dock iakttas eftersom proceduren påverkar alla konsumenter av datan i ändringstabellen.

Transact-SQL syntaxkonventioner

Syntax

sys.sp_cdc_cleanup_change_table
    [ @capture_instance = ] N'capture_instance'
    , [ @low_water_mark = ] low_water_mark
    [ , [ @threshold = ] threshold ]
    [ , [ @fCleanupFailed = ] fCleanupFailed OUTPUT ]
[ ; ]

Arguments

[ @capture_instance = ] N'capture_instance'

Namnet på fångstinstansen som är kopplad till ändringstabellen. @capture_instance är sysname, utan standard, och kan inte vara NULL.

@capture_instance måste namnge en capture-instans som finns i den aktuella databasen.

[ @low_water_mark = ] low_water_mark

Ett log-sekvensnummer (LSN) som används som den nya låga vattenstämpeln för @capture_instance. @low_water_mark är binär(10), utan standard.

Om värdet inte NULLär , måste det visas som start_lsn värdet av en aktuell post i cdc.lsn_time_mapping tabellen. Om andra poster i cdc.lsn_time_mapping delar samma commit time som den post som identifieras av den nya låga vattenstämpeln, väljs det minsta LSN som är kopplat till den gruppen av poster som lågvattenstämpel.

Om värdet explicit sätts till NULL, används den aktuella @low_water_mark för @capture_instance för att definiera den övre gränsen för saneringsoperationen.

Note

@low_water_mark är LSN-tröskeln. Alla transaktioner med ett LSN-värde lägre än det angivna värdet bearbetas, och det aktuella värdet exkluderas.

[ @threshold = ] tröskel

Det maximala antalet raderingsposter som kan raderas genom att använda en enda sats vid rensning. @threshold är bigint, med en standard på 5000.

[ @fCleanupFailed = ] fCleanupFailed OUTPUT

En parameter som indikerar OUTPUT om saneringsoperationen misslyckades eller inte. @fCleanupFailed är bit, med standardvärdet .0

Resultatuppsättning

Ingen, om inte den valfria parametern @fCleanupFailed OUTPUT används.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Examples

-- Declaring a variable and Setting to zero first
SELECT @cleanup_failed_bit = 0;

-- Execute cleanup and obtain output bit
EXECUTE
    @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

Remarks

sys.sp_cdc_cleanup_change_table utför följande åtgärder:

  1. Om @low_water_mark-parametern är NULL, start_lsn förblir värdet för @capture_instance oförändrat. Om dock den aktuella låga vattenstämpeln är högre än det låga vattenstämpelsvärdet som anges med @low_water_mark-parametern för proceduren, kastas felet 22957 . Felmeddelandet för fel 22957 är 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].

    Note

    Den nya låga vattenstämpeln kanske inte är den låga vattenstämpel som anges i anropet för lagrad procedur. Om andra poster i cdc.lsn_time_mapping tabellen har samma committ-tid, väljs den minsta start_lsn som representeras i gruppen av poster som justerad låg vattenstämpel. Om parametern @low_water_mark är NULL eller den nuvarande låga vattenstämpeln är större än den nya låga vattenstämpeln, start_lsn förblir värdet för fångstinstansen oförändrat.

  2. Ändringstabellposter med __$start_lsn värden mindre än lågvattenstämpeln raderas sedan. Borttagningströskeln används för att begränsa antalet rader som raderas i en enskild transaktion. Ett misslyckande att ta bort poster rapporteras, men påverkar inte någon förändring av infångningsinstansens låga vattenstämpel som kan ha gjorts baserat på samtalet.

  3. Om den lagrade sys.sp_cdc_cleanup_change_table proceduren går ut efter uppdatering start_lsn för capture-instansen men utan att ta bort data från ändringstabellen, behåller inte en ökning av datalagringsvärdet med stored procedure sys.sp_cdc_change_job före nästa körning av den lagrade proceduren sys.sp_cdc_cleanup_change_table data för den angivna lagringsperioden. Värdet start_lsn i cdc.change_tables bör behandlas som den nya låga vattenstämpeln. Den lagrade sys.sp_cdc_cleanup_change_table proceduren sätter start_lsn inte värdet för att matcha den nyangivna lagringsperioden för data. Proceduren utför alltid rengöring baserat på den låga vattenstämpeln. Att specificera ett värde för @low_water_mark-parametern som är lika med eller högre än start_lsn värdet i cdc.change_tables undviker att generera fel 22957.

  4. Om du använder sys.sp_cdc_cleanup_change_table det för att hantera rensningstabellen och en deadlock uppstår mellan CDC-skanningen och CDC-rensningen när sys.sp_cdc_cleanup_change_table den anropas, loggas fel 22852 med allvarlighetsgrad 10 (informationsmeddelande). Meddelandet för fel 22852 är följande:

    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.
    

Användning sys.sp_cdc_cleanup_change_table i följande situationer:

  • Städningsagentjobbet rapporterar borttagningsfel.

    En administratör kan köra denna lagrade procedur explicit för att försöka om en misslyckad operation. För att försöka rensa upp igen för en given capture-instans, kör sys.sp_cdc_cleanup_change_table, och specificera NULL för parametern @low_water_mark .

  • Den enkla retentionsbaserade policyn som används av städagentjobbet är inte tillräcklig.

    Eftersom denna lagrade propude utför sanering för en enskild capture-instans kan den användas för att bygga en anpassad saneringsstrategi som anpassar reglerna för sanering till den enskilda capture-instansen.

Permissions

Kräver medlemskap i den db_owner fasta databasrollen.