Wie rettet man SQL Server Daten, die versehentlich durch UPDATE- oder DELETE-Befehle verloren gegangen sind?

Der Albtraum jeder SQL Server DBA schlechthin: Datenverlust durch eigenes Fehlverhalten.

Es ist nicht unüblich, dass jemand eine WHERE-Klausel bei einem UPDATE- oder einer DELETE- Abfrage vergisst und dabei mehr Daten ändert als erwünscht.

Was tun, wenn es Sie erwischt?

Eine Möglichkeit wäre es, eine Sicherung zu benutzen, die direkt vor dem “Unfall” gemacht wurde.

Typische Beispiele wären:

  1. Überschreiben der defekten Datenbank mit einer passenden Sicherung
  2. Anders
    • Die passende Sicherung wird auf dem gleichen Server unter einem anderen Datenbanknamen wiederhergestellt
    • Die “sauberen” Datensätze werden in der temporären Kopie gesucht
    • Diese Datensätzen werden in die Originaldatenbank per UPDATE-Befehl “gesäubert”

Leider laufen solche Rettungsaktionen selten glatt und problemlos.

Meistens tauchen folgende Probleme auf:

  • Der Fehler wird häufig zu spät entdeckt bzw. gemeldet
  • Es gab in der Zeit zwischen letzter Sicherung und Fehlerfall weitere Datenänderungen, die einen Wiederherstellungsversuch erschweren
  • Datenbanksicherungen wurden selten gemacht – wenn überhaupt welche gemacht wurden.


Hopfen verloren, aber Malz noch da!

Eine Möglichkeit um Daten zu retten ist es, Informationen aus einem Transaktionsprotokoll zu lesen (ob online, aus einer Sicherung oder einer „abgehängte“ Protokolldatei).
ApexSQL Log ist ein Datenrettungstool, welches Transaktionsprotokolldateien auslesen und verlorene Daten wiederherstellen kann.

Um Daten, die durch fehlerhaften UPDATE- oder DELETE-Befehle gelöscht wurden, wiederherzustellen, nutzen Sie ApexSQL Log wie folgt::

    1. Starten Sie ApexSQL Log
    2. Verbinden Sie sich mit einer beliebigen Datenbank.
    3. Über Select SQL Logs to analyze, fügen Sie alle Transaktionsprotokolldateien und -Sicherungen hinzu, die Sie auswerten wollen. Beachten Sie dabei, dass eine vollständige Protokollkette benötigt wird. Wenn Sie Sicherungen hinzufügen, steigt die Wahrscheinlichkeit des Erfolges und die Geschwindigkeit einer Datenrettungsaktion.

    4. Über Filter setup können Sie die Sucheinstellungen eingeben, um die Aktion zu beschleunigen

 

  • Nachdem alle Einstellungen eingegeben wurden, klicken Sie Open

 

Ihre Transaktionen werden im Hauptfenster angezeigt. Sie können weitere Filterkriterien auf der linken Seite mit Filter auswählen, um unnötige Transaktionen auszublenden.

Um Daten zu retten, wählen sie die Transaktionen aus, die Sie zurücksetzen wollen und klicken Sie Create undo script

Das Skript kann anschließend im Editor mit einem Klick auf Execute oder über die Taste F5 ausgeführt werden.

Also, denken Sie daran: Falls Sie versehentlich Daten per DELETE oder UPDATE verändern, nutzen Sie einfach ApexSQL Log, um Ihre Daten zu retten.

Übersetzer: William Durkin

July 29, 2015