Jak w bazie SQL Server’a odtworzyć dane skasowane przypadkowym wykonaniem polecenia UPDATE lub DELETE

Jednym z koszmarów administrator bazy danych jest utrata danych na skutek jego własnych błędów. Zdarza się, że administrator wykona polecenie UPDATE lub DELETE, zapominając o klauzuli WHERE lub niewłaściwie ją definiując, co skutkuje skasowaniem lub zmianą milionów wierszy w bazie danych.

Jakie opcje odtworzenia danych daje nam w takiej sytuacji SQL Server?

Rozwiązaniem może być posiadanie kopii zapasowej, która została wykonana tuż przed błędną komendą i odtworzenie danych z tej kopii.

Typową metodą odzyskania danych z istniejącej kopi zapasowej jest:

  1. Odtworzenie bazy danych z kopi zapasowej i używanie kopii zamiast bazy oryginalnej.
  2. Albo
    • Odtworzenie danych z kopii zapasowej na tym samym serwerze przy pomocy innej nazwy bazy danych
    • Zlokalizowanie wierszy niechcący skasowanych lub zmienionych w odtworzonej bazie
    • Zaktualizowanie uszkodzonych wierszy przy pomocy oryginalnych wierszy z odzyskanej bazy

Niestety, scenariusz z odtworzeniem bazy danych nie zawsze umożliwia odzyskanie wszystkich danych.

Bardziej prawdopodobne jest, że

  • Błędy nie zostały wykryte wystarczająco szybko.
  • Nastąpiły kolejne zmiany danych, pomiędzy ostatnią kopią zapasową a wykonaniem błędnego zapytania, co znacząco komplikuje odtwarzanie danych.
  • Pojawiły się nowe dane.
  • Kopie zapasowe nie były wykonywane regularnie lub wcale ich nie ma.


Jak wybrnąć z tej sytuacji

Jedną z opcji, która umożliwia odzyskanie danych jest odczytanie informacji z logu transakcyjnego, z kopii zapasowej logu transakcyjnego lub odłączonego logu transakcyjnego.
ApexSQL Log jest narzędziem, umożliwiającym czytanie logu transakcyjnego i odtwarzanie utraconych danych przez wycofanie zmian na danych, tak aby dane wróciły do ostatniego pożądanego stanu.

Aby odtworzyć dane skasowane przypadkowo komendami UPDATE lub DELETE przy pomocy ApexSQL Log:

    1. Uruchom ApexSQL Log
    2. Podłącz się do bazy danych.
    3. W kroku Select SQL logs to analyze, dodaj kopię zapasową logu transakcyjnego i log odłączony, które mają zostać przeczytane. Zauważ, że muszą one utworzyć pełny łańcuch logów w celu umożliwienia poprawnego odczytania kolejnych transakcji. Dodanie kopii zapasowej logu może pomóc zwiększyć wydajność i jakość procesu odtwarzania danych.

    4. Użyj opcji Filter setup aby zawęzić zakres przeszukiwanego logu przy pomocy czasu, typu operacji, nazwy tabeli i innych opcji filtrujących.

 

  • Po ustawieniu wszystkich opcji kliknij Open.

 

Odnalezione transakcje zostaną wyświetlone z oknie aplikacji. Nadal istnieje możliwość użycia opcji Filter, w celu wyeliminowania niepotrzebnych transakcji.

Aby wykonać odtwarzanie danych, zaznacz transakcje, które należy wycofać i kliknij Create undo script w zakładce Actions.

Aby wykonać skrypt w edytorze kliknij przycisk Execute lub naciśnij F5, a utracone lub zmienione dane zostaną odzyskane.

Podsumowując, jeżeli przypadkowo skasujesz lub zmienisz dane poleceniami DELETE/UPDATE, to możesz je odtworzyć przy pomocy ApexSQL Log

Tłumacz: Anna Lesniak

November 4, 2015