Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
Om @low_water_mark-parametern är
NULL,start_lsnfö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 ärLSN %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_mappingtabellen har samma committ-tid, väljs den minstastart_lsnsom representeras i gruppen av poster som justerad låg vattenstämpel. Om parametern @low_water_mark ärNULLeller den nuvarande låga vattenstämpeln är större än den nya låga vattenstämpeln,start_lsnförblir värdet för fångstinstansen oförändrat.Ändringstabellposter med
__$start_lsnvä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.Om den lagrade
sys.sp_cdc_cleanup_change_tableproceduren går ut efter uppdateringstart_lsnfö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 procedurensys.sp_cdc_cleanup_change_tabledata för den angivna lagringsperioden. Värdetstart_lsni cdc.change_tables bör behandlas som den nya låga vattenstämpeln. Den lagradesys.sp_cdc_cleanup_change_tableproceduren sätterstart_lsninte 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 änstart_lsnvärdet i cdc.change_tables undviker att generera fel 22957.Om du använder
sys.sp_cdc_cleanup_change_tabledet för att hantera rensningstabellen och en deadlock uppstår mellan CDC-skanningen och CDC-rensningen närsys.sp_cdc_cleanup_change_tableden 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 specificeraNULLfö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.