Suivre les modifications de données (SQL Server)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server fournit deux fonctionnalités qui effectuent le suivi des modifications apportées aux données dans une base de données : la capture des données modifiées et le suivi des modifications. Ces fonctionnalités permettent aux applications de déterminer les modifications de DML (opérations d’insertion, de mise à jour et de suppression) apportées aux tables utilisateur dans une base de données. La capture de données modifiées et le suivi des modifications peuvent être activés sur la même base de données ; aucune attention particulière n'est requise. Pour connaître les éditions de SQL Server qui prennent en charge la capture des données modifiées et le suivi des modifications, consultez Éditions et fonctionnalités prises en charge de SQL Server 2022.

Avantages de l’utilisation de la capture de données modifiées ou du suivi des modifications

Certaines applications doivent, pour être efficaces, être en mesure de rechercher les données qui ont été modifiées dans une base de données. En règle générale, pour déterminer les modifications de données, les développeurs d’applications doivent implémenter une méthode de suivi personnalisée dans leurs applications à l’aide d’une combinaison de déclencheurs, de colonnes d’horodatage et de tables supplémentaires. La création de ces applications demande généralement un effort considérable, aboutit à des mises à jour de schéma et se traduit souvent par une importante diminution des performances.

L'utilisation de la capture de données modifiées ou du suivi des modifications dans les applications pour suivre les modifications dans une base de données présente les avantages suivants par rapport au développement d'une solution personnalisée :

  • Le temps de développement est réduit. Étant donné que les fonctionnalités sont disponibles dans SQL Server, vous n’avez pas besoin de développer une solution personnalisée.

  • Les modifications de schéma ne sont pas requises. Vous n’avez pas besoin d’ajouter de colonnes, d’ajouter des déclencheurs ou de créer une table latérale dans laquelle effectuer le suivi des lignes supprimées ou stocker les informations de suivi des modifications si les colonnes ne peuvent pas être ajoutées aux tables utilisateur.

  • Il existe un mécanisme de propre up intégré. Le nettoyage du suivi des modifications s'effectue automatiquement en arrière-plan. Les propre personnalisées pour les données stockées dans une table latérale ne sont pas requises.

  • Des fonctions sont fournies pour l'obtention des informations de modification.

  • Il existe une faible surcharge pour les opérations DML. Le suivi synchrone des modifications entraîne toujours une charge de traitement. Toutefois, le recours au suivi des modifications peut contribuer à réduire cette charge. La charge de traitement est souvent inférieure à celle qu’entraînent des solutions alternatives, en particulier lorsque celles-ci demandent d’utiliser des déclencheurs.

  • Le suivi des modifications est basé sur des transactions validées. L'ordre des modifications est basé sur l'heure de validation des transactions. Cela favorise l'obtention de résultats fiables lorsque sont impliquées des transactions longues ou qui se chevauchent. Les solutions personnalisées qui utilisent des valeurs d’horodatage doivent être conçues pour gérer ces scénarios.

  • Les outils standard sont disponibles pour les opérations de configuration et de gestion. SQL Server fournit des instructions DDL standard, SQL Server Management Studio, des vues de catalogue et des autorisations de sécurité.

Différences entre la capture des données modifiées et le suivi des modifications

Le tableau suivant répertorie les différences de fonctionnalités entre la capture de données modifiées et le suivi des modifications. Le mécanisme de suivi de la capture de données modifiées implique une capture asynchrone des modifications à partir du journal des transactions afin que les modifications soient disponibles après l'opération DML. Dans le suivi des modifications, le mécanisme de suivi implique le suivi synchrone des modifications en parallèle avec les opérations DML, afin que les informations relatives aux modifications soient disponibles immédiatement.

Fonction Capture des données modifiées Suivi des modifications
Modifications suivies
Modifications DML Oui Oui
Informations suivies
Données historiques Oui No
Si la colonne a été modifiée Oui Oui
Type DML Oui Oui

