Udostępnij za pośrednictwem


Pełne przywracanie bazy danych (model pełnego odzyskiwania)

Dotyczy:programu SQL Server

W ramach pełnego przywracania bazy danych celem jest przywrócenie całej bazy danych. Cała baza danych jest w trybie offline przez czas trwania przywracania. Zanim jakakolwiek część bazy danych będzie w trybie online, wszystkie dane zostaną odzyskane do spójnego punktu, w którym wszystkie części bazy danych znajdują się w tym samym punkcie w czasie i nie istnieją niezatwierdzone transakcje.

W modelu pełnego odzyskiwania po przywróceniu kopii zapasowej lub kopii zapasowych danych należy przywrócić wszystkie kolejne kopie zapasowe dziennika transakcji, a następnie odzyskać bazę danych. Bazę danych można przywrócić do określonego punktu odzyskiwania w ramach jednej z tych kopii zapasowych dziennika. Punkt odzyskiwania może być określoną datą i godziną, oznaczoną transakcją lub numerem sekwencji dziennika (LSN).

Podczas przywracania bazy danych, szczególnie w przypadku modelu pełnego odzyskiwania lub modelu odzyskiwania z rejestrowaniem zbiorczym, trzeba zastosować jedną sekwencję przywracania. Sekwencja przywracania składa się z jednej lub więcej operacji przywracania, które przenoszą dane przez jedną lub więcej faz przywracania.

Niezaufane źródła

Zalecamy, aby nie dołączać ani przywracać baz danych z nieznanych lub niezaufanych źródeł. Te bazy danych mogą zawierać złośliwy kod, który może wykonywać niezamierzony kod Transact-SQL lub powodować błędy, modyfikując schemat lub fizyczną strukturę bazy danych. Przed użyciem bazy danych z nieznanego lub niezaufanego źródła uruchom DBCC CHECKDB w bazie danych na serwerze nieprodukcyjnym. Sprawdź również kod napisany przez użytkownika w bazie danych, taki jak procedury składowane lub inny kod zdefiniowany przez użytkownika.

Kopie zapasowe z wcześniejszych wersji

Aby uzyskać informacje o obsłudze kopii zapasowych z wcześniejszych wersji programu SQL Server, zobacz sekcję "Obsługa zgodności" RESTORE (Transact-SQL).

Przywracanie bazy danych do punktu awarii

Zazwyczaj odzyskiwanie bazy danych do punktu awarii obejmuje następujące podstawowe kroki:

  1. Utwórz kopię zapasową aktywnego dziennika transakcji (nazywanego ogonem dziennika). Spowoduje to utworzenie kopii zapasowej dziennika końcowego. Jeśli aktywny dziennik transakcji jest niedostępny, wszystkie transakcje w tej części dziennika zostaną utracone.

    Ważny

    W modelu odzyskiwania zbiorczego, utworzenie kopii zapasowej dziennika zawierającego operacje rejestrowane zbiorczo wymaga dostępu do wszystkich plików danych w bazie danych. Jeśli nie można uzyskać dostępu do plików danych, nie można utworzyć kopii zapasowej dziennika transakcji. W takim przypadku należy ręcznie ponownie wykonać wszystkie zmiany wprowadzone od czasu utworzenia najnowszej kopii zapasowej dziennika.

    Aby uzyskać więcej informacji, zobacz Tail-Log Backups (SQL Server).

  2. Przywróć najnowszą pełną kopię zapasową bazy danych bez odzyskiwania bazy danych (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  3. Jeśli istnieją różnicowe kopie zapasowe, przywróć najnowszą bez odzyskiwania bazy danych (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).

    Przywracanie najnowszej różnicowej kopii zapasowej zmniejsza liczbę kopii zapasowych dziennika transakcji, które należy przywrócić.

  4. Zacznij od pierwszej kopii zapasowej dziennika transakcji utworzonej po przywróconej właśnie kopii zapasowej, przywracając dzienniki w kolejności z opcją NO RECOVERY.

  5. Przywróć bazę danych (RESTORE DATABASE database_name WITH RECOVERY). Alternatywnie ten krok można połączyć z przywróceniem ostatniej kopii zapasowej dziennika.

Poniższa ilustracja przedstawia tę sekwencję przywracania. Po wystąpieniu błędu (1) zostanie utworzona kopia zapasowa dziennika końcowego (2). Następnie baza danych zostanie przywrócona do punktu awarii. Obejmuje to przywrócenie kopii zapasowej bazy danych, następnie różnicowej kopii zapasowej, a także każdej kopii zapasowej dziennika wykonanej po różnicowej kopii zapasowej, w tym kopii zapasowej dziennika końcowego.

Ukończenie przywracania bazy danych do czasu niepowodzenia

Notatka

Podczas przywracania kopii zapasowej bazy danych na inne wystąpienie serwera, zobacz Kopiowanie baz danych za pomocą kopii zapasowej i przywracania.

Podstawowa składnia Transact-SQL RESTORE

Podstawowa składnia RESTORETransact-SQL dla sekwencji przywracania na powyższej ilustracji jest następująca:

  1. RESTORE DATABASE database FROM pełna kopia zapasowa bazy danych WITH NORECOVERY;

  2. RESTORE DATABASE baza_danych Z pełna_roznicowa_kopia WITH NORECOVERY;

  3. PRZYWRÓĆ BAZY danych DZIENNIKA Z LOG_BACKUP BEZODZYSKIWANIA;

    Powtórz ten krok przywracania dziennika dla każdej dodatkowej kopii zapasowej.

  4. PRZYWRÓĆ BAZĘ DANYCH Z ODZYSKIWANIEM;

Przykład: przywracanie do stanu sprzed awarii (Transact-SQL)

Poniższy przykład Transact-SQL przedstawia podstawowe opcje w sekwencji przywracania, która przywraca bazę danych do punktu awarii. Przykład tworzy kopię zapasową dziennika końcowego bazy danych. Następnie przykład przywraca pełną kopię zapasową bazy danych, kopię zapasową dziennika, a na końcu kopię końcową dziennika. W przykładzie baza danych zostanie odzyskana w osobnym, ostatnim kroku.

Notatka

W tym przykładzie użyto kopii zapasowej bazy danych i kopii zapasowej dziennika utworzonych w sekcji "Korzystanie z kopii zapasowych bazy danych w ramach modelu pełnego odzyskiwania" w części "Pełne kopie zapasowe bazy danych (SQL Server)". Przed utworzeniem kopii zapasowej bazy danych przykładowa baza danych AdventureWorks2022 została ustawiona tak, aby korzystała z pełnego modelu odzyskiwania.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2022   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  
  
--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  
  
--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2022 WITH RECOVERY;  
GO  

Przywracanie bazy danych do określonego punktu w zapisanej kopii zapasowej dziennika.

W modelu pełnego odzyskiwania baza danych może być zwykle przywrócona do określonego punktu w czasie, oznaczonej transakcji lub numeru sekwencji dziennika (LSN) w ramach kopii zapasowej dziennika. Jednak w ramach modelu odzyskiwania z rejestrowaniem zbiorczym, jeśli kopia zapasowa dziennika zawiera zmiany rejestrowane zbiorczo, odzyskiwanie do punktu w czasie nie jest możliwe.

Przykładowe scenariusze przywracania do punktu w czasie

W poniższym przykładzie przyjęto założenie, że dla systemu bazy danych o znaczeniu krytycznym pełna kopia zapasowa bazy danych tworzona jest codziennie o północy, różnicowa kopia zapasowa bazy danych tworzona jest co godzinę, od poniedziałku do soboty, a kopie zapasowe dziennika transakcji są tworzone co 10 minut przez cały dzień. Aby przywrócić bazę danych do stanu, w jakim znajdowała się o 5:19 rano w środę, wykonaj następujące czynności:

  1. Przywróć pełną kopię zapasową bazy danych utworzoną we wtorek o północy.

  2. Przywróć różnicową kopię zapasową bazy danych utworzoną o godzinie 5:00 w środę.

  3. Zastosuj kopię zapasową dziennika transakcji utworzoną o godzinie 5:10 w środę.

  4. Zastosuj kopię zapasową dziennika transakcji, która została utworzona 5:20 w środę, określając, że proces odzyskiwania ma zastosowanie tylko do transakcji, które wystąpiły przed godziną 5:19.

Alternatywnie, jeśli baza danych musi zostać przywrócona do stanu o godzinie 3:04 w czwartek, ale różnicowa kopia zapasowa bazy danych utworzona o godzinie 3:00 czwartek jest niedostępna, wykonaj następujące czynności:

  1. Przywróć kopię zapasową bazy danych utworzoną w środę o północy.

  2. Przywróć różnicową kopię zapasową bazy danych utworzoną o godzinie 2:00 w czwartek.

  3. Zastosuj wszystkie kopie zapasowe dziennika transakcji utworzone od 2:10 do 3:00 w czwartek.

  4. Zastosuj kopię zapasową dziennika transakcji, która została utworzona o godzinie 3:10 w czwartek, zatrzymując proces odzyskiwania o godzinie 3:04.

Notatka

Aby zapoznać się z przykładem przywracania do punktu w czasie, zobacz Przywracanie bazy danych programu SQL Server do punktu w czasie (model pełnego odzyskiwania).

Powiązane zadania

Aby przywrócić pełną kopię zapasową bazy danych

Aby przywrócić różnicową kopię zapasową bazy danych

Aby przywrócić kopię zapasową dziennika transakcji

Aby przywrócić kopię zapasową przy użyciu obiektów zarządzania SQL Server (SMO)

Aby przywrócić bazę danych do punktu w kopii zapasowej dziennika

Zobacz też

RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
stosowanie kopii zapasowych dziennika transakcji (SQL Server)
sp_addumpdevice (Transact-SQL)
Pełne kopie bazy danych (SQL Server)
Różnicowe kopie zapasowe (SQL Server)
Przegląd kopii zapasowej (SQL Server)
Przywracanie i odzyskiwanie (SQL Server) — omówienie