Daher haben wir begonnen, die Verwendung der Änderungsdatenerfassung in einer unserer Produktionsdatenbanken zu untersuchen. Wir möchten das Datum und die Uhrzeit jeder Änderung wissen. Beim Lesen von exemplarischen Vorgehensweisen, Tutorials usw. scheint es der Standardansatz zu sein, die LSN zu verwenden, um sich auf die Systemtabelle zu beziehen cdc.lsn_time_mapping
. Dieser Ansatz funktioniert, ist jedoch weder sehr einfach noch performant, wenn über Hunderttausende von Änderungen pro Tag gesprochen wird.
In einer Testumgebung habe ich die folgenden Anpassungen an den Änderungsspurtabellen vorgenommen. Ich habe eine ALTER TABLE
Anweisung ausgegeben , um dem aufgerufenen Ende eine Spalte hinzuzufügen, [__ChangeDateTime]
und den Standardwert festgelegt GetDate()
. Der Ansatz scheint zu funktionieren, die Änderungsverfolgung funktioniert immer noch normal, die Datums- und Uhrzeitangaben werden erfasst. Aber das Herumspielen mit Systemtischen macht mich etwas nervös.
Wenn dies kein Systemfeld ist, das Microsoft von Anfang an hinzugefügt hat , müssen sie ihre Gründe haben. Da sie sich stattdessen für den Ansatz von LSN zu cdc.lsn_time_mapping entschieden haben, richte ich mich auf Probleme ein, indem ich auf diese Weise meinen eigenen Hack erstelle?
AKTUALISIEREN:
Beim Testen wurde festgestellt, dass GetDate () manchmal nicht präzise genug für unsere Anforderungen ist - mehrere Änderungen werden gleichzeitig verwendet. Empfehlen Sie die Verwendung von sysdatetime () und datetime2 , um den Wert auf die Nanosekunde zu verschieben. Option für 2008+ nur offensichtlich.
Die einzige Einschränkung, die ich geben würde, ist, dass diese Tabellen automatisch gelöscht werden, wenn CDC deaktiviert ist. Die Spalte wird beim erneuten Rendern nicht automatisch neu erstellt
quelle