Jak odtworzyć dane po wykonaniu przypadkowego polecenia UPDATE, nie posiadając kopi zapasowej bazy danych SQL Server’a

Upps! Załóżmy, że wykonałeś na bazie danych polecenie UPDATE bez warunku WHERE i nadpisałeś wszystkie rekordy w tablicy złymi danymi. Jak przywrócić poprawne wartości w bazie?

Jeśli utworzyłeś wcześniej kopię zapasową bazy danych, która zawiera oryginalne, poprawne wartości, to zadanie jest proste. Typowym podejściem w tej sytuacji jest:

  • Odtworzenie bazy danych z kopii zapasowej i użycie jej jako bazy oryginalnej.
  • W przypadku, w którym pojawiły się dodatkowe zmiany na danych bazy danych, po wykonaniu błędnego polecenia UPDATE lub jeśli nie możesz czasowo odciąć dostępu do bazy danych:
    1. Odtwórz bazę danych z kopii zapasowej na serwer testowy.
    2. Użyj kreatora Export data (Eksportuj dane) w SQL Server Management Studio do wyeksportowania danych.
    3. Zaimportuj dane do oryginalnej bazy danych.

Co w przypadku, w którym nie posiadasz pełnej kopi zapasowej bazy danych. Wtedy nadal możesz wycofać wykonane na bazie zmiany, wykorzystując informacje zapisane w logu transakcyjnym bazy danych.

Log transakcyjny przechowuje informacje o transakcjach wykonywanych na bazie danych. Jeśli baza nie została obcięta (truncated) lub zmniejszona (shrunk), możemy posłużyć się narzędziem ApexSQL Log

ApexSQL Log jest narzędziem, które pozwala czytać log transakcyjny bazy danych i m.in. wycofać przypadkowo wykonane polecenia UPDATE. Tak więc, zamiast zmieniać wszystkie dane we wszystkich tablicach bazy, można wycofać tylko pojedynczą komendę UPDATE i zaktualizować tylko zmienione przypadkowo dane.

Aby odtworzyć dane przy pomocy ApexSQL Log, po przypadkowej aktualizacji poleceniem UPDATE::

  1. Uruchom ApexSQL Log

  2. Podłącz się do bazy danych.

  3. Użyj sekcji Time range w opcjach Filter setup do zawężenia wyszukiwania komend UPDATE do właściwego zakresu czasu.

  4. Wybierz Update row w grupie opcji Filter setup, w zakładce Operations.

  5. W zakładce Tables wybierz tabelę (lub tabele), w której zaktualizowano dane.

  6. Jeśli to możliwe, wykorzystaj zakładkę Users and Applications, aby dodatkowo zawęzić zakres do przeszukiwania.
  7. Kliknij Open
  8. Utwórz skrypt, wycofujący wykonanie zmian (skrypt Undo):

    1. Kliknij Create undo script w zakładce Home w grupie Actions, aby utworzyć skrypt wycofujacy wykonanie zmian dla wszystkich transakcji, wyświetlonych w głównym oknie narzędzia.

    2. Zaznacz transakcje w utworzonym skrypcie, kliknij prawym przyciskiem myszy w głównej części okna i wybierz z menu kontekstowego polecenie Create undo script. Powstanie skrypt tylko dla wybranych transakcji.
  9. Wykonaj skrypt na odpowiedniej bazie danych.

Po wykonaniu skryptu wcześniejsze, niepożądane aktualizacje zostaną wycofane i bazie pojawią się oryginalne, nieuszkodzone dane.

Narzędzie ApexSQL Log może zostać wykorzystane, jeśli przypadkowo zostało wykonane polecenie UPDATE na rekordach bazy danych, nawet w sytuacji, w której nie posiadamy kopii zapasowej bazy danych.

Tłumacz: Anna Lesniak

November 4, 2015