Flashback Database im Deploymentprozess

Werbung
Flashback Database im Deploymentprozess
Wer kennt das nicht: ein System soll im Zuge eines Softwareupdates aktualisiert
werden, wofür ein fest definiertes Wartungsfenster vorgesehen ist.
Das darf natürlich nur einen möglichst geringen Zeitraum in Anspruch nehmen und sollte in
nutzungsarmen Zeiten - also gerne abends oder nachts - stattfinden.
Unmittelbar vor dem Termin wird nochmal die Vorbereitung hinterfragt:
-
sind Schwierigkeiten zu erwarten?
Ist das Wartungsfenster ausreichend bemessen?
Ist das Backup in Ordnung?
Was ist alles zu berücksichtigen, wenn Nachbessern nicht hilft und ein Rollback erfolgen
muss?
Als verantwortungsvoller und erfahrener Administrator muss selbstverständlich nicht
regelmäßig zum Ausrollen einer Aktualisierung mit Schweißausbrüchen gerechnet werden.
Dennoch: kann ich den Prozess nicht vereinfachen? Muss ich wirklich die Uhr während des
Deployment-Fortschritts im Auge behalten, um einen möglicherweise notwendigen Rollback
mit Rücksicherung und allen anderen nötigen Maßnahmen rechtzeitig zu starten?
Dazu betrachten wir hier ein Feature des Oracle RDBMS, das gerade auch für
solche Situationen geschaffen wurde!
Mitunter fragt man sich oder wird gefragt: wozu müssen wir teure Datenbanken lizenzieren,
wenn es heute doch so viel schöne billigere oder gar kostenlose, möglicherweise auf Open
Source basierende Datenbanksoftware gibt? Ist es überhaupt sinnvoll, die über das Übliche
hinausgehenden Features zu nutzen, wenn wir uns damit von einem bestimmten Hersteller
abhängig machen? Ist die Datenbank nicht ohnehin hinter anderen Software-Schichten wie
BI-Tools oder noch allgemeiner Application Servern "versteckt"?
Eine mögliche Antwort finden wir hier.
Was bisher geschah...
Autor: Jürgen Maihöfner ● endlich OHG ● Flößaustr.24 ● D-90763 Fürth
1/4
Vorab ein wenig Geschichte
Beginnend mit dem Release 9i führte Oracle das erste Feature, gleichsam das Fundament für
Oracle Flashback ein: Flashback Query. Dies ermöglicht Abfrage wie folgende:
select * from some_garbage_data as of timestamp systimestamp interval '10'
minute;
Mit Oracle 10g wurden zahlreiche weitere Ausprägungen wie Flashback Database, Flashback
Drop, Flashback Table und weitere eingeführt. Oracle 11g brachte Flashback Transaction
(liefert Metadaten zu vergangenen Transaktionen inklusive einem "Undo-SQL") sowie
Flashback Data Archive (auch bekannt als Total Recall; versioniert Daten gemäß einer
Aufbewahrungsfrist).
Einige Formen sind für Entwickler besonders interessant; andere für Administratoren. Zur
Verbesserung des Deployment-Prozesses soll hier Flashback Database das Feature unserer
Wahl sein. Da es sich beim Deployment um eine administrative Tätigkeit handelt, ist die
Nutzung auch über eine mögliche Kritik erhaben, die Nutzung würde zu einer Abhängigkeit
von einem Hersteller führen: für die auf der Datenbank aufbauenden Anwendungen ist
Flashback Database "unsichtbar".
...und wie schön es sein könnte!
Ein typisches Deployment wird folgende wesentlichen Schritte umfassen:
-
Stopp der Anwendung
Sicherung des aktuellen Standes
Deployment des neuen Release, meist automatisierte und manuelle Schritte umfassend
Testen
Start und Freigabe des neuen Release
Jedoch im Fehlerfall, der während des Deployments oder während der Tests auftreten kann:
- Nachbesserungsversuche - hierzu im zweiten Teil mehr
- Restore des Systems - mitunter zeitraubend und hektisch. Diesen Punkt wollen wir
verhindern!
Sind die nachfolgend beschriebenen Voraussetzungen erfüllt, ist lediglich
unmittelbar vor dem Deployment ein sogenannter garantierter Restore Point zu
erstellen:
SQL> CREATE RESTORE POINT before_release_goodoldtime GUARANTEE
FLASHBACK DATABASE;
Autor: Jürgen Maihöfner ● endlich OHG ● Flößaustr.24 ● D-90763 Fürth
2/4
Sollte das Deployment nicht wie erwartet fortschreiten und erfolgreich durchgeführt werden
können, die Tests keine Fehlerfreiheit zeigen, oder unmittelbar nach dem Deployment ein
Rollback angezeigt sein: locker bleiben! :-)
Ein denkbares Szenario unter vielen möglichen: eine Tabelle mit vermeintlich unkritischen
Daten wurde im Zuge der Anwendungsaktualisierung gelöscht und neu aufgebaut, der
abschließende fachliche Test stellt aber die Unwiederbringlichkeit tatsächlich unbedingt zu
erhaltender Daten heraus...
Um die Zeit zu einem Punkt zurück zu drehen, als alles noch friedlich war, ist lediglich
folgendes Kommando auszuführen. Selbstredend ist eine Kennung mit administrativen
Berechtigungen zu nutzen. Es kann sowohl in RMAN, als auch im SQL-Tool des Vertrauens
abgesetzt werden:
FLASHBACK DATABASE TO RESTORE POINT 'before_release_goodoldtime';
Zwar ist die konkrete Dauer abhängig vom Umfang der zurück zu nehmenden Änderungen
durch das fehlgeschlagene Deployment. Da das Verfahren mit online verfügbaren
Protokolldateien erfolgt, ist mit einer Fertigstellung des Database Flashback innerhalb einer
Zeitspanne zu rechnen, die mit anderen Methoden nicht zu erreichen sein dürfte. Und das
auf eine derart einfache Weise, bei der auch während etwaiger Hektik kaum etwas falsch
laufen kann! Ein paar Voraussetzungen für Flashback Database, wenn auch in sehr
überschaubarem Umfang, sind zu erfüllen:
- die Datenbank muss im Archivelog-Modus betrieben werden,
- eine Fast Recovery Area muss aktiviert sein,
- es muss ausreichend Speicherplatz verfügbar sein.
Da zusätzliche Logging-Informationen geschrieben und verwaltet werden müssen, die
zusätzlichen Speicherplatz erfordern, sollten vor einer Umsetzung unbedingt einige Tests in
unkritischen Umgebungen erfolgen!
Auch ist das Verfahren mit einigen, aber ebenfalls kleineren Einschränkungen verbunden. Zu
nennen wären beispielsweise
- Flashback Database über eine Zielzeit hinweg, während der Operationen mit NOLOGGING
stattfanden, kann zu Block Corruption führen. An zu vermeidente ETL-Vorgänge wäre hier
zu denken, welche aber während eines Deployments sehr unwahrscheinlich sind,
- Medienfehler zur "falschen" Zeit können ein herkömmliches Restore erforderlich machen.
Details sind in der Dokumentation unter
https://docs.oracle.com/database/121/BRADV/flashdb.htm#BRADV71000 zu finden.
Autor: Jürgen Maihöfner ● endlich OHG ● Flößaustr.24 ● D-90763 Fürth
3/4
Und täglich grüßt...
Nun ist Flashback Database schon mal aktiviert - was lässt sich daraus noch machen?
Wäre es nicht begrüßenswert, wenn der Ausgang des Deployments besser vorhersehbar
wäre?
Klar, durch zwischen den Entwicklungs- und Produktivsystemen geschaltete
Qualitätssicherungs- und Integrationsumgebungen können Fehlschläge nahezu
ausgeschlossen werden.
Soll aber regelmäßig, beispielsweise täglich, ein Integrations- bzw. Deployment-Versuch auf
einer dafür vorgesehenen Umgebung erfolgen, haben die für das Konfigurationsmanagement
Zuständigen mitunter eine anspruchsvolle Aufgabe zu bewältigen.
Muss das Feature Flashback Database nicht einfach gerngehabt werden, wenn es das Leben
derart einfach machen kann:
-
Setzen eines garantierten Restore Point
Versuch des täglichen Deployments in der Integrationsumgebung
Ergebniss überprüfen
Flashback Database zum garantierten Restore Point
War das Deployment erfolgreich? -> Gut!
War es nicht? -> Rückmeldung an den Verursacher zur Behebung. Nichts weiter. Die
Datenbank wurde durch das Flashback Database ohnehin wieder auf den Ursprungszustand
zurückgesetzt!
Fazit
Wird das Feature Flashback Database wie oben beschrieben eingesetzt, können folgende
Vorteile erreicht werden:
- Zeit- und damit Kostenersparnis. Dies relativiert auch die andernfalls womöglich
gelegentlich hinterfragten Lizenzkosten
- bessere Qualität durch einfach ermöglichte fortwährende Integration. "Unfälle" bei
fehlerhaften Versuchen können einfach "repariert" werden
- stabilere Services durch die Möglichkeit, jederzeit zu einem stabilen Zustand zurück
kehren zu können
Autor: Jürgen Maihöfner ● endlich OHG ● Flößaustr.24 ● D-90763 Fürth
4/4
Herunterladen