Jak odtworzyć dane po przypadkowym usunięciu tabeli, jeśli nie mamy kopii zapasowej

Jeżeli przypadkowo wykonałeś polecenie DROP oraz posiadasz pełną kopię zapasową bazy danych, to zakładając, że po usunięciu tabeli nie pojawiły się żadne zmiany, wystarczy, że odtworzysz dane z kopii zapasowej, nadpisując oryginalną bazę danymi z kopii. Niestety, w rzeczywistości taka prosta sytuacja nie jest zbyt często możliwa. Czasami, ponieważ dane oraz obiekty w bazie zostały zmienione po wykonaniu polecenia DROP, czasami ponieważ nie posiadamy kopii zapasowej. Efektem czego jest niemożność odzyskania usuniętej tabeli i danych.

Na szczęście każda operacja DROP jest logowana w logu transakcyjnym SQL Server’a. Co oznacza, że log transakcyjny zawiera informacje niezbędne do wycofania transakcji i, jeśli baza działa w trybie FULL recovery, możemy odtworzyć dane do punktu w czasie.

Ponieważ polecenie DROP jest logowane w logu transakcyjnym, to może zostać wycofane, jeśli było wykonane w aktywnej, jawnej transakcji. Na przykład, poniższe polecenie SQL:

DROP TABLE Customer

SELECT *
FROM Customer

da w wyniku komunikat o błędzie Msg 208, Level 16, State 1 ponieważ tablica Customer została usunięta.

Ale kod SQL widoczny poniżej:

BEGIN TRAN 
DROP TABLE Customer

ROLLBACK 
SELECT *
FROM Customer

zwróci w wyniku wiersze z tablicy Customer ponieważ operacja DROP została wycofana.

Jeżeli jednak transakcja, zawierająca polecenie DROP nie jest aktywna, na przykład została zatwierdzona (committed), to nie można wycofać usunięcia skasowanej tablicy, a w konsekwencji dane, które przechowywała tablica zostają utracone. Czy oznacza to, że nie można odzyskać skasowanych danych po operacji DROP, jeśli nie posiadamy pełnej kopii zapasowej?

Na szczęście jest to możliwe przy pomocy ApexSQL Recover.

ApexSQL Recover jest narzędziem, umożliwiającym odtwarzanie danych przechowywanych w bazach danych SQL Server’a. Narzędzie odtwarza dane skasowane (delete), odcięte (truncate) lub uszkodzone. Narzędzie odtwarza obiekty oraz dane utracone na skutek poleceń DROP, a także obiekty typu BLOB, co czyni z niego idealne rozwiązanie do odtwarzania baz danych, wykorzystywanych przez SharePoint.

Aby chcesz odtworzyć dane skasowane poleceniem DROP, jeśli nie posiadamy kopi zapasowej bazy danych:

  1. Uruchom ApexSQL Recover.
  2. Wybierz opcję Recover lost data due to a DROP operation (Odtwórz utracone dane na skutek wykonania polecenia DROP).
  3. W kroku Select the database to recover (Wybierz bazę danych do odtworzenia):
    • Przy pomocy listy rozwijalnej Server, określ instancję SQL Server’a, w której rezyduje baza danych, dla której chcesz odtworzyć dane
    • Określ metodę uwierzytelniania dla instancji SQL Server’a (oraz poprawne dane uwierzytelniające, jeśli wybrałeś uwierzytelnianie przez SQL Server)
    • Przy pomocy listy rozwijalnej Database, określ nazwę bazy danych, która zawiera usunięte tablice

    i kliknij Next

  4. W kroku Are additional data sources available? (Czy są dostępne dodatkowe źródła danych), wybierz opcję No additional transaction logs are available (nie są dostępne dodatkowe logi transakcyjne).

  5. W kroku Select a recovery action (Wybierz akcję odtwarzania) wybierz opcję Save recovery script to file (Zapisz skrypt odtwarzający do pliku) i podaj ścieżkę do pliku, w którym ma zostać zapisany skrypt T-SQL, który pozwoli wstawić wszystkie utracone dane do bazy danych.

  6. Kliknij Recover

Ta prosta metoda pozwoli odzyskać utracone dane jeśli nie posiadamy żadnej kopi zapasowej bazy danych.

Tłumacz: Anna Lesniak

November 4, 2015