Was ist Ihr Workflow für die Planung einer Datenmigration?

23

So oft wurde mir am Ende einer Softwareentwicklungsmaßnahme mitgeteilt, dass "Okay, wir haben all diesen neuen Code und es müssen Tabellen geändert und Daten migriert werden".

Es scheint jedes Mal ein einmaliges Szenario zu sein, das aus der Hüfte schießt und das am besten zu erraten ist. Ich denke, das ist meine schwächste Fähigkeit als DBA.

Ich möchte einige Muster für das Annähern, Verwalten und Testen von Datenmigrationen kennenlernen .

Bitte informieren Sie mich über einige bewährte Methoden und / oder wo ich Lernmaterial erhalten kann, um mich in diesem Bereich zu verbessern.

randomx
quelle

Antworten:

14

Jedes Mal, wenn ich es getan habe, haben wir zwei Durchgänge gemacht ...

  1. Machen Sie einen Snapshot und arbeiten Sie auf einem anderen Server. Ermitteln Sie anhand dieses Snapshots, was für die Migration erforderlich ist, und erstellen Sie ein Skript.
  2. Sobald sie das Skript in der Hand haben, wird der Snap-Shop auf dem Testsystem wiederhergestellt und es wird zeitlich festgelegt, ob er innerhalb der erforderlichen Zeit ausgeführt wird oder ob er optimiert und geändert wird, bis dies möglich ist.
  3. Lassen Sie die Stakeholder abzeichnen, dass mit den Daten auf dem Testsystem nichts falsch aussieht.

Dann haben Sie über ein Wochenende einen geplanten Ausfall:

  1. Freitagnacht werden die Systeme, die die Datenbank verwenden, heruntergefahren, ein vollständiges Cold-Backup wird erstellt und die Skripts werden ausgeführt, um die Daten zu migrieren / zu ändern / was auch immer
  2. Systeme werden unter einer privaten Adresse wiederhergestellt oder auf irgendeine Weise eingerichtet, sodass sie nur den Beteiligten für Akzeptanztests offen stehen
  3. Wenn die Stakeholder zustimmen, wird das System online gestellt und veröffentlicht. Andernfalls wird die Datenbank aus der am Freitagabend erstellten Sicherung wiederhergestellt, und Sie beginnen den Vorgang erneut.

Aufgrund unseres Zeitplans hatten die Datenbank-Mitarbeiter in der Regel von Freitag um 18 Uhr bis Samstag um 10 Uhr Zeit, um die Sicherungs- und Migrationsskripte auszuführen. Daher bestand unser Ziel darin, dass sie in weniger als 8 Stunden ausgeführt wurden (~ 6 davon waren Sicherungen). Nehmen Sie sich etwas Zeit für unsere Tests und Korrekturen, bevor sie den Stakeholdern zur Verfügung gestellt werden.

Die Stakeholder erhielten ihre Zeitfenster im Voraus, sodass sie ihr Wochenende zu Beginn des Fensters zum Testen offen lassen mussten. Man sagte ihnen auch das Ende ihres Fensters, normalerweise Sonntagnachmittag, wo wir zurückrollen müssten, wenn sich nicht alle abgemeldet hätten.

Oh, und natürlich ... wenn sich während eines der Abnahmetests etwas geändert hat und wir eine Änderung vorgenommen haben, bedeutete dies, dass alle Abmeldungen der Stakeholder ungültig wurden und sie erneut testen mussten ... also Wir würden versuchen, ihnen alle eine Weile Zeit zu geben, um nach Problemen zu suchen und Korrekturen als Batch auszuführen, anstatt sie einzeln anzuwenden.

Glücklicherweise hatte ich nur in einer dieser Situationen erhebliche Ausfallzeiten. Die von mir migrierten Systeme stammten aus Skripten und nicht aus Benutzereingaben. Ich konnte also einfach zwei parallele Systeme auslagern und austauschen wenn die Dinge abgemeldet wurden. (nur einmal gab es ein Problem, als mein Chef darauf bestand, dass wir ein vollständiges Backup erstellen, ohne zu verstehen, dass das Ganze immer noch mit einer anderen IP online sein würde Aus einem schlechten Tag wurde ein Ausfall von 5 Stunden.)

Joe
quelle
6

