Odzyskiwana kopii zapasowej inaczej czyli RESTORE WITH STANDBY

Procedura odzyskiwana kopii zapasowej baz danych w SQL Server jest uzależniona głównie od modelu odzyskiwania (RECOVERY MODEL), która powinna być determinowana przez wymagania biznesowe. Dziwne w sumie gdyby było inaczej, lecz dzisiaj nie o tym.

Dla modelu SIMPLE sprawa jest prosta i opiera się głównie na odzyskaniu dostępnej, sprawnej pełnej kopii zapasowej. W przypadku modelu FULL mamy znacznie więcej możliwość. Taką bazę możemy odzyskać do konkretnego punktu w czasie posługując się w odpowiedniej kolejności kopią pełną i różnicowymi. Gdzie po między jednym a drugim może wystąpić kopia przyrostowa/ kopie przyrostowe.

W dużym uproszczeniu wygląda to mniej więcej tak.

W trakcie odtwarzania baza przechodzi w tryb Restoring gdzie dostęp do danych nie jest możliwy. Ostatnie polecenie z opcją RECOVERY powoduję dopiero wycofanie niezakończonych transakcji i pozostawienie bazy w stanie ONLINE.  W tym momencie mamy dostęp do danych.

Jednak jakiś czas temu dostałem pytanie.

Czy możliwy jest dostęp do danych w trakcie odzyskiwania?

Odpowiedź brzmi: tak

Wrócimy na moment do polecenia RESTORE a dokładnie do opcji stanu odzyskiwania.

  • RESTORE WITH RECOVERY- pozostawia bazę danych niedziałającą i nie wycofuję niezatwierdzonych transakcji. Umożliwia odzyskiwanie kolejnych logów transakcji,
  • RESTORE WITH NORECOVERY – pozostawia bazę danych gotową do użycia, wycofując niezatwierdzone transakcje. Kolejne logi transakcyjne nie mogą zostać przywrócone,
  • RESTORE WITH STANDBY – pozostawia bazę danych w trybie tylko do odczytu (standby/read only). Wycofuję niezatwierdzone transakcje, ale co ważne zapisuję je w pliku w celu, aby można było kontynuować odzyskiwanie kolejnych logów transakcyjnych

RESTORE z opcją WITH STANDBY =standby_file_name jest poleceniem, które umożliwia odzyskiwanie logów transakcyjnych step by step z opcją odczytu danych.

Między każdym odzyskaniem możliwy jest odczyt danych i kontynuowanie odzyskiwanie kolejnego logu transakcyjnego.

W dokładnie taki sposób Log Shipping realizuję możliwość odczytu na bazie secondary, ale to już tylko jako ciekawostka.

 

 

Z pasją poświęcam czas na zdobywanie wiedzy w zakresie szeroko rozumianej Data Platform. Zachwycony językiem skryptowym Windows PowerShell. Swoją wiedzę, doświadczenia i spostrzeżenia opisuję na blogu.

Leave a Reply

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *