À propos du suivi des modifications (SQL Server)About Change Tracking (SQL Server)

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Le suivi des modifications est une solution légère qui fournit un mécanisme efficace de suivi des modifications pour les applications.Change tracking is a lightweight solution that provides an efficient change tracking mechanism for applications. En règle générale, les développeurs d’applications devaient implémenter des mécanismes personnalisés de suivi des modifications pour permettre aux applications d’effectuer des requêtes portant sur les modifications apportées aux données d’une base de données et d’accéder aux informations liées à ces modifications.Typically, to enable applications to query for changes to data in a database and access information that is related to the changes, application developers had to implement custom change tracking mechanisms. La création de ces mécanismes demandait souvent un effort important et l’utilisation d’une combinaison de déclencheurs, de colonnes timestamp , de nouvelles tables pour le stockage des informations de suivi et de processus de nettoyage personnalisés.Creating these mechanisms usually involved a lot of work and frequently involved using a combination of triggers, timestamp columns, new tables to store tracking information, and custom cleanup processes.

La quantité d'informations relatives aux modifications varie selon les types d'applications.Different types of applications have different requirements for how much information they need about the changes. Les applications peuvent utiliser le suivi des modifications pour répondre aux questions suivantes sur les modifications apportées à une table utilisateur :Applications can use change tracking to answer the following questions about the changes that have been made to a user table:

  • Quelles lignes ont changé pour une table utilisateur ?What rows have changed for a user table?

    • Seul le fait qu'une ligne a changé est requis, et non le nombre de fois que la ligne a été modifiée ou les valeurs des modifications intermédiaires.Only the fact that a row has changed is required, not how many times the row has changed or the values of any intermediate changes.

    • Les données les plus récentes peuvent être obtenues directement à partir de la table qui fait l'objet du suivi.The latest data can be obtained directly from the table that is being tracked.

  • Est-ce qu'une ligne a changé ?Has a row changed?

    • Le fait qu'une ligne a changé et les informations sur la modification doivent être disponibles et enregistrées au moment où la modification a été apportée dans la même transaction.The fact that a row has changed and information about the change must be available and recorded at the time that the change was made in the same transaction.

Note

Si une application requiert des informations sur toutes les modifications apportées et les valeurs intermédiaires des données modifiées, il peut être plus approprié d'utiliser la capture de données modifiées plutôt que le suivi des modifications.If an application requires information about all the changes that were made and the intermediate values of the changed data, using change data capture, instead of change tracking, might be appropriate. Pour plus d’informations, consultez À propos de la capture de données modifiées (SQL Server).For more information, see About Change Data Capture (SQL Server).

Applications de synchronisation monodirectionnelle et bidirectionnelleOne-Way and Two-Way Synchronization Applications

Les applications qui doivent synchroniser des données avec une instance du Moteur de base de données SQL ServerSQL Server Database Engine doivent être en mesure de rechercher les modifications.Applications that have to synchronize data with an instance of the Moteur de base de données SQL ServerSQL Server Database Engine must be able to query for changes. Le suivi des modifications peut servir de base aux applications de synchronisation monodirectionnelle et bidirectionnelle.Change tracking can be used as a foundation for both one-way and two-way synchronization applications.

Applications de synchronisation monodirectionnelleOne-Way Synchronization Applications

Il est possible de créer des applications de synchronisation monodirectionnelle, comme les applications clientes ou de mise en cache de couche intermédiaire, qui utilisent le suivi des modifications.One-way synchronization applications, such as a client or mid-tier caching application, can be built that use change tracking. Comme le montre l’illustration suivante, une application de mise en cache requiert que les données soient stockées dans le Moteur de base de donnéesDatabase Engine et mises en cache dans d’autres banques de données.As shown in the following illustration, a caching application requires data to be stored in the Moteur de base de donnéesDatabase Engine and to be cached in other data stores. L'application doit être en mesure de maintenir le cache à jour avec toutes les modifications apportées aux tables de la base de données.The application must be able to keep the cache up-to-date with any changes that have been made to the database tables. Il n'y a pas de modifications à retransmettre au Moteur de base de donnéesDatabase Engine.There are no changes to pass back to the Moteur de base de donnéesDatabase Engine.

Présente des applications de synchronisation monodirectionnelleShows one-way synchronization applications

Applications de synchronisation bidirectionnelleTwo-Way Synchronization Applications

Il est aussi possible de créer des applications de synchronisation bidirectionnelle qui utilisent le suivi des modifications.Two-way synchronization applications can also be built that use change tracking. Dans ce scénario, les données d'une instance du Moteur de base de donnéesDatabase Engine sont synchronisées avec une ou plusieurs banques de données.In this scenario, the data in an instance of the Moteur de base de donnéesDatabase Engine is synchronized with one or more data stores. Les données de ces banques peuvent être mises à jour et les modifications doivent être resynchronisées avec le Moteur de base de donnéesDatabase Engine.The data in those stores can be updated and the changes must be synchronized back to the Moteur de base de donnéesDatabase Engine.

Présente des applications de synchronisation bidirectionnelleShows two-way synchronization applications

Un bon exemple d'application de synchronisation bidirectionnelle est une application qui n'est connectée que de manière occasionnelle.A good example of two-way synchronization application is an occasionally connected application. Dans ce type d'application, une application cliente interroge et met à jour une banque locale.In this type of application, a client application queries and updates a local store. Lorsqu'une connexion est disponible entre un client et un serveur, l'application effectue une synchronisation avec le serveur et les données modifiées circulent dans les deux directions.When a connection is available between a client and server, the application will synchronize with a server, and changed data flows in both directions.