Capture des données modifiées

La capture de données modifiées fournit des informations de modification historiques pour une table utilisateur en capturant à la fois le fait que des modifications DML aient été apportées et les données effectivement modifiées. Les modifications sont capturées à l'aide d'un processus asynchrone qui lit le journal des transactions et n'a qu'un faible impact sur le système.

Comme indiqué dans l'illustration suivante, les modifications apportées aux tables utilisateur sont capturées dans des tables de modifications correspondantes. Ces tables de modification fournissent une vue historique des modifications au fil du temps. Les fonctions de capture de données modifiées que SQL Server fournit permettent de consommer facilement et systématiquement les données modifiées.

Diagram showing the concept of change data capture.

Modèle de sécurité

Cette section décrit le modèle de sécurité de la capture de données modifiées.

Configuration et administration

Pour activer ou désactiver la capture de données modifiées pour une base de données, l’appelant de sys.sp_cdc_enable_db (Transact-SQL) ou sys.sp_cdc_disable_db (Transact-SQL) doit être membre du rôle sysadmin serveur fixe. L’activation et la désactivation de la capture des données modifiées au niveau de la table nécessitent que l’appelant de sys.sp_cdc_enable_table (Transact-SQL) et sys.sp_cdc_disable_table (Transact-SQL) soient membres du rôle sysadmin ou membre de la base de données db_owner rôle.

L’utilisation de procédures stockées pour prendre en charge l’administration des travaux de capture de données modifiées est limitée aux membres du rôle serveur sysadmin et du rôle de base de données db_owner .

Modifier les requêtes d’énumération et de métadonnées

Pour accéder aux données modifiées associées à une instance de capture, l’utilisateur doit disposer d’un accès SELECT à toutes les colonnes capturées de la table source associée. En outre, si un rôle de gestion est spécifié lors de la création de l’instance de capture, l’appelant doit également être membre du rôle de gestion spécifié, et le schéma de capture de données modifiées (cdc) doit avoir un accès SELECT au rôle de déplacement.

D’autres fonctions de capture de données modifiées générales pour accéder aux métadonnées seront accessibles à tous les utilisateurs de la base de données par le biais du rôle public, bien que l’accès aux métadonnées retournées soit également contrôlé à l’aide de l’accès SELECT aux tables sources sous-jacentes et de l’appartenance à des rôles de gestion définis.

Opérations DDL pour modifier les tables sources prenant en charge la capture de données

Lorsqu’une table est activée pour la capture de données modifiées, des opérations DDL peuvent être appliquées à la table uniquement par un membre du rôle serveur fixe sysadmin, un membre du rôle de base de données db_ownerou un membre du rôle de base de données db_ddladmin. Les utilisateurs autorisés de manière explicite à effectuer des opérations DDL sur la table recevront l'erreur 22914 s'ils tentent d'effectuer ces opérations.

Considérations relatives au type de données pour la capture de données modifiées

Tous les types de colonne de base sont pris en charge par la capture de données modifiées. Le tableau suivant indique le comportement et les limites de plusieurs types de colonne.

Type de colonne Modifications capturées dans les tables de modifications Limites
Colonnes éparses Oui Ne prend pas en charge la capture des modifications lors de l’utilisation d’un jeu de colonnes.
Colonnes calculées Non Les modifications apportées aux colonnes calculées ne sont pas suivies. La colonne apparaît dans la table de modifications avec le type approprié, mais a la valeur NULL.
XML Oui Les modifications apportées aux éléments XML individuels ne sont pas suivies.
Timestamp Oui Le type de données dans la table des modifications est converti en binaire.
types de données BLOB Oui L'image précédente de la colonne BLOB est stockée uniquement si la colonne elle-même est modifiée.

Capture de données modifiées et autres fonctionnalités SQL Server

