Nous avons donc commencé à explorer l'utilisation de la capture de données modifiées sur l'une de nos bases de données de production. Nous aimerions connaître l'heure de chaque modification. En lisant les procédures pas à pas et les didacticiels, etc., il semble que l'approche standard consiste à utiliser le LSN pour se rapporter à la cdc.lsn_time_mapping
table système. Cette approche fonctionne mais n'est pas très simple ni performante lorsqu'on parle de centaines de milliers de changements par jour.
Dans un environnement de test, j'ai apporté les ajustements suivants aux tables de suivi des modifications. J'ai émis une ALTER TABLE
déclaration pour ajouter une colonne à la fin appelée [__ChangeDateTime]
et j'ai fait sa valeur par défaut GetDate()
. L'approche semble fonctionner, le suivi des modifications fonctionne toujours normalement, les datetime sont capturés. Mais fouiner avec les tables système me rend un peu nerveux.
Si ce n'est pas un champ système que Microsoft a ajouté depuis le début, ils doivent avoir leurs raisons. Puisqu'ils ont plutôt opté pour l'approche LSN to cdc.lsn_time_mapping, est-ce que je me prépare à des problèmes en créant mon propre hack de cette façon?
MISE À JOUR:
Nous avons découvert lors des tests que GetDate () n'est parfois pas assez précis pour nos besoins - plusieurs changements partageant la même heure. Recommandez d'utiliser sysdatetime () et datetime2 pour déplacer la valeur à la nanoseconde. Option pour 2008+ seulement évidemment.
La seule mise en garde que je donnerais est que ces tables sont supprimées automatiquement lorsque CDC est désactivé. La colonne ne sera pas recréée automatiquement lorsque vous la renaturerez
la source