sys.sp_cdc_cleanup_change_table (Transact-SQL)

Van toepassing op:SQL Server

Verwijdert rijen uit de wijzigingstabel in de huidige database op basis van de gespecificeerde @low_water_mark waarde. Deze opgeslagen procedure is bedoeld voor gebruikers die het opruimproces van wijzigingstabellen direct willen beheren. Voorzichtigheid is echter geboden, omdat de procedure alle consumenten van de gegevens in de wijzigingstabel treft.

Transact-SQL syntaxis-conventies

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'

De naam van de capture-instantie die gekoppeld is aan de wijzigingstabel. @capture_instance is sysname, zonder standaard, en kan niet .NULL

@capture_instance moet een capture-instantie benoemen die bestaat in de huidige database.

[ @low_water_mark = ] low_water_mark

Een log-sequentienummer (LSN) dat wordt gebruikt als het nieuwe lage watermerk voor de @capture_instance. @low_water_mark is binair(10), zonder standaard.

Als de waarde niet NULLis, moet deze verschijnen als de start_lsn waarde van een huidige invoer in de cdc.lsn_time_mapping tabel. Als andere vermeldingen dezelfde cdc.lsn_time_mapping commit-tijd delen als de vermelding die door het nieuwe lage watermerk wordt geïdentificeerd, wordt de kleinste LSN die aan die groep vermeldingen is gekoppeld gekozen als de lage watermerk.

Als de waarde expliciet is ingesteld op NULL, wordt de huidige @low_water_mark voor de @capture_instance gebruikt om de bovengrens voor de opruimoperatie te definiëren.

Note

@low_water_mark is de LSN-drempel. Alle transacties met een LSN-waarde lager dan de opgegeven waarde worden verwerkt en de betreffende waarde wordt uitgesloten.

[ @threshold = ] drempel

Het maximale aantal verwijderingsitems dat verwijderd kan worden door één enkele instructie bij cleanup te gebruiken. @threshold is bigint, met een standaard van 5000.

[ @fCleanupFailed = ] fCleanupFailed OUTPUT

Een parameter die OUTPUT aangeeft of de opruimoperatie is mislukt of niet. @fCleanupFailed is bit, met een standaard van 0.

Resultaatset

Geen, tenzij de optionele parameter @fCleanupFailed OUTPUT wordt gebruikt.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

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 voert de volgende bewerkingen uit:

  1. Als de @low_water_mark parameter is NULL, blijft de start_lsn waarde voor de @capture_instance ongewijzigd. Als het huidige lage watermerk echter groter is dan de lage watermerkwaarde die is opgegeven met de @low_water_mark-parameter voor de procedure, wordt de fout 22957 gegooid. De foutmelding voor fout 22957 is 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

    Het nieuwe lage watermerk hoeft niet het lage watermerk te zijn dat in de stored procedure-aanroep is gespecificeerd. Als andere vermeldingen in de cdc.lsn_time_mapping tabel dezelfde committijd delen, wordt de kleinste start_lsn die in de groep vermeldingen wordt weergegeven als aangepaste lage watermark geselecteerd. Als de @low_water_mark-parameter is NULL of het huidige lage watermerk groter is dan het nieuwe lage watermerk, blijft de start_lsn waarde voor het capture-exemplaar ongewijzigd.

  2. Wijzigingen in de tabel met __$start_lsn waarden lager dan het lage watermerk worden vervolgens verwijderd. De delete-drempel wordt gebruikt om het aantal verwijderde rijen in één transactie te beperken. Er wordt een mislukking om de vermeldingen succesvol te verwijderen gemeld, maar het heeft geen invloed op enige wijziging van de lage watermerk van de capture instance die mogelijk is aangebracht op basis van de oproep.

  3. Als de sys.sp_cdc_cleanup_change_table opgeslagen procedure verloopt na het updaten van de start_lsn capture instance maar zonder de wijzigingstabel te verwijderen, behoudt het verhogen van de gegevensretentiewaarde met de opgeslagen procedure sys.sp_cdc_change_job vóór de volgende uitvoering van de opgeslagen procedure sys.sp_cdc_cleanup_change_table geen gegevens voor de gespecificeerde retentieperiode. De start_lsn waarde in cdc.change_tables moet worden behandeld als het nieuwe laagste watermerk. De sys.sp_cdc_cleanup_change_table opgeslagen procedure stelt de start_lsn waarde niet in om overeen te komen met de nieuw gespecificeerde gegevensbewaarperiode. De procedure voert altijd schoonmaak uit op basis van het lage watermerk. Het specificeren van een waarde voor de @low_water_mark parameter die gelijk is aan of hoger is dan de start_lsn waarde in cdc.change_tables, voorkomt het genereren van fout 22957.

  4. Als je gebruikt sys.sp_cdc_cleanup_change_table om het opruimtabelproces te beheren en er ontstaat een deadlock tussen de CDC-scan en CDC-opruiming wanneer sys.sp_cdc_cleanup_change_table deze wordt aangeroepen, wordt fout 22852 gelogd met ernst 10 (informatief bericht). Het bericht voor fout 22852 is als volgt:

    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.
    

Gebruik sys.sp_cdc_cleanup_change_table in de volgende omstandigheden:

  • De taak van de opruimagent meldt verwijderingsfouten.

    Een beheerder kan deze opgeslagen procedure expliciet uitvoeren om een mislukte operatie opnieuw te proberen. Om opnieuw opruiming voor een gegeven capture-instantie te proberen, voer sys.sp_cdc_cleanup_change_tableje uit , en specificeer NULL je voor de @low_water_mark-parameter .

  • Het eenvoudige retentiebeleid dat wordt gebruikt door de functie van opruimagent, is niet voldoende.

    Omdat deze opgeslagen procedure cleanup uitvoert voor een enkele capture-instantie, kan deze worden gebruikt om een aangepaste cleanup-strategie te bouwen die de regels voor cleanup afstemt op de individuele capture-instantie.

Permissions

Vereist lidmaatschap van de db_owner standaard databaserol.