sys.sp_cdc_cleanup_change_table (Transact-SQL)
Si applica a: SQL Server
Rimuove le righe dalla tabella delle modifiche nel database corrente in base al valore di @low_water_mark specificato. Questa stored procedure è fornita agli utenti che vogliono gestire direttamente il processo di pulizia della tabella delle modifiche. Tuttavia, è necessario fare attenzione poiché la procedura influisce su tutti gli utenti dei dati della tabella delle modifiche.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sys.sp_cdc_cleanup_change_table [ @capture_instance = ] 'capture_instance'
, [ @low_water_mark = ] low_water_mark
, [ @threshold = ] 'delete threshold'
, [ @fCleanupFailed = ] 'cleanup failed' OUTPUT
[ ; ]
Argomenti
[ @capture_instance = ] 'capture_instance'
Nome dell'istanza di acquisizione associata alla tabella delle modifiche. @capture_instance è sysname, senza impostazione predefinita e non può essere NULL
.
capture_instance deve assegnare un nome a un'istanza di acquisizione esistente nel database corrente.
[ @low_water_mark = ] low_water_mark
Numero di sequenza del log (LSN) usato come nuova filigrana bassa per il @capture_instance. @low_water_mark è binary(10), senza impostazione predefinita.
Se il valore non NULL
è , deve essere visualizzato come start_lsn
valore di una voce corrente nella tabella cdc.lsn_time_mapping . Se altre voci condividono cdc.lsn_time_mapping
lo stesso tempo di commit della voce identificata dalla nuova filigrana bassa, il più piccolo LSN associato a quel gruppo di voci viene scelto come limite basso.
Se il valore è impostato in modo esplicito su NULL
, il @low_water_mark corrente per il @capture_instance viene usato per definire il limite superiore per l'operazione di pulizia.
Nota
@low_water_mark è la soglia LSN. Tutte le transazioni con un valore LSN inferiore al valore fornito vengono elaborate e il valore in questione viene escluso.
[ @threshold = ] 'delete threshold'
Numero massimo di voci di eliminazione che possono essere eliminate usando una singola istruzione in caso di pulizia. @threshold è bigint, con un valore predefinito pari a 5000.
[ @fCleanupFailed = ] 'cleanup failed' OUTPUT
Parametro OUTPUT che indica se l'operazione di pulizia non è riuscita o meno. @fCleanupFailed è bit, con un valore predefinito .0
Set di risultati
Nessuno, a meno che non venga usato il parametro OUTPUT facoltativo @fCleanupFailed .
Valori del codice restituito
0
(esito positivo) o 1
(errore).
Esempi
-- 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
Osservazioni:
sys.sp_cdc_cleanup_change_table
esegue le operazioni seguenti:
Se il parametro @low_water_mark è
NULL
, ilstart_lsn
valore per il @capture_instance viene lasciato invariato. Tuttavia, se la filigrana bassa corrente è maggiore del valore limite minimo specificato utilizzando il parametro @low_water_mark per la procedura, viene generata l'eccezione Error 22957 . Messaggio di errore per l'errore 22957LSN %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].
Nota
Il nuovo limite minimo potrebbe non essere quello specificato nella chiamata alla stored procedure. Se altre voci nella
cdc.lsn_time_mapping
tabella condividono lo stesso tempo di commit, il piùstart_lsn
piccolo rappresentato nel gruppo di voci viene selezionato come limite minimo regolato. Se il parametro @low_water_mark èNULL
o la filigrana bassa corrente è maggiore della nuova filigrana bassa, ilstart_lsn
valore per l'istanza di acquisizione rimane invariato.Modificare le voci di tabella con
__$start_lsn
valori minori della filigrana bassa vengono quindi eliminate. La soglia di eliminazione viene utilizzata per limitare il numero di righe eliminate in una singola transazione. Viene segnalato un errore durante l'eliminazione delle voci, ma non influisce sulle modifiche apportate alla filigrana bassa dell'istanza di acquisizione che potrebbe essere stata apportata in base alla chiamata.Se la
sys.sp_cdc_cleanup_change_table
stored procedure scade dopo l'aggiornamento dell'istanzastart_lsn
di acquisizione ma senza eliminare i dati della tabella delle modifiche, l'aumento del valore di conservazione dei dati tramite la stored procedure sys.sp_cdc_change_job prima dell'esecuzione successiva della stored proceduresys.sp_cdc_cleanup_change_table
non mantiene i dati per il periodo di conservazione specificato. Ilstart_lsn
valore in cdc.change_tables deve essere considerato come la nuova filigrana bassa. Lasys.sp_cdc_cleanup_change_table
stored procedure non imposta ilstart_lsn
valore in modo che corrisponda al periodo di conservazione dei dati appena specificato. La procedura esegue sempre la pulizia in base alla filigrana bassa. Specificando un valore per il parametro @low_water_mark uguale o superiorestart_lsn
al valore in cdc.change_tables, evita di generare l'errore 22957.Se si usa
sys.sp_cdc_cleanup_change_table
per gestire il processo della tabella di pulizia e si verifica un deadlock tra l'analisi CDC e la pulizia CDC quandosys.sp_cdc_cleanup_change_table
viene richiamato, viene registrato l'errore 22852 con gravità 10 (messaggio informativo). Il messaggio relativo all'errore 22852 è il seguente: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.
Usare sys.sp_cdc_cleanup_change_table
nelle circostanze seguenti:
I report del processo Cleanup Agent eliminano gli errori.
Un amministratore può eseguire questa stored procedure in modo esplicito per riprovare un'operazione non riuscita. Per ritentare la pulizia per una determinata istanza di acquisizione, eseguire
sys.sp_cdc_cleanup_change_table
e specificareNULL
per il parametro @low_water_mark .I criteri semplici basati sulla conservazione usati dal processo dell'agente di pulizia non sono adeguati.
Poiché questa stored procedure esegue la pulizia per una singola istanza di acquisizione, può essere usata per creare una strategia di pulizia personalizzata che adatta le regole per la pulizia alla singola istanza di acquisizione.
Autorizzazioni
Richiede l'adesione al ruolo predefinito del database db_owner.