Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
Als de @low_water_mark parameter is
NULL, blijft destart_lsnwaarde 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 isLSN %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_mappingtabel dezelfde committijd delen, wordt de kleinstestart_lsndie in de groep vermeldingen wordt weergegeven als aangepaste lage watermark geselecteerd. Als de @low_water_mark-parameter isNULLof het huidige lage watermerk groter is dan het nieuwe lage watermerk, blijft destart_lsnwaarde voor het capture-exemplaar ongewijzigd.Wijzigingen in de tabel met
__$start_lsnwaarden 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.Als de
sys.sp_cdc_cleanup_change_tableopgeslagen procedure verloopt na het updaten van destart_lsncapture 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 proceduresys.sp_cdc_cleanup_change_tablegeen gegevens voor de gespecificeerde retentieperiode. Destart_lsnwaarde in cdc.change_tables moet worden behandeld als het nieuwe laagste watermerk. Desys.sp_cdc_cleanup_change_tableopgeslagen procedure stelt destart_lsnwaarde 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 destart_lsnwaarde in cdc.change_tables, voorkomt het genereren van fout 22957.Als je gebruikt
sys.sp_cdc_cleanup_change_tableom het opruimtabelproces te beheren en er ontstaat een deadlock tussen de CDC-scan en CDC-opruiming wanneersys.sp_cdc_cleanup_change_tabledeze 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 specificeerNULLje 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.