Udostępnij za pomocą


Przywracanie bazy danych SQL Server do określonego momentu (pełny model odzyskiwania)

Dotyczy:SQL Server

W tym temacie opisano sposób przywracania bazy danych do punktu w czasie w programie SQL Server przy użyciu programu SQL Server Management Studio lub Transact-SQL. Ten temat dotyczy tylko baz danych programu SQL Server korzystających z pełnych lub zbiorczo zarejestrowanych modeli odzyskiwania.

Ważne

W ramach modelu odzyskiwania rejestrowanego zbiorczo, jeśli kopia zapasowa dziennika zawiera zmiany rejestrowane zbiorczo, odzyskiwanie do punktu w czasie nie jest możliwe do punktu w ramach tej kopii zapasowej. Baza danych musi zostać odzyskana na końcu kopii zapasowej dziennika transakcji.

Przed rozpoczęciem

Rekomendacje

  • Użyj funkcji STANDBY, aby znaleźć nieznany punkt w czasie.

  • Określanie punktu w czasie na początku sekwencji przywracania

Zabezpieczenia

Permissions

Jeśli przywracana baza danych nie istnieje, użytkownik musi mieć uprawnienia CREATE DATABASE, aby móc wykonać funkcję RESTORE. Jeśli baza danych istnieje, uprawnienia RESTORE są domyślne dla członków stałych ról serwera sysadmin i dbcreator oraz właściciela (dbo) bazy danych (dla opcji FROM DATABASE_SNAPSHOT baza danych zawsze istnieje).

Uprawnienia RESTORE są przekazywane do ról, w których informacje o członkostwie są zawsze łatwo dostępne dla serwera. Ponieważ stałe członkostwo w roli bazy danych można sprawdzić tylko wtedy, gdy baza danych jest dostępna i nieuszkodzona, co nie zawsze da się zagwarantować w przypadku wykonywania operacji RESTORE, członkowie stałej roli bazy danych db_owner nie mają uprawnień RESTORE.

Korzystanie z programu SQL Server Management Studio