Les applications de synchronisation bidirectionnelle doivent être en mesure de détecter les conflits.The two-way synchronization applications must be able to detect conflicts. Un conflit peut se produire si les mêmes données ont été modifiées dans les deux banques de données entre deux synchronisations.A conflict would occur if the same data was changed in both data stores in the time between synchronizations. Dotée d'une fonctionnalité de détection des conflits, une application peut faire en sorte que les modifications ne soient pas perdues.With the ability to detect conflicts, an application can make sure that changes are not lost.

Mode de fonctionnement du suivi des modificationsHow Change Tracking Works

Pour configurer le suivi des modifications, vous pouvez utiliser des instructions DDL ou SQL Server Management StudioSQL Server Management Studio.To configure change tracking, you can use DDL statements or SQL Server Management StudioSQL Server Management Studio. Pour plus d’informations, consultez Activer et désactiver le suivi des modifications (SQL Server).For more information, see Enable and Disable Change Tracking (SQL Server). Pour effectuer le suivi des modifications, il est nécessaire de l'activer d'abord pour la base de données, puis pour les tables à suivre au sein de cette base de données.To track changes, change tracking must first be enabled for the database and then enabled for the tables that you want to track within that database. Aucune modification de la définition de table n’est requise et aucun déclencheur n’est créé.The table definition does not have to be changed in any way, and no triggers are created.

À l'issue de la configuration du suivi des modifications pour une table, toute instruction DML qui affecte des lignes dans la table provoquera l'enregistrement d'informations de suivi des modifications pour chaque ligne modifiée.After change tracking is configured for a table, any DML statement that affects rows in the table will cause change tracking information for each modified row to be recorded. Pour rechercher les lignes qui ont changé et obtenir des informations sur les modifications, vous pouvez utiliser des fonctions de suivi des modifications.To query for the rows that have changed and to obtain information about the changes, you can use change tracking functions.

Les valeurs de la colonne clé primaire sont les seules informations de la table faisant l'objet d'un suivi à être enregistrées avec les informations de modification.The values of the primary key column is only information from the tracked table that is recorded with the change information. Ces valeurs identifient les lignes qui ont été modifiées.These values identify the rows that have been changed. Pour obtenir les données les plus récentes pour ces lignes, une application peut utiliser les valeurs de la colonne clé primaire pour joindre la table source à la table faisant l'objet du suivi.To obtain the latest data for those rows, an application can use the primary key column values to join the source table with the tracked table.

Les informations sur la modification apportée à chaque ligne peuvent également être obtenues en utilisant le suivi des modifications.Information about the change that was made to each row can also be obtained by using change tracking. Il peut s'agir du type d'opération DML qui a provoqué la modification (insertion, mise à jour ou suppression) ou des colonnes modifiées dans le cadre d'une opération de mise à jour.For example, the type of DML operation that caused the change (insert, update, or delete) or the columns that were changed as part of an update operation.

Nettoyage du suivi des modificationsChange Tracking Cleanup

Le suivi des informations pour toutes les tables (celles pour lesquelles le suivi des modifications est activé) est stocké dans un rowstore en mémoire.Change tracking information for all tables (enabled for Change Tracking) is stored in an in-memory rowstore. Les données de suivi des modifications associées à chaque table activée pour le suivi des modifications sont vidées à chaque point de contrôle, du rowstore en mémoire vers la table interne sur disque correspondante.Change tracking data associated with each table enabled for Change Tracking is flushed on every checkpoint from the in-memory rowstore to the corresponding on-disk internal table. Durant le point de contrôle, le rowstore en mémoire est également purgé une fois que les lignes ont été déplacées vers les tables sur disque.During checkpoint, the in-memory rowstore is also purged after the rows are moved to the on-disk tables.

Chaque table activée pour le suivi des modifications a une table sur disque interne utilisée par les fonctions de suivi des modifications pour déterminer la version de modification et les lignes qui ont changé depuis une version particulière.Each table that is enabled for Change Tracking has an internal on-disk table which is used by Change Tracking functions to determine the change version and the rows that have changed since a particular version. Chaque fois que le thread de nettoyage automatique se réveille, il analyse toutes les bases de données utilisateur sur l’instance de SQL Server pour identifier les bases de données activées pour le suivi des modifications.Every time the auto cleanup thread wakes up, it scans all the user databases on the SQL Server instance to identify the change tracking enabled databases. En fonction du paramètre de période de rétention de la base de données, chaque table sur disque interne est purgée de ses enregistrements ayant expiré.Based on the retention period setting of the database, each internal on-disk table is purged of its expired records.

Une procédure stockée a été ajoutée aux Service Packs pour SQL Server 2014SQL Server 2014 et SQL Server 2016SQL Server 2016 afin d’effectuer un nettoyage manuel des tables internes de suivi des modifications.A stored procedure was added in Service Packs for SQL Server 2014SQL Server 2014 and SQL Server 2016SQL Server 2016 for performing manual cleanup for the internal Change Tracking internal tables. Vous trouverez plus d’informations sur cette procédure stockée dans l’article KB173157.More information about the stored procedure is available in KB173157.

Voir aussiSee Also

Activer et désactiver le suivi des modifications (SQL Server) Enable and Disable Change Tracking (SQL Server)
Utiliser le suivi des modifications (SQL Server) Work with Change Tracking (SQL Server)
Gérer le suivi des modifications (SQL Server) Manage Change Tracking (SQL Server)
Suivi des modifications de données (SQL Server)Track Data Changes (SQL Server)