Verwenden von SQL Server Change Data Capture mit einem sich häufig ändernden Schema

10

Wir möchten die Erfassung von SQL Server-Änderungsdaten für ein neues Subsystem aktivieren, das wir erstellen.

Es ist nicht wirklich so, weil wir es brauchen, aber wir werden dazu gedrängt, eine vollständige Rückverfolgbarkeit der Historie zu haben, und CDC würde diese Anforderung mit minimalem Aufwand für unsere Teile gut lösen.

Wir verfolgen einen agilen Entwicklungsprozess, was in diesem Fall bedeutet, dass wir häufig Änderungen am Datenbankschema vornehmen, z. B. neue Spalten hinzufügen, Daten in andere Spalten verschieben usw.

Wir haben einen kleinen Test durchgeführt, bei dem wir eine Tabelle erstellt, CDC für diese Tabelle aktiviert und dann der Tabelle eine neue Spalte hinzugefügt haben. Änderungen an der neuen Spalte werden nicht in der CDC-Tabelle registriert.

Gibt es einen Mechanismus zum Aktualisieren der CDC-Tabelle auf das neue Schema und gibt es bewährte Methoden für den Umgang mit erfassten Daten bei der Migration des Datenbankschemas?

Pete
quelle
Sie könnten eine bessere / schnellere Antwort erhalten, wenn Sie diese Frage in dba.stackexchange.com
TimG
2
@TimG Das Multiposting einer Frage wird nicht empfohlen. Eine Migration wäre eine Option. Sie hat jedoch eine Prämie und kann nicht migriert werden, solange die Prämie aktiv ist. Die Frage und ihre Prämie wurden jedoch im Chatraum von dba.SE erwähnt und haben einige Aufmerksamkeit erregt.

Antworten:

5

Wir haben auch vor kurzem begonnen, uns mit CDC zu befassen. Ich bin kein Experte auf diesem Gebiet, aber ich glaube, ich habe einige Antworten auf Ihre Fragen.

CDC wird Ihnen größtenteils dabei helfen , Ihr Ziel einer vollständig nachvollziehbaren Geschichte zu erreichen, aber ich denke nicht, dass es Sie den ganzen Weg dorthin bringen wird.

Zuerst:

Wir nehmen häufig Änderungen am Datenbankschema vor ... Gibt es einen Mechanismus zum Aktualisieren der CDC-Tabelle auf das neue Schema?

Und hier wird CDC Ihrer Meinung nach scheitern. Die MSDN-Dokumentation unter dem Abschnitt "Grundlegendes zum Änderungsverfolgungsaufwand" ist ziemlich klar, dass die Schemaänderungen für Sie nicht nachverfolgt werden. Zum Beispiel mit Alter Table Add Column:

Wenn der Änderungsverfolgungstabelle eine neue Spalte hinzugefügt wird, wird das Hinzufügen der Spalte nicht verfolgt. Es werden nur die Aktualisierungen und Änderungen verfolgt, die an der neuen Spalte vorgenommen wurden.

Drop Column ist etwas komplexer.

Sie sollten jedoch DB-Skripte verwenden, um Ihr Schema zu ändern, damit Sie sich hier nicht unbedingt auf CDC verlassen müssen. Auf diese Weise können Sie die Konsistenz zwischen Ihren QS- und Produktionsschemata gewährleisten. Die Änderung der Qualitätssicherung sollte per Skript erfolgen, damit genau dieselben Änderungen auf Prod angewendet werden können. Es sollte nicht zu schwierig sein, die Schemaänderungen aus diesen Skripten zu extrahieren. Dies kann bedeuten, dass die "Zeit" -Dimension Ihres Verlaufs von der Version anstelle der tatsächlichen Zeit abhängt, das Endergebnis jedoch dasselbe ist.

Wenn Sie noch keine haben, erstellen Sie eine Tabelle, um die Version Ihres Datenbankschemas zu verfolgen. Platzieren Sie dann diese Versions-Tabelle für das Datenbankschema unter CDC, damit Sie makroskopische Änderungen am Schema an den mikroskopischen Änderungen in einer bestimmten Tabelle ausrichten können.

Nach meinem Verständnis sollten die Daten immer noch zu den neuen Spalten hinzugefügt werden, unabhängig davon, ob CDC die Schemaänderung nicht anzeigt. Die Datenmigration von Tabelle zu Tabelle sollte auch von CDC übernommen werden.

Gibt es Best Practices für den Umgang mit erfassten Daten bei der Migration des Datenbankschemas?

Behandeln Sie es so, als würden Sie ein Audit behandeln. Sie müssen verstehen, was Sie untersuchen, warum Sie es untersuchen und wie lange Sie diese Informationen aufbewahren müssen. Umfang und Aufbewahrung sind die beiden größten Bugaboos, wenn es um eine solche Aufgabe geht.

Die Berichterstellungstools von CDC sind verständlicherweise streng, daher müssen Sie den Kontext der Änderungen kennen. Es ist zu einfach zu sagen "Verfolge alles !" und am Ende nichts, was als Ergebnis verwendbar ist. Ebenso können Sie die Größe Ihrer Datenbank verdoppeln, indem Sie eine Kopie jeder Änderung aufbewahren. Auf einem hohen Abwanderungstisch mit vielen Einfügungen und Löschungen werden Sie astronomisches Wachstum erzielen. Das ist an und für sich nicht schlecht, aber Sie müssen dieses Wachstum budgetieren und über die Mittel verfügen, um alle generierten Daten zu untersuchen.

Auf diese Weise können Sie wieder verstehen, warum Sie dazu gedrängt werden, eine vollständige Rückverfolgbarkeit zu gewährleisten. Es gibt sicherlich triftige Gründe für diese Anforderung. Sie können Ihre effektive Prüfung der Datenbank jedoch erst strukturieren, wenn Sie wissen, warum Sie diese Anforderung erfüllen müssen.


quelle
1

Sie können das Hinzufügen von Spalten mit DDL-Triggern verfolgen.

CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] |
EXTERNAL NAME < method specifier > [ ; ] }

Mit der Ereignisgruppe DDL_TABLE_EVENTS können Sie für CREATE, DROP oder ALTER einer Tabelle ausgelöst werden.

Wenn Sie Enterprise> 2008 verwenden, sollten Sie sich jedoch SQL Server Audit ansehen , da es "alle Überwachungsfunktionen in einer Überwachungsspezifikation kombiniert". Dieser msdn-Link enthält einen ausführlichen Artikel dazu: http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx .

CREATE SERVER AUDIT audit_name
TO { [ FILE (<file_options> [, ...n]) ] |
APPLICATION_LOG | SECURITY_LOG }
[ WITH ( <audit_options> [, ...n] ) ] }[ ; ]

<file_options>::=
{FILEPATH = 'os_file_path'
[, MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
[, MAX_ROLLOVER_FILES = integer ]
[, RESERVE_DISK_SPACE = { ON | OFF } ] }

<audit_options>::=
{ [ QUEUE_DELAY = integer ]
[, ON_FAILURE = { CONTINUE | SHUTDOWN } ]
[, AUDIT_GUID = uniqueidentifier ]}

Anschließend erstellen Sie Server- oder Datenbankspezifikationen.

JoseTeixeira
quelle
0

Simple-Talk enthält einen großartigen Artikel über die Erfassung von Änderungsdaten und eine ausführliche Anleitung zu CDC sowie die MSDN- Dokumentation, in der die verschiedenen Methoden je nach den Anforderungen erläutert werden. Beide können Ihnen jedoch bei Ihren spezifischen Anforderungen helfen.

Sonniger Patel
quelle