Partager via


sys.sp_cdc_cleanup_change_table (Transact-SQL)

S’applique à : SQL Server

Supprime les lignes de la table de modifications de la base de données active en fonction de la valeur @low_water_mark spécifiée. Cette procédure stockée est fournie aux utilisateurs qui souhaitent gérer le processus du nettoyage de la table de modifications directement. Toutefois, soyez vigilant, car la procédure affecte tous les consommateurs des données de la table de modifications.

Conventions de la syntaxe Transact-SQL

Syntaxe

sys.sp_cdc_cleanup_change_table [ @capture_instance = ] 'capture_instance'
    , [ @low_water_mark = ] low_water_mark
    , [ @threshold = ] 'delete threshold'
    , [ @fCleanupFailed = ] 'cleanup failed' OUTPUT
[ ; ]

Arguments

[ @capture_instance = ] 'capture_instance'

Nom de l’instance de capture associée à la table de modifications. @capture_instance est sysname, sans valeur par défaut et ne peut pas être NULL.

capture_instance devez nommer une instance de capture qui existe dans la base de données active.

[ @low_water_mark = ] low_water_mark

Numéro de séquence de journal (LSN) utilisé comme nouveau filigrane bas pour le @capture_instance. @low_water_mark est binary(10), sans valeur par défaut.

Si la valeur n’est pas NULL, elle doit apparaître comme valeur start_lsn d’une entrée actuelle dans la table cdc.lsn_time_mapping . Si d’autres entrées dans cdc.lsn_time_mapping le partage ont le même temps de validation que l’entrée identifiée par le nouveau filigrane bas, le plus petit LSN associé à ce groupe d’entrées est choisi comme filigrane faible.

Si la valeur est explicitement définieNULL, l'@low_water_mark actuel de l'@capture_instance est utilisé pour définir la limite supérieure de l’opération de nettoyage.

Remarque

@low_water_mark est le seuil LSN. Toutes les transactions avec une valeur LSN inférieure à la valeur fournie sont traitées, et la valeur en question est exclue.

[ @threshold = ] 'delete threshold'

Nombre maximal d’entrées de suppression pouvant être supprimées à l’aide d’une instruction unique sur le nettoyage. @threshold est bigint, avec une valeur par défaut de 5 000.

[ @fCleanupFailed = ] 'cleanup failed' OUTPUT

Paramètre OUTPUT indiquant si l’opération de nettoyage a échoué ou non. @fCleanupFailed est bit, avec la valeur par défaut 0.

Jeu de résultats

Aucun, sauf si le paramètre OUTPUT @fCleanupFailed facultatif est utilisé.

Valeurs des codes de retour

0 (réussite) or 1 (échec).

Exemples

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

Notes

sys.sp_cdc_cleanup_change_table effectue les opérations suivantes :

  1. Si le paramètre @low_water_mark est NULL, la start_lsn valeur de la @capture_instance reste inchangée. Toutefois, si le filigrane inférieur actuel est supérieur à la valeur de filigrane faible spécifiée à l’aide du paramètre @low_water_mark de la procédure, l’erreur 22957 est levée. Le message d’erreur de l’erreur 22957 est 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].

    Remarque

    La nouvelle limite inférieure ne peut pas être la limite inférieure spécifiée dans l'appel de procédure stockée. Si d’autres entrées de la cdc.lsn_time_mapping table partagent le même temps de validation, la plus start_lsn petite représentée dans le groupe d’entrées est sélectionnée comme filigrane faible ajusté. Si le paramètre @low_water_mark est NULL ou si le filigrane inférieur actuel est supérieur au nouveau filigrane bas, la start_lsn valeur de l’instance de capture reste inchangée.

  2. Modifiez les entrées de table avec __$start_lsn des valeurs inférieures à la limite inférieure sont ensuite supprimées. Le seuil de suppression est utilisé pour limiter le nombre de lignes supprimées dans une transaction unique. Un échec de suppression des entrées est signalé, mais n’affecte aucune modification apportée à l’instance de capture à faible filigrane susceptible d’avoir été effectuée en fonction de l’appel.

  3. Si la sys.sp_cdc_cleanup_change_table procédure stockée expire après la start_lsn mise à jour de l’instance de capture, mais sans supprimer les données de la table de modification, augmentez la valeur de rétention des données à l’aide de la procédure stockée sys.sp_cdc_change_job avant l’exécution suivante de la procédure sys.sp_cdc_cleanup_change_table stockée ne conserve pas les données pour la période de rétention spécifiée. La start_lsn valeur de cdc.change_tables doit être traitée comme le nouveau filigrane bas. La sys.sp_cdc_cleanup_change_table procédure stockée ne définit pas la start_lsn valeur pour qu’elle corresponde à la période de rétention des données nouvellement spécifiée. La procédure effectue toujours le nettoyage en fonction du filigrane faible. La spécification d’une valeur pour le paramètre @low_water_mark égal ou supérieur à la start_lsn valeur dans cdc.change_tables évite de générer l’erreur 22957.

  4. Si vous utilisez sys.sp_cdc_cleanup_change_table pour gérer le processus de table de nettoyage et qu’un interblocage se produit entre l’analyse cdc et le nettoyage cdc lorsqu’il sys.sp_cdc_cleanup_change_table est appelé, l’erreur 22852 est enregistrée avec la gravité 10 (message d’information). Le message d’erreur 22852 est le suivant :

    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.
    

Utilisez-le sys.sp_cdc_cleanup_change_table dans les circonstances suivantes :

  • Le travail de l'agent de nettoyage signale des échecs de suppression.

    Un administrateur peut exécuter explicitement cette procédure stockée pour réessayer d'effectuer une opération ayant échoué. Pour réessayer de nettoyer une instance de capture donnée, exécutez sys.sp_cdc_cleanup_change_tableet spécifiez NULL le paramètre @low_water_mark .

  • La stratégie simple basée sur la rétention utilisée par le travail de l’Agent de nettoyage n’est pas adéquate.

    Étant donné que cette procédure stockée effectue le nettoyage d’une instance de capture unique, elle peut être utilisée pour créer une stratégie de nettoyage personnalisée qui adapte les règles de nettoyage à l’instance de capture individuelle.

autorisations

Nécessite l'appartenance au rôle de base de données fixe db_owner.