Aby przywrócić bazę danych do punktu w czasie

  1. W Eksploratorze obiektów połącz się z odpowiednim wystąpieniem silnika bazy danych SQL Server i rozwiń drzewo serwera.

  2. Rozwiń węzeł Bazy danych. W zależności od bazy danych wybierz bazę danych użytkownika lub rozwiń sekcję Bazy danych systemowych, a następnie wybierz bazę danych systemową.

  3. Kliknij prawym przyciskiem myszy bazę danych, wskaż polecenie Zadania, wskaż polecenie Przywróć, a następnie kliknij pozycję Baza danych.

  4. Na stronie Ogólne użyj sekcji Źródło , aby określić źródło i lokalizację zestawów kopii zapasowych do przywrócenia. Wybierz jedną z następujących opcji:

    • Baza danych

      Wybierz bazę danych do przywrócenia z listy rozwijanej. Lista zawiera tylko bazy danych, których kopia zapasowa została utworzona zgodnie z historią kopii zapasowych msdb .

    Uwaga / Notatka

    Jeśli kopia zapasowa zostanie pobrana z innego serwera, serwer docelowy nie będzie miał informacji o historii kopii zapasowych dla określonej bazy danych. W takim przypadku wybierz pozycję Urządzenie, aby ręcznie określić plik lub urządzenie do przywrócenia.

    • Urządzenie

      Kliknij przycisk przeglądaj (...), aby otworzyć okno dialogowe Wybieranie urządzeń kopii zapasowej . W polu Nośnik kopii zapasowej wybierz jeden z wymienionych typów urządzeń. Aby wybrać co najmniej jedno urządzenie dla pola Nośnik kopii zapasowej , kliknij przycisk Dodaj.

      Po dodaniu urządzeń do listy Nośnik kopii zapasowych kliknij przycisk OK , aby powrócić do strony Ogólne .

      W polu Źródło: urządzenie: baza danych wybierz nazwę bazy danych, która ma zostać przywrócona.

      Uwaga Ta lista jest dostępna tylko po wybraniu Urządzenie. Dostępne będą tylko bazy danych z kopiami zapasowymi na wybranym urządzeniu.

  5. W sekcji Destination pole Database jest automatycznie wypełniane nazwą bazy danych do przywrócenia. Aby zmienić nazwę bazy danych, wprowadź nową nazwę w polu Database.

  6. Kliknij Oś czasu, aby uzyskać dostęp do okna dialogowego Oś czasu kopii zapasowej.

  7. W sekcji Przywracanie do kliknij pozycję Określona data i godzina.

  8. Użyj pól Data i godzina lub paska suwaka, aby określić określoną datę i godzinę zatrzymania przywracania. Kliknij przycisk OK.

    Uwaga / Notatka

    Użyj pola Interwał osi czasu , aby zmienić czas wyświetlany na osi czasu.

  9. Po określeniu konkretnego momentu w czasie, doradca odzyskiwania bazy danych gwarantuje, że w kolumnie Przywracanie siatki Zestawów kopii zapasowych do przywrócenia wybierane są tylko te kopie zapasowe, które są wymagane do przywrócenia tego momentu w czasie. Wybrane kopie zapasowe tworzą zalecany plan przywracania do punktu w czasie. Należy użyć tylko wybranych kopii zapasowych do operacji przywracania do punktu w czasie.

    Aby uzyskać informacje o kolumnach w zestawach kopii zapasowych do przywrócenia siatki, zobacz Przywracanie bazy danych (strona ogólna). Aby uzyskać informacje na temat doradcy odzyskiwania bazy danych, zobacz Przywracanie i odzyskiwanie — omówienie (SQL Server).

  10. Na stronie Opcje w panelu Opcje przywracania możesz wybrać dowolną z następujących opcji, jeśli jest to odpowiednie dla danej sytuacji:

    • Zastąp istniejącą bazę danych (ZASTĄP)

    • Zachowaj ustawienia replikacji (WITH KEEP_REPLICATION)

    • Ograniczanie dostępu do przywróconej bazy danych (WITH RESTRICTED_USER)

    Aby uzyskać więcej informacji na temat tych opcji, zobacz Restore Database (Strona opcji).

  11. Wybierz opcję dla pola Stan odzyskiwania . To pole określa stan bazy danych po operacji przywracania.

    • FUNKCJA RESTORE WITH RECOVERY jest zachowaniem domyślnym, które pozostawia bazę danych gotową do użycia przez wycofywanie niezatwierdzonych transakcji. Nie można przywrócić dodatkowych dzienników transakcji. Wybierz tę opcję, jeśli przywracasz teraz wszystkie niezbędne kopie zapasowe.

    • RESTORE WITH NORECOVERY ,który pozostawia bazę danych nieoperacyjną i nie cofa niezatwierdzonych transakcji. Można przywrócić dodatkowe dzienniki transakcji. Nie można użyć bazy danych, dopóki nie zostanie odzyskana.

    • PRZYWRÓĆ W TRYBIE REZERWOWYM co pozostawia bazę danych w trybie tylko do odczytu. Cofa niezatwierdzone transakcje, ale zapisuje działania cofania w pliku rezerwowym, aby można było odwrócić skutki odzysku.

    Aby uzyskać opisy opcji, zobacz Przywracanie bazy danych (strona opcji).

  12. Opcja wykonania kopii zapasowej dziennika końcowego przed przywróceniem zostanie zaznaczona, jeśli będzie to konieczne dla wybranego punktu w czasie. Nie musisz modyfikować tego ustawienia, ale możesz utworzyć kopię zapasową ogona dziennika, nawet jeśli nie jest to wymagane.

  13. Operacje przywracania mogą zakończyć się niepowodzeniem, jeśli istnieją aktywne połączenia z bazą danych. Zaznacz opcję Zamknij istniejące połączenia , aby upewnić się, że wszystkie aktywne połączenia między programem Management Studio i bazą danych są zamknięte. To pole wyboru ustawia bazę danych na tryb pojedynczego użytkownika przed wykonaniem operacji przywracania i ustawia bazę danych na tryb wielu użytkowników po zakończeniu.

  14. Wybierz pozycję Monituj przed przywróceniem każdej kopii zapasowej , jeśli chcesz wyświetlić monit między każdą operacją przywracania. Zwykle nie jest to konieczne, chyba że baza danych jest duża i chcesz monitorować stan operacji przywracania.

Korzystanie z Transact-SQL

Przed rozpoczęciem

Określony czas jest zawsze przywracany z kopii zapasowej dziennika. W każdej instrukcji RESTORE LOG sekwencji przywracania należy określić docelowy czas lub transakcję w identycznej klauzuli STOPAT. Jako wymaganie wstępne dotyczące przywracania do punktu w czasie należy najpierw przywrócić pełną kopię zapasową bazy danych, której punkt końcowy jest wcześniejszy niż docelowy czas przywracania. Ta pełna kopia zapasowa bazy danych może być starsza niż najnowsza pełna kopia zapasowa bazy danych, o ile będzie można przywrócić każdą kolejną kopię zapasową dziennika, maksymalnie do kopii zapasowej dziennika, która zawiera punkt docelowy w czasie.

