SQL Server Change Data Capture est une fonctionnalité qui lit les données historiques des journaux de transactions SQL Server et les stocke dans une table spéciale.
Grâce à l'utilisation de fonctions de valeur de table spéciales (TVF), il permet ensuite à l'utilisateur d'interroger ces données, ce qui permet soit d'obtenir toutes les modifications sur une table spécifique, soit uniquement les modifications nettes résultant des modifications dans un délai spécifique.
CDC a certains avantages
- Il peut être configuré pour suivre uniquement certaines tables ou colonnes.
- Il est capable de gérer les changements de modèle dans une certaine mesure.
- Il n'affecte pas les performances aussi fortement que les déclencheurs car il fonctionne avec les journaux de transactions.
- Il est facilement activé / désactivé et ne nécessite pas de colonnes supplémentaires sur la table qui doivent être suivies.
Il présente également certains inconvénients:
- La quantité de données d'historique peut devenir très rapide.
- Vous n'êtes pas en mesure de suivre qui a effectué les modifications (du moins pas pour les suppressions).
- Les données d'historique prennent un certain temps à rattraper, car elles sont basées sur les journaux de transactions.
- Cela dépend de l'Agent SQL Server. Si l'agent n'est pas en cours d'exécution ou se bloque, aucun historique n'est suivi.
J'ai beaucoup lu sur CDC et même si je sais maintenant comment l'utiliser, je ne sais toujours pas si c'est le bon outil pour moi.
- Pour quelles tâches / scénarios le CDC est-il le bon outil? (par exemple, permettre aux utilisateurs de restaurer un objet de données à un certain moment? Audit? Affichage de l'historique complet des données?)
- Quand devriez-vous plutôt ne pas utiliser CDC, mais recourir à une solution basée sur un déclencheur personnalisé?
- Est-il acceptable d'utiliser CDC dans une base de données opérationnelle et d'utiliser les données CDC dans une application opérationnelle? (par exemple, le montrer à l'utilisateur final) Ou est-ce clairement une mauvaise utilisation de cette fonctionnalité?
J'entends souvent que CDC est un outil d'audit, mais n'est-ce pas à cela que sert SQL Server Audit ? S'agit-il de deux outils différents pour la même tâche? Ou le CDC peut-il être utilisé à d'autres fins?
Mon scénario actuel est que l'on me demande de construire un cadre de données fiable qui est censé être la base de plusieurs applications futures. Les exigences exactes sont floues, mais la première est qu'il devrait être en mesure de suivre l'historique des données et de restaurer les entrées plus anciennes ainsi que toutes les données associées d'autres tables. J'évalue actuellement le CDC en option, mais je ne sais pas si c'est la voie à suivre, car je ne trouve pas vraiment de cas d'utilisation recommandés.
Bien que j'apprécie les conseils pour mon scénario spécifique, les réponses devraient donner des conseils généraux sur le moment ou le moment de ne pas utiliser Change Data Capture.
la source
Réponses:
Premièrement,
Cela peut donc décider pour vous si l'un de vos clients n'aura pas les éditions d'entreprise, ou si vous ne savez pas encore que vous utiliserez les éditions d'entreprise. (Comme la spécification inclut "plusieurs applications futures", cela peut être un vrai problème pour vous)
Contrairement aux déclencheurs, ce n'est pas en temps réel, c'est à la fois un avantage et un inconvénient. L'utilisation de déclencheurs ralentit toujours une mise à jour.
J'ai travaillé sur un système lorsque nous avons utilisé des déclencheurs (générés par CodeSmith), ainsi que le suivi de toutes les modifications apportées aux enregistrements, nous avons également lié les modifications ensemble à une table «historique» qui comprenait le module de l'application qui a effectué la modification, et l'élément d'interface utilisateur que l'utilisateur a utilisé pour effectuer la modification.
Cependant, il est préférable de résoudre ce problème au niveau de l'application, en écrivant toutes les mises à jour dans une file d'attente de messages qui est ensuite relue pour créer une base de données à tout moment donné, voir Temporal Patterns sur le blog Martin Flowler pour un bon aperçu des options.
la source
Voici une série en 9 parties très bien écrite qui passe en revue les différentes façons d'auditer les modifications des données SQL Server. Les parties 3, 4 et 5 se concentrent sur les CDC. Cela vaut la peine de lire tous les articles, car cela répondra à vos questions, comme les différents scénarios où les fonctionnalités seraient appropriées et les frais généraux. http://solutioncenter.apexsql.com/tag/methods-for-auditing-sql-server
la source
Peut-être que ça dépend.
Oui.
Oui.
Lorsque les données du tableau des modifications ne répondent pas à vos besoins.
Oui.
Non, ce n'est pas une mauvaise utilisation de cette fonctionnalité.
Oui.
Non.
Le CDC peut être utilisé pour d'autres choses.
Il y a le suivi des modifications et la capture des données modifiées. Les deux ont leurs racines dans la réplication.
Le suivi des modifications permet de fournir les modifications nettes à une table. Un exemple d'utilisation serait une synchronisation d'appareils portables.
CDC, d'autre part, garde une trace de chaque petit changement, une histoire. On peut utiliser cet historique pour mettre à jour un entrepôt de données au lieu de copier en bloc des données, ou on peut utiliser cet historique comme données lui-même et générer des rapports à partir de celui-ci. La table de changement n'est pas masquée ni n'a un schéma bizarre ou quelque chose. Vous pouvez l'interroger et utiliser les données comme vous le souhaitez. Gardez à l'esprit ... ce n'est pas en temps réel, comme l'a dit Ian. Les données proviennent du journal des transactions, alors prenez-en soin comme vous le feriez avec la réplication, la mise en miroir ou l'envoi de journaux. Dans l'ensemble, ce sera plus rapide que les déclencheurs. Vous devrez utiliser Snapshot Isolation, qui a des frais généraux, et vous devrez penser à la récupération après sinistre.
la source
Un point de correction. À un moment donné, la capture des données modifiées n'était disponible que dans les versions répertoriées ci-dessus. Cependant, la capture des données modifiées est devenue disponible dans l'édition standard à partir de 2016 SP1. Ainsi, de nombreux articles écrits avant 2016 SP1 donnent l'impression que CDC est hors de portée pour ceux d'entre nous qui utilisent l'édition Standard. Ce n'est plus le cas. Le document Microsoft décrivant le CDC disponible est dans le lien ci-dessous.
https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017#DW
la source