Cette section décrit comment les fonctionnalités suivantes interagissent avec la capture de données modifiées :

  • Mise en miroir de bases de données
  • Réplication transactionnelle
  • Restauration ou attachement de base de données

Mise en miroir de bases de données

Une base de données prenant en charge la capture de données modifiées peut être mise en miroir. Pour faire en sorte que la capture et le nettoyage s'exécutent automatiquement sur le miroir, suivez ces étapes :

  1. Vérifiez que SQL Server Agent s’exécute sur le miroir.

  2. Créez le travail de capture et le travail de nettoyage sur le miroir le basculement de l'unité principale sur l'unité miroir. Pour créer les travaux, utilisez la procédure stockée sys.sp_cdc_add_job (Transact-SQL).

Pour plus d’informations sur la miroir de base de données, consultez La mise en miroir de bases de données (SQL Server)

Réplication transactionnelle

La capture de données modifiées et la réplication transactionnelle peuvent coexister dans la même base de données, mais le remplissage des tables de modifications est géré différemment lorsque les deux fonctionnalités sont activées. La capture de données modifiées et la réplication transactionnelle utilisent toujours la même procédure, sp_replcmds, pour lire les modifications dans le journal des transactions. Lorsque la capture de données modifiées est activée par elle-même, un travail SQL Server Agent appelle sp_replcmds. Lorsque les deux fonctionnalités sont activées sur la même base de données, l’Agent de lecture du journal appelle sp_replcmds. Cet agent remplit les tables de modification et les distribution tables de base de données. Pour plus d’informations, consultez Replication Log Reader Agent.

Considérez un scénario dans lequel la capture de données modifiées est activée sur la base de données AdventureWorks2022 , et deux tables sont activées pour la capture. Pour remplir les tables de modification, le travail de capture appelle sp_replcmds. La base de données est activée pour la réplication transactionnelle, et une publication est créée. Ensuite, l'Agent de lecture du journal est créé pour la base de données et le travail de capture est supprimé. L'Agent de lecture du journal continue à analyser le journal à partir du dernier numéro séquentiel dans le journal qui été validé dans la table de modifications. Cela garantit la cohérence des données dans les tables de modifications. Si la réplication transactionnelle est désactivée dans cette base de données, l’Agent de lecture du journal est supprimé et le travail de capture est recréé.

Remarque

Lorsque l’Agent de lecture du journal est utilisé pour la capture de données modifiées et la réplication transactionnelle, les modifications répliquées sont d’abord écrites dans la distribution base de données. Puis, les modifications capturées sont écrites dans les tables de modifications. Les deux opérations sont validées ensemble. S’il existe une latence lors de l’écriture dans la distribution base de données, il y aura une latence correspondante avant que les modifications apparaissent dans les tables de modifications.

Restaurer ou attacher une base de données activée pour la capture de données modifiées

SQL Server utilise la logique suivante pour déterminer si la capture de données modifiées reste activée après la restauration ou l’attachement d’une base de données :

  • Si une base de données est restaurée sur le même serveur avec le même nom de base de données, la capture de données modifiées reste activée.

  • Si une base de données est restaurée sur un autre serveur, la capture de données modifiées par défaut est désactivée et toutes les métadonnées associées sont supprimées.

    Pour conserver la fonction de capture de données modifiées, utilisez l'option KEEP_CDC lors de la restauration de la base de données. Pour plus d'informations sur cette option, consultez RESTORE.

  • Si une base de données est détachée puis attachée au même serveur ou à un autre serveur, la capture de données modifiées reste activée.

  • Si une base de données est attachée ou restaurée avec l’option KEEP_CDC vers une édition autre que Standard ou Entreprise, l’opération est bloquée, car la capture de données modifiées nécessite des éditions SQL Server Standard ou Enterprise. Le message d'erreur 932 est affiché :

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either disable change data capture in the database by using a supported edition of SQL Server, or upgrade the instance to one that supports change data capture.
    