Aby ułatwić określenie kopii zapasowej bazy danych do przywrócenia, opcjonalnie możesz określić klauzulę WITH STOPAT w instrukcji RESTORE DATABASE, aby zgłosić błąd, jeśli kopia zapasowa danych jest zbyt ostatnia dla określonego czasu docelowego. Kompletna kopia zapasowa danych jest zawsze przywracana, nawet jeśli zawiera czas docelowy.

Podstawowa składnia Transact-SQL

PRZYWRÓĆ DATABASE_NAME DZIENNIKA Z <BACKUP_DEVICE> Z = ZATRZYMANIA, ODZYSKIWANIEM...

Punkt odzyskiwania to najnowsze zatwierdzenie transakcji, które wystąpiło w lub przed wartością daty/godziny określonej przez godzinę.

Aby przywrócić tylko modyfikacje, które zostały wprowadzone przed określonym punktem w czasie, użyj WITH STOPAT =time dla każdej przywracanej kopii zapasowej. Dzięki temu upewnij się, że nie przechodzisz poza docelowy czas.

Aby przywrócić bazę danych do punktu w czasie

Uwaga / Notatka

Aby zapoznać się z przykładem tej procedury, zobacz Przykład (Transact-SQL), w dalszej części tej sekcji.

  1. Połącz się z instancją serwera, na której chcesz przywrócić bazę danych.

  2. Wykonaj instrukcję RESTORE DATABASE przy użyciu opcji NORECOVERY.

    Uwaga / Notatka

    Jeśli sekwencja przywracania częściowego wyklucza dowolną grupę plików FILESTREAM , przywracanie do punktu w czasie nie jest obsługiwane. Możesz wymusić kontynuowanie sekwencji przywracania. Jednak grupy plików FILESTREAM pominięte w instrukcji RESTORE nigdy nie mogą zostać przywrócone. Aby wymusić przywrócenie do konkretnego punktu w czasie, określ opcję CONTINUE_AFTER_ERROR razem z opcją STOPAT, STOPATMARK lub STOPBEFOREMARK, którą musisz także określić w kolejnych instrukcjach RESTORE LOG. Jeśli określisz CONTINUE_AFTER_ERROR, sekwencja przywracania częściowego zakończy się pomyślnie, a grupa plików FILESTREAM stanie się nieodwracalna.

  3. Przywróć ostatnią różnicowa kopię zapasową bazy danych, jeśli istnieje, bez odzyskiwania bazy danych (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  4. Zastosuj każdą kopię zapasową dziennika transakcji w tej samej sekwencji, w której zostały utworzone, wskazując czas, w którym zamierzasz zakończyć przywracanie dziennika (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT =time, RECOVERY).

    Uwaga / Notatka

    Opcje ODZYSKIWANIA i STOPAT. Jeśli kopia zapasowa dziennika transakcji nie zawiera żądanego czasu (na przykład jeśli określony czas przekracza koniec czasu objętego dziennikiem transakcji), zostanie wygenerowane ostrzeżenie, a baza danych pozostanie nierozpoznana.

Przykład (Transact-SQL)

Poniższy przykład przywraca bazę danych do stanu włączonego 12:00 AMApril 15, 2020 i pokazuje operację przywracania, która obejmuje wiele kopii zapasowych dziennika. Na urządzeniu kopii zapasowej pełna kopia zapasowa bazy danych, która ma zostać przywrócona, AdventureWorksBackupsjest trzecim zestawem kopii zapasowych na urządzeniu (FILE = 3), pierwszą kopią zapasową dziennika jest czwarty zestaw kopii zapasowych (FILE = 4), a druga kopia zapasowa dziennika to piąty zestaw kopii zapasowych (FILE = 5).

Ważne

Baza AdventureWorks2025 danych używa prostego modelu odzyskiwania. Aby zezwolić na tworzenie kopii zapasowych dzienników, przed utworzeniem pełnej kopii zapasowej bazy danych baza danych została ustawiona tak, aby korzystała z modelu pełnego odzyskiwania przy użyciu polecenia ALTER DATABASE AdventureWorks SET RECOVERY FULL.

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO  
  

Powiązane zadania

Zobacz też

zestaw kopii zapasowych (Transact-SQL)
PRZYWRÓĆ (Transact-SQL)
RESTORE HEADERONLY (Transact-SQL)