Es hängt alles vom Datenvolumen ab, verglichen mit der Leistung der Hardware, die die Datenbank unterstützt, und den Vereinbarungen über die Verfügbarkeit des Systems. Haben Sie zufällig Ausfallzeiten oder sollten Sie alles online erledigen? Bereinigen Sie die Daten und löschen Sie veraltete Zeilen so weit wie möglich. Dies ist ein Projekt für sich. Wenn die Daten sauber und wertvoll sind, können Sie den Benutzer über Ausfallzeiten entscheiden lassen. Wenn Ausfallzeiten verfügbar sind, ist es ziemlich einfach, wenn es sich um eine bekannte Umwandlung handelt, die auf die vorhandenen Daten angewendet werden sollte, um die aktualisierte Sammlung zu bilden. Wenn keine oder nur sehr geringe Ausfallzeiten zulässig sind, beginnt die Herausforderung. Oracle unterstützt dies auf verschiedene Arten, wie zum Beispiel die Online-Neudefinition von Tabellen und - neu in 11g - die auf der Edition basierende Neudefinition. Mit der Online-Neudefinition von Tabellen können Sie die Tabellen so vorbereiten, dass sie ihre neue Form annehmen. Dies kann erfolgen, während die Anwendung in der alten Form der Tabelle (n) ausgeführt wird. Wenn alle bereit sind, können Sie zur neuen Form der Tabelle [s] wechseln. Dies ist auch der Moment, um den neuen Anwendungscode einzuführen und gleichzeitig den Beginn der Ausfallzeit zu markieren, die erforderlich ist, um die neue Anwendung einzurichten. Die älteren historischen Daten können vor der Migration der Live-Daten vorbereitet und mithilfe von Tools wie Oracle Golden Gate synchronisiert werden. In einem solchen Szenario erstellen Sie effektiv eine neue Datenbank, die die Rolle der alten Datenbank übernimmt. Eine auf der Edition basierende Neudefinition ist besser geeignet, wenn keine Tabellenänderungen erforderlich sind. Es gibt Unmengen von Optionen, und ich denke, es ist schwierig, eine gute Regel zu formulieren, die immer funktioniert. Dies ist auch der Moment, um den neuen Anwendungscode einzuführen und gleichzeitig den Beginn der Ausfallzeit zu markieren, die erforderlich ist, um die neue Anwendung einzurichten. Die älteren historischen Daten können vor der Migration der Live-Daten vorbereitet und mithilfe von Tools wie Oracle Golden Gate synchronisiert werden. In einem solchen Szenario erstellen Sie effektiv eine neue Datenbank, die die Rolle der alten Datenbank übernimmt. Eine auf der Edition basierende Neudefinition ist besser geeignet, wenn keine Tabellenänderungen erforderlich sind. Es gibt Unmengen von Optionen, und ich denke, es ist schwierig, eine gute Regel zu geben, die immer funktioniert. Dies ist auch der Moment, um den neuen Anwendungscode einzuführen und gleichzeitig den Beginn der Ausfallzeit zu markieren, die erforderlich ist, um die neue Anwendung einzurichten. Die älteren historischen Daten können vor der Migration der Live-Daten vorbereitet und mithilfe von Tools wie Oracle Golden Gate synchronisiert werden. In einem solchen Szenario erstellen Sie effektiv eine neue Datenbank, die die Rolle der alten Datenbank übernimmt. Eine auf der Edition basierende Neudefinition ist besser geeignet, wenn keine Tabellenänderungen erforderlich sind. Es gibt Unmengen von Optionen, und ich denke, es ist schwierig, eine gute Regel zu geben, die immer funktioniert. Die älteren historischen Daten können vor der Migration der Live-Daten vorbereitet und mithilfe von Tools wie Oracle Golden Gate synchronisiert werden. In einem solchen Szenario erstellen Sie effektiv eine neue Datenbank, die die Rolle der alten Datenbank übernimmt. Eine auf der Edition basierende Neudefinition ist besser geeignet, wenn keine Tabellenänderungen erforderlich sind. Es gibt Unmengen von Optionen, und ich denke, es ist schwierig, eine gute Regel zu geben, die immer funktioniert. Die älteren historischen Daten können vor der Migration der Live-Daten vorbereitet und mithilfe von Tools wie Oracle Golden Gate synchronisiert werden. In einem solchen Szenario erstellen Sie effektiv eine neue Datenbank, die die Rolle der alten Datenbank übernimmt. Eine auf der Edition basierende Neudefinition ist besser geeignet, wenn keine Tabellenänderungen erforderlich sind. Es gibt Unmengen von Optionen, und ich denke, es ist schwierig, eine gute Regel zu formulieren, die immer funktioniert.

