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 di 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) da usare come nuova filigrana bassa per l'istanza di @capture. @low_water_mark è binary(10), senza impostazione predefinita.

Se il valore è diverso da Null, deve essere visualizzato come valore start_lsn 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, viene usata la filigrana @low corrente per l'istanza di @capture per definire il limite superiore per l'operazione di pulizia.

[ @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:

  1. Se il parametro @low_water_mark è NULL, il valore start_lsn per l'istanza di @capture 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 22957 LSN %s, specified as the new low endpoint for the change table associated with capture instance '%s', isn't within the Change Data Capture timeline [%s, %s].

    Nota

    Il nuovo limite minimo potrebbe non essere quello specificato nella chiamata alla stored procedure. Se le altre voci della cdc.lsn_time_mapping tabella condividono lo stesso tempo di commit, il più piccolo start_lsn rappresentato nel gruppo di voci viene selezionato come limite minimo modificato. Se il parametro @low_water_mark è NULL o la filigrana bassa corrente è maggiore della nuova filigrana bassa, il start_lsn valore per l'istanza di acquisizione rimane invariato.

  2. 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.

  3. Se la sys.sp_cdc_cleanup_change_table stored procedure scade dopo l'aggiornamento del start_lsn per l'istanza di acquisizione, ma senza eliminare i dati della tabella delle modifiche, aumentare il valore di conservazione dei dati usando la stored procedure sys.sp_cdc_change_job prima dell'esecuzione successiva della stored procedure sys.sp_cdc_cleanup_change_table non conserva i dati per il periodo di conservazione specificato. Il valore start_lsn in cdc.change_tables deve essere considerato come la nuova filigrana bassa. La sys.sp_cdc_cleanup_change_table stored procedure non imposta il valore start_lsn 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 superiore start_lsn al valore in cdc.change_tables, evita di generare l'errore 22957.

  4. 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 quando sys.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_tablee specificare NULL 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'appartenenza al ruolo predefinito del database db_owner .