Mit einer Sicherung lassen sich Daten wiederherstellen. Wird sie jedoch direkt über die aktive Datenbank eingespielt, können legitime Änderungen verloren gehen, die seit dem Sicherungszeitpunkt vorgenommen wurden. Betrifft das Problem einen einzelnen Eintrag oder eine klar begrenzte Gruppe, geht es meist darum, verlorene Informationen wiederherzustellen und den übrigen aktuellen Zustand zu bewahren. Dafür muss die Wiederherstellung als Vergleichs- und Abgleichvorgang behandelt werden, nicht als einfacher Austausch.
Die geeignete Strategie hängt vom Datenbank-Managementsystem, vom Schema, der Verfügbarkeit von Audit-Protokollen und vom Ausmaß des Schadens ab. In einer PHP-Anwendung empfiehlt es sich, die Wiederherstellungslogik von der Produktionsanwendung zu trennen, Entscheidungen zu dokumentieren und Prüfungen vor dem Schreiben von Daten zu testen. Lässt sich nicht feststellen, welche Änderungen sicher sind, ist es meist weniger riskant, den Vorgang anzuhalten und einen manuellen Abgleich vorzubereiten, als ein Überschreiben zu automatisieren.
Festlegen, was die Wiederherstellung der Daten bedeutet