Vous pouvez utiliser sys.sp_cdc_disable_db pour supprimer la capture de données modifiées d’une base de données restaurée ou attachée.

Suivi des modifications

Le suivi des modifications capture le fait que les lignes d’une table ont été modifiées, mais ne capture pas les données qui ont été modifiées. Cela permet aux applications de déterminer les lignes qui ont changé, les données de ligne les plus récentes étant obtenues directement à partir des tables utilisateur. Le suivi des modifications est par conséquent plus limité dans les questions historiques auxquelles il peut répondre, comparé à la capture de données modifiées. Toutefois, pour les applications qui ne nécessitent pas les informations historiques, il existe beaucoup moins de surcharge de stockage en raison des données modifiées qui ne sont pas capturées. Un mécanisme de suivi synchrone est utilisé pour assurer le suivi des modifications. Ce mécanisme a été conçu pour imposer une charge minimale sur les opérations DML.

L'illustration suivante montre un scénario de synchronisation qui pourrait tirer parti du suivi des modifications. Dans ce scénario, une application requiert les informations suivantes : toutes les lignes de la table qui ont été modifiées depuis la dernière synchronisation de la table et uniquement les données de la ligne actuelle. Étant donné qu'un mécanisme synchrone est utilisé pour assurer le suivi des modifications, une application peut effectuer la synchronisation bidirectionnelle et détecter de manière fiable tout conflit pouvant survenir.

Diagram showing the concept of change tracking.

Suivi des modifications et services de synchronisation pour ADO.NET

Sync Services pour ADO.NET permet la synchronisation entre les bases de données, fournissant une API intuitive et flexible qui vous permet de créer des applications qui ciblent des scénarios hors connexion et de collaboration. Sync Services pour ADO.NET fournit une API pour synchroniser les modifications, mais elle ne suit pas réellement les modifications apportées au serveur ou à la base de données homologue. Vous pouvez créer un système de suivi des modifications personnalisé, mais cela entraîne généralement un coût élevé au niveau de la complexité et des performances. Pour suivre les modifications d’un serveur ou d’une base de données homologue, nous vous recommandons d’utiliser le suivi des modifications dans SQL Server, car il est facile de configurer et de fournir un suivi hautes performances.

Pour plus d’informations sur le suivi des modifications et les services de synchronisation pour ADO.NET, utilisez les liens suivants :

Étapes suivantes

Tâche Article
Fournit une vue d'ensemble de la capture de données modifiées. À propos de la capture de données modifiées (SQL Server)
Explique comment activer et désactiver la capture de données modifiées sur une base de données ou une table. Activer et désactiver la capture de données modifiées (SQL Server)
Indique comment administrer et analyser la capture de données modifiées. Administrer et surveiller la capture de données modifiées (SQL Server)
Décrit comment utiliser les données modifiées qui sont à la disposition des utilisateurs de capture de données modifiées. Cet article traite de la validation des limites LSN, des fonctions de requête et des scénarios de fonction de requête. Utiliser les données modifiées (SQL Server)
Fournit une vue d'ensemble du suivi des modifications. À propos du suivi des modifications (SQL Server)
Explique comment activer et désactiver le suivi des modifications sur une base de données ou une table. Activer et désactiver le suivi des modifications (SQL Server)
Explique comment gérer le suivi des modifications, configurer la sécurité et déterminer l'impact de l'utilisation du suivi des modifications sur le stockage et les performances. Gérer le suivi des modifications (SQL Server)
Décrit comment les applications qui utilisent le suivi des modifications peuvent obtenir les modifications suivies, appliquer ces modifications à une autre banque de données et mettre à jour la base de données source. Cet article décrit également le rôle joué par le suivi des modifications lorsqu’un basculement se produit et qu’une base de données doit être restaurée à partir d’une sauvegarde. Utiliser le suivi des modifications (SQL Server)

Voir aussi