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) à utiliser comme nouveau filigrane faible pour l’instance de @capture. @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éfinie sur NULL, le filigrane @low actuel de l’instance de @capture est utilisé pour définir la limite supérieure de l’opération de propre up.

[ @threshold = ] 'delete threshold'

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

[ @fCleanupFailed = ] 'sortie de propre up ayant échoué

Paramètre OUTPUT indiquant si l’opération de propre up 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) ou 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 a la valeur NULL, la valeur start_lsn de l’instance de @capture 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', isn't 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 petite start_lsn représentée dans le groupe d’entrées est sélectionnée comme filigrane faible ajusté. Si le paramètre @low_water_mark a la valeur 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 mise à jour de l’start_lsn de l’instance de capture, mais sans supprimer les données de la table de modification, l’augmentation de 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 valeur start_lsn dans cdc.change_tables doit être traitée comme la nouvelle limite inférieure. La sys.sp_cdc_cleanup_change_table procédure stockée ne définit pas la valeur start_lsn pour qu’elle corresponde à la période de rétention des données nouvellement spécifiée. La procédure effectue toujours propre up en fonction du filigrane bas. 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 propre up et qu’un blocage se produit entre l’analyse cdc et la capture de données modifiées propre up lorsqu’il sys.sp_cdc_cleanup_change_table est appelé, l’erreur 22852 est journalisé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 propre up pour une instance de capture donnée, exécutez sys.sp_cdc_cleanup_change_tableet spécifiez NULL pour le paramètre @low_water_mark.

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

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

Autorisations

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