Odtwarzanie bazy danych ze Snapshot-a

18-Cze-2011

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:

USE master;
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 2
Database 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 IMMEDIATE

Polecenie 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.

Dodaj komentarz:

Autor: Rafał Kraik