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 :
Si le paramètre @low_water_mark est
NULL
, lastart_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 estLSN %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 plusstart_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 estNULL
ou si le filigrane inférieur actuel est supérieur au nouveau filigrane bas, lastart_lsn
valeur de l’instance de capture reste inchangée.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.Si la
sys.sp_cdc_cleanup_change_table
procédure stockée expire après lastart_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éduresys.sp_cdc_cleanup_change_table
stockée ne conserve pas les données pour la période de rétention spécifiée. Lastart_lsn
valeur de cdc.change_tables doit être traitée comme le nouveau filigrane bas. Lasys.sp_cdc_cleanup_change_table
procédure stockée ne définit pas lastart_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 à lastart_lsn
valeur dans cdc.change_tables évite de générer l’erreur 22957.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’ilsys.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_table
et spécifiezNULL
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.