Wie erhalte ich gelöschte Datensätze zurück?


49

Ich habe versehentlich etwa 2.000.000 Datensätze aus einer SQL Server 2008-Remotetabelle gelöscht. Der Server gewährt mir keinen Zugriff auf die Sicherungsdateien auf der Serverseite.

Gibt es eine Möglichkeit, diese Aufzeichnungen zurückzugewinnen?


18
Wann haben Sie Ihre Backups das letzte Mal getestet?
Joe

20
Wann haben Sie das letzte Mal eine WIEDERHERSTELLUNG Ihrer Backups getestet?
Datum

Antworten:


116

Befindet sich Ihre Datenbank im vollständigen Wiederherstellungsmodus?

  • Wenn ja, führen Sie Transaktionsprotokollsicherungen durch?

    • Wenn ja, haben Sie ein Sicherungsprogramm wie Quest LiteSpeed, Red Gate SQL Backup oder Idera SQLSafe?
      • Wenn ja, können diese Dienstprogramme Objekte aus Sicherungsdateien (einschließlich der vollständigen Dateien und der Transaktionsprotokolle) wiederherstellen. Die Verwendung dieser Dienstprogramme kann hier jedoch nicht näher erläutert werden. Wenden Sie sich an den Händler, um Anweisungen zu erhalten.
      • Wenn nicht, stellen Sie die vollständigen Sicherungs- und Transaktionsprotokolle als Datenbank mit einem anderen Namen wieder her. (Überschreiben Sie die vorhandene Datenbank nicht.) Sie können eine sekundengenaue Kopie des Objekts abrufen, bevor der Löschvorgang ausgeführt wurde. Sie müssen jedoch den Stopat-Teil des Wiederherstellungsbefehls verwenden, um dies anzugeben Wann soll die Wiederherstellung der Befehle gestoppt werden? Sie müssen anhalten, bevor der Löschvorgang ausgeführt wird.
    • Wenn nicht, holen Sie sich eine Kopie eines Protokollleseprogramms wie Quest LiteSpeed ​​oder Apex SQL Log. Diese Dienstprogramme können eine Verbindung zum Datenbankserver herstellen, die Protokolldatei untersuchen und Sie beim Rückgängigmachen von Transaktionen unterstützen. Ich bin mir nicht sicher, ob die Demoversionen funktionieren werden, aber die kostenpflichtigen werden es definitiv.
  • Wenn nein (nicht im vollständigen Wiederherstellungsmodus), stellen Sie die letzte vollständige Sicherung als Datenbank mit einem anderen Namen wieder her. (Überschreiben Sie nicht die Datenbank, die Sie bereits haben.) Von dort aus können Sie alle Datensätze wiederherstellen, die zum Zeitpunkt der Sicherung online waren, aber seitdem gehen alle Änderungen verloren.


4
Gute Antwort, ich füge hinzu, dass es normalerweise am einfachsten ist, die Daten von diesen Tabellen zurückzugewinnen, wenn nur eine Tabelle betroffen ist, wenn Sie über eine Prüfung oder Änderungsnachverfolgung verfügen. Wenn Sie auf einige oder alle der oben genannten Fragen mit "Nein" geantwortet haben und die Datensätze so weit wie möglich wiederhergestellt haben, müssen Sie natürlich Ihren Sicherungsvorgang korrigieren und möglicherweise festlegen, wer Zugriff auf die Produktionsdaten hat.
HLGEM

Wenn Sie sich im einfachen Modus befinden, sind die Zeilen auf einigen Seiten möglicherweise noch physisch vorhanden. Möglicherweise können einige von ihnen wiederhergestellt werden (zu einem sehr hohen Zeit- und / oder Kostenaufwand).
USR

Zu Ihrer Information. ApexSQL Recover Abgesehen von der zeitlichen Begrenzung stellt die Evaluierungsversion nur 1 von 10 Zeilen der insgesamt für die Wiederherstellung verfügbaren Zeilen wieder her ( apexsql.com/faqs/faqs_recover.aspx )
Sameer

30

SQL Server führt Protokolle für jeden gelöschten Datensatz. Sie können diese Protokolle über die fn_dblogSQL Server-Funktion abfragen .

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

Dieses Protokoll ist jedoch im Hex-Format und Sie müssen dieses Hex-Format in Ihre tatsächlichen Daten konvertieren.

Mit dem folgenden Artikel können Sie die gelöschten Datensätze auf die oben definierte Weise wiederherstellen:

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/


3
Das ist ziemlich cool. Unter welchen Bedingungen funktioniert dieser Ansatz (oder funktioniert er nicht)?
Nick Chammas

3
@NickChammas - Es kann nur das wiederherstellen, was sich im aktiven Protokoll befindet, sodass für ein einfaches Wiederherstellungsmodell kein Prüfpunkt aufgetreten sein darf. Außerdem sieht es derzeit so aus, als würde es in Datenbanken mit Snapshot-Isolation nicht richtig funktionieren, aber das sollte eine einfache Lösung sein. @user1059637- Wie stehen Sie zu Menschen, die Ihrem Code Funktionen hinzufügen?
Martin Smith

@MartinSmith, Jetzt funktioniert es auch perfekt mit Snapshot-Isolation.
user1059637

22

Leider können wir Ihnen ohne weitere Informationen nicht weiterhelfen. Aus Ihrer Frage geht jedoch hervor, dass Sie 2 Millionen Datensätze aus Ihrer Datenbank gelöscht haben. Höchstwahrscheinlich können Sie diese Informationen nicht wiederherstellen, es sei denn, Sie verfügen über eine vollständige Protokollierung Ihrer Datenbank und erwerben einige sehr spezielle Tools.

Wenn Sie genauer beschreiben können, was Sie Ihrer Meinung nach getan haben und warum Sie das Gefühl haben, dass Sie die Aufzeichnungen nicht zurückerhalten können, und die Organisation Ihrer Datenbank beschreiben können, können wir Ihnen möglicherweise ein wenig weiterhelfen.

Einige allgemeine Ratschläge: Wenn Sie glauben, 2 Millionen Datensätze gelöscht zu haben, sind Sie im Moment wahrscheinlich ein bisschen durchgedreht. Machen Sie also eine fünfminütige Pause, beruhigen Sie sich und wiederholen Sie das Problem. Sie sollten Ihrem Chef auch sofort mitteilen, ob dies angemessen ist (wecken Sie niemanden um 2 Uhr morgens auf, um ihn zu informieren) und dass Sie an einer Lösung arbeiten. Es ist besser zuzugeben, was passiert ist, als verzweifelt zu versuchen, sich zu erholen, die Situation möglicherweise zu verschlimmern und die Details zu verbergen. Zu wissen, dass Ihr Chef auf irgendeine Weise helfen kann, hilft Ihnen, das Problem zu beheben. Wie ich schon sagte, nur ein paar allgemeine Ratschläge.


10
gute idee mit der 5 minütigen pause. Funktioniert immer. Hilft bei der Fokussierung. :-) Kenne ich schon.
John aka hot2use
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.