Bei einer vollständigen Wiederherstellung werden eine Datenbank, ein Schema oder ein umfangreicher Datenbestand durch den Inhalt eines Wiederherstellungspunkts ersetzt. Eine selektive Wiederherstellung versucht dagegen, bestimmte Zeilen oder Werte wiederherzustellen, ohne andere aktive Daten zu verändern. Beschreiben Sie vor der Entscheidung genau das gewünschte Ergebnis: Welche Entität fehlt oder wurde verändert, welche Felder müssen wiederhergestellt werden und welche späteren Änderungen sollen erhalten bleiben?
Grenzen Sie den Umfang anhand stabiler Kennungen wie dem Primärschlüssel ein, nicht nur anhand von Werten, die sich geändert haben könnten, etwa Name oder E-Mail-Adresse. Klären Sie auch, ob der Vorfall verknüpfte Einträge betrifft: Eine Bestellung kann beispielsweise von Positionen, Zahlungen, Adressen und Statusereignissen abhängen. Wird nur die Hauptzeile wiederhergestellt, kann eine inkonsistente Entität entstehen; wird die gesamte Gruppe wiederhergestellt, können gültige Änderungen einbezogen werden, die nicht rückgängig gemacht werden dürfen.
- Halten Sie das beobachtete Problem, den ungefähren Zeitraum und die meldende Person fest.
- Ermitteln Sie die relevanten Tabellen, Primärschlüssel, Fremdschlüssel und Einschränkungen.
- Legen Sie fest, welche Felder auf einen früheren Wert zurückgesetzt werden sollen und welche unverändert bleiben müssen.
- Bestimmen Sie, wer den Vorgang freigibt und anhand welcher Prüfungen er als abgeschlossen gilt.
Einen Wiederherstellungspunkt auswählen und den Kontext rekonstruieren
Wählen Sie einen Wiederherstellungspunkt, mit dem sich der benötigte Zustand rekonstruieren lässt – nicht unbedingt eine Sicherung von vor dem Schaden. Je nach Vorfall kann es nötig sein, mehrere Sicherungen, Transaktionsprotokolle und Audit-Daten zu vergleichen, um festzustellen, welche Informationen wiederhergestellt werden müssen und welcher spätere Kontext erhalten bleiben sollte. Eine Point-in-Time-Recovery kann eine temporäre Datenbank liefern, aus der sich Daten extrahieren lassen. Das bedeutet jedoch nicht, dass ihr gesamter Inhalt gefahrlos in die Produktionsumgebung übernommen werden kann.
Prüfen Sie Datum und Zeitzone, den Umfang der Sicherung, das Schema, mit dem sie erstellt wurde, und die Ergebnisse verfügbarer Integritätsprüfungen. Eine ungeprüfte Sicherung sollte nicht standardmäßig als zuverlässige Quelle gelten. Prüfen Sie außerdem, ob Kennungen möglicherweise wiederverwendet wurden oder ob während der Untersuchung Prozesse in die betroffenen Tabellen schreiben.
Spielen Sie die Sicherung in einer isolierten Instanz mit eingeschränktem Zugriff und ohne Schreibverbindungen zur Produktion ein. Die Anwendung sollte nicht versehentlich auf diese Instanz zugreifen oder geplante Aufträge darauf ausführen können. Enthalten die Daten personenbezogene oder sensible Informationen, beschränken Sie den Zugriff und wenden Sie die für diese Daten vorgesehenen Schutzmaßnahmen an. Die isolierte Umgebung ermöglicht den Vergleich von Zuständen, ohne die aktive Datenbank zusätzlich zu gefährden.
Vergleichen, ohne anzunehmen, dass die Sicherung dem aktuellen Stand entspricht
Vergleichen Sie die infrage kommenden Zeilen aus der Sicherung anhand ihrer stabilen Schlüssel mit den aktuellen Zeilen. Unterscheiden Sie für jede Zeile zwischen drei Fällen: Der Eintrag existiert nicht mehr, er existiert, aber einige Felder wurden geändert, oder es gibt keine relevanten Unterschiede. Wenn Aktualisierungszeitstempel, Ereignisverläufe oder Audit-Daten vorhanden sind, nutzen Sie diese, um zu verstehen, wann und warum Änderungen vorgenommen wurden. Ein Zeitstempel allein belegt weder, welcher Benutzer eine Änderung vorgenommen hat, noch, ob sie erhalten bleiben sollte.
Bei einer selektiven Wiederherstellung ist besondere Vorsicht geboten: Eine alte Zeile darf nicht automatisch vollständig kopiert werden, wenn sich einige ihrer Felder auf gültige Weise weiterentwickelt haben. Der Vergleich kann beispielsweise zeigen, dass ein beschreibendes Feld verloren ging, während sich Status, Eigentümer oder Beziehung zu einer anderen Entität später geändert haben. Sofern die Geschäftsregeln es erlauben, kann es sicherer sein, nur das verlorene Feld wiederherzustellen, statt die gesamte Zeile zu ersetzen.
Prüfen Sie außerdem Eindeutigkeitskonflikte, Fremdschlüssel, Pflichtspalten, Standardwerte und die von der Anwendung angewandten Regeln. Bei Systemen mit logischem Löschen sollten Sie prüfen, ob der Eintrag als gelöscht markiert ist, statt zu fehlen. Tabellen, die an derselben Geschäftsoperation beteiligt sind, müssen möglicherweise gemeinsam abgeglichen werden, damit keine inkonsistenten Salden, Statuswerte oder Verweise entstehen.
Eine begrenzte und überprüfbare Operation ausführen
Erstellen Sie einen Plan mit der genauen Menge der Schlüssel und Spalten, die geändert werden sollen. Sichern Sie vor der Ausführung den aktuellen Zustand dieser Zeilen oder richten Sie einen gleichwertigen Rücksetzmechanismus ein. Testen Sie den Plan anhand einer aktuellen Kopie der aktiven Datenbank und vergleichen Sie das Ergebnis mit dem erwarteten Zustand. Der Test muss die tatsächlichen Einschränkungen und Abhängigkeiten einbeziehen, nicht nur den Import isolierter Zeilen.
Führen Sie Änderungen nach Möglichkeit innerhalb einer Transaktion aus. Eine Transaktion ersetzt nicht die Prüfung: Bestimmte Wiederherstellungs- oder Importvorgänge können sich je nach Datenbank-Managementsystem anders verhalten, und externe Prozesse können Daten gleichzeitig aktualisieren. Verwenden Sie Bedingungen, die unerwartete Änderungen zwischen Vergleich und Schreibvorgang erkennen. Stimmt eine Zeile nicht mehr mit dem geprüften Zustand überein, brechen Sie den Vorgang ab und untersuchen Sie die Zeile erneut, statt sie stillschweigend zu überschreiben.
In einer PHP-Anwendung kann ein kontrollierter Task oder ein Wartungsbefehl Eingaben validieren, die betroffenen Schlüssel begrenzen und Ergebnisse protokollieren. Vermeiden Sie es, SQL-Anweisungen durch Verkettung von Werten zu erstellen. Verwenden Sie parametrisierte Abfragen und den Transaktionsmechanismus des in der Anwendung eingesetzten Datenzugriffs. Halten Sie den Vorgang aus öffentlichen Routen heraus und geben Sie weder Zugangsdaten noch Sicherungen in Textprotokollen preis.
Prüfen Sie vor dem Bestätigen der Änderungen die Anzahl der betroffenen Zeilen, die Einschränkungen und die relevanten Beziehungen. Kontrollieren Sie anschließend die wiederhergestellten Werte und das Verhalten der Anwendung bei den zugehörigen Geschäftsprozessen. Schlägt eine Prüfung vor dem Bestätigen einer Transaktion fehl, rollen Sie die Transaktion zurück. Wurde sie bereits bestätigt oder sind nicht umkehrbare Auswirkungen eingetreten, improvisieren Sie keinen weiteren Schreibvorgang: Aktivieren Sie vor der Ausführung den freigegebenen Rollback- oder Wiederherstellungsplan und befolgen Sie das erprobte Verfahren, um den akzeptierten Zustand wiederherzustellen und zu überprüfen. Ermöglicht der Plan keine Wiederherstellung eines konsistenten Zustands, unterlassen Sie weitere Änderungen, sichern Sie Belege und eskalieren Sie die Entscheidung an die zuständigen Personen.
Die Entscheidung dokumentieren und festlegen, wann keine Automatisierung erfolgen sollte
Dokumentieren Sie den Vorfall, den verwendeten Wiederherstellungspunkt, die untersuchten Schlüssel, die wiederhergestellten Felder und die erhaltenen späteren Änderungen. Halten Sie fest, wer den Vorgang geprüft und freigegeben hat, wann er ausgeführt wurde, welche Prüfungen stattfanden und welches Ergebnis erzielt wurde. Nehmen Sie keine unnötigen sensiblen Daten in das Protokoll auf. Diese Nachvollziehbarkeit ermöglicht es, die Entscheidung zu begründen, und erleichtert spätere Untersuchungen.
Entscheiden Sie sich für einen manuellen Abgleich, wenn zuverlässige Schlüssel fehlen, Konflikte zwischen Geschäftsoperationen bestehen, sich eine versehentliche Änderung nicht von einer legitimen unterscheiden lässt oder die Wiederherstellung Beziehungen betrifft, deren Bedeutung vom Kontext abhängt. Eine vollständige Wiederherstellung kann bei umfangreicher Beschädigung angemessen sein. Dabei müssen jedoch Auswirkungen, Ausfallzeit, Verlust späterer Änderungen und das Wiederherstellungsverfahren berücksichtigt werden. Sie sollte nicht allein deshalb gewählt werden, weil sie einfacher auszuführen ist.
- Selektive Wiederherstellung: Der Schaden ist klar eingegrenzt, die Schlüssel sind zuverlässig und die Unterschiede lassen sich überprüfen.
- Manueller Abgleich: Es gibt gleichzeitige Änderungen oder Geschäftsregeln, die menschliches Urteilsvermögen erfordern.
- Vollständige Wiederherstellung: Der Schaden ist umfangreich und es gibt einen freigegebenen Plan für den Umgang mit Ausfallzeiten und den Änderungen, die verloren gingen.
Checkliste vor dem Abschluss der Wiederherstellung

- Vorbereitung: Sind Umfang, Schlüssel, Abhängigkeiten und erwartetes Ergebnis ermittelt? Wurde ein geeigneter Wiederherstellungspunkt ausgewählt und überprüft?
- Umgebung und Freigabe: Wurde die Sicherung isoliert eingespielt, der Zugriff eingeschränkt und das Verfahren getestet? Haben die zuständigen Personen den Vorgang und den Rollback- oder Wiederherstellungsplan freigegeben?
- Ausführung: Ist der aktuelle Zustand der betroffenen Zeilen gesichert, sind Schreibvorgänge auf die vorgesehenen Schlüssel und Felder begrenzt und werden gleichzeitige Änderungen erkannt?
- Überprüfung: Wurden betroffene Zeilen, Einschränkungen, Verweise und das Geschäftsverhalten geprüft? Wurden bei einer fehlgeschlagenen Prüfung weitere Schreibvorgänge gestoppt und das freigegebene Verfahren aktiviert?
- Nachvollziehbarkeit: Sind Entscheidung, Ausführung, Prüfungen, erhaltene Änderungen und Ergebnis dokumentiert, ohne unnötige sensible Daten aufzunehmen?
Können Sie die relevanten Fragen nicht bejahen, verschieben Sie Schreibvorgänge in der Produktionsumgebung. Die Entscheidung zwischen selektiver Wiederherstellung, manuellem Abgleich und vollständiger Wiederherstellung sollte sich nach dem Ausmaß des Schadens, der Zuverlässigkeit der Belege, den betrieblichen Auswirkungen und der tatsächlichen Möglichkeit richten, einen konsistenten Zustand wiederherzustellen.