Es ist ein interessantes Thema, Ronald.

ik_zelf
quelle
5

Gute Antworten bisher. Ich werde noch ein paar Punkte zur Überlegung hinzufügen.

Wenn Sie Ihre Migrationen mit einfacher SQL-DML durchführen können, können Sie sich zunächst weitgehend auf Ihre SQL-Engine verlassen, um sicherzustellen, dass alle Zeilen erfolgreich verarbeitet werden. Ich war jedoch an Migrationen beteiligt, bei denen ein Teil der Migration etwas komplizierter war - es gab tatsächliche Datentransformationen, als Daten in eine neue Struktur verschoben wurden. In diesen Fällen ist es wichtig, dass Sie über einen Prozess verfügen, der die folgenden Elemente verarbeiten kann:

  • Zähle Datensätze in vs. verarbeiteten Datensätzen.
  • Erkennen Sie Fehler während der Transformation und behandeln Sie sie so, dass die Transformation fortgesetzt und die "fehlerhaften" Datensätze erneut verarbeitet werden können, sobald Sie einen Fix identifiziert haben.
  • Die Anzahl der Datensätze sollte "schlechte" Datensätze umfassen, dh Datensätze ein = Datensätze aus - gut + schlechte Datensätze
  • Wenn Ihre Umwandlung die Anzahl der Datensätze ändert (ein Eingabedatensatz wird beispielsweise zu mehr als einem Ausgabedatensatz), können Sie die Anzahl der Ausgabedatensätze vorhersagen, die Sie erhalten, und anschließend Ihre Ergebnisse anhand dieser Anzahl testen.

Der andere Punkt, den ich hinzufügen möchte, ist, dass es wichtig ist, einen Plan für das zu haben, was Sie tun werden, wenn die Dinge nicht wie geplant verlaufen. Dies ist wirklich eine Funktion des gesamten Einsatzes, die jedoch so häufig zu beschönigen scheint, dass ich der Meinung war, dass sie erwähnenswert ist.

D. Lambert
quelle
4

Eine Übersicht, wie es geht

Beginnen mit

  • Sie haben die Datenbank "after" in Test / UAT / was auch immer "Arbeits-DB"
  • Sie haben die "Vorher" -Datenbank in der Produktion. Verwenden Sie es also, um irgendwo eine Kopie der Produktion zu erstellen = "Referenz-DB". Und noch eine als "Script Test DB"
  • Ich hoffe auch, dass Sie eine Reihe von Entwicklungsskripten mit Ihren ALTERs usw. haben. Wenn ja, ist eine andere Kopie der Produktion mit Ihrem Entwicklungsskript nützlich, sauber und in Ordnung = "DB ändern".

Laden Sie als Nächstes die Red Gate Compare-Tools oder Embarcadero SQL Change Manager herunter . Ohne sie können Sie nicht einfach migrieren. Die Kosten sind für die eingesparte Zeit unerheblich. Und am wichtigsten ist, dass die generierten Skripts Änderungen in einer einzelnen Transaktion vornehmen, was eine saubere Bereitstellung bedeutet

Jetzt,

  • Änderungs- und Rollback-Skripte mit den Tools generieren, die "Referenz" und "Änderung" vergleichen
  • wende das Änderungsskript auf "script test" an und vergleiche es mit "working DB"
  • Wenden Sie das Rollback-Skript auf "Script Test" an und vergleichen Sie es mit "und vergleichen Sie es mit" Working DB ".

Jetzt haben Sie sichere und getestete Änderungs- und Rollback-Skripte, die Sie jederzeit anwenden können.

Und natürlich sichern Sie die Datenbank vor jeder Änderung, da statistisch gesehen immer irgendwann Scheiße passiert.

Die Red Gate-Tools können auch mit einem Ordner verglichen werden, der sich in der Quellcodeverwaltung befindet. Wir erfassen dann die ALTERs usw. in unserer Quellcodeverwaltung getrennt von den eigentlichen Änderungsskripten.

gbn
quelle