W artykule Jak utorzyć snapshot bazy danych i jak z nim pracować? (mobilo/mobilo24) został opisany proces tworzenia migawki bazy danych. Okazuje się, że dysponując migawką, możesz na jej podstawie odtworzyć oryginalną bazę danych. Przypomnijmy. Plik snapshot zawiera w sobie wszystkie strony zmodyfikowane od momentu wykonania migawki. Jeżeli więc masz do uruchomienia procedury, które mogą coś popsuć w bazie danych, a nie masz czasu na wykonanie kopii, jakimś rozwiązaniem jest storzenie migawki.
- Jeżeli procedury niczego nie zepsują, to po prostu usuniesz migawkę.
- Jeżeli zaś coś pójdzie nie tak, szybko odtworzysz bazę danych przekopiowując jedynie zmodyfikowane strony.
Ale po kolei. Załóżmy, że migawka została już utworzona (patrz artykuł Jak utorzyć snapshot bazy danych i jak z nim pracować?)
Aby przywrócić bazę danych do oryginalnego stanu wystrarczy wykonać polecenie:
RESTORE DATABASE AdventureWorksLT
FROM DATABASE_SNAPSHOT=’AdventureWorksLT_SS’
Gdybyś miał przy tym komunikat o braku dostępu bazy:
Msg 5070, Level 16, State 2, Line 2Database state cannot be changed while other users are using the database 'AdventureWorksLT’
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
to przyczyną jest fakt, że w odtwarzanej bazie danych są otwarte sesje. Koniecznie upewnij się, że nie zniszczysz efektów cudzej pracy! Odtwarzając dane z pliku snapshot zamazujesz wszystkie dane wprowadzone do bazy danych od momentu wykonania snapshota! Jeżeli komunikat wynika np. z innych otwartych przez ciebie sesji, możesz przełączyć bazę w tryb pojedynczego uzytkownika poprzez:
ALTER DATABASE AdventureWorksLT SET SINGLE_USER WITH ROLLBACK IMMEDIATEPolecenie zostało dokładniej opisane w artykule Opcje dostępu do bazy danych dla użytkowników SINGLE_USER, MULTI_USER, RESTRICTED_USER (db user access options).
Po poprawnym wykonaniu restore, rekordy ze snapshota powędrowały spowrotem do podstawowej bazy danych i baza danych „nie pamięta” tego co mogły popsuć procedury po wykonaniu migawki.
Pamiętaj: Snapshot nie chroni bazy danych przed awarią podstawowego pliku bazy danych.