Przywróć kopię zapasową dziennika transakcyjnego (SQL Server)

Dotyczy:programu SQL Server

Możesz przywrócić kopię zapasową dziennika transakcyjnego w SQL Server, używając SQL Server Management Studio, Transact-SQL lub PowerShell.

Warunki wstępne

Musisz przywrócić kopie zapasowe w kolejności, w jakiej je stworzyłeś. Zanim przywrócisz konkretną kopię zapasową dziennika transakcyjnego, przywróć następujące wcześniejsze kopie zapasowe bez cofania niezatwierdzonych transakcji, używając WITH NORECOVERY:

  • Pełna kopia zapasowa bazy danych oraz, opcjonalnie, ostatnia różnicowa kopia zapasowa wykonana przed tą kopią zapasową dziennika transakcji. Baza danych musiała wykorzystywać pełny lub masowo rejestrowany model odzyskiwania przed utworzeniem najnowszej pełnej lub różnicowej kopii zapasowej bazy danych.

  • Wszystkie kopie zapasowe logów transakcyjnych wykonane po pełnej kopii zapasowej bazy danych lub różnicowej kopii zapasowej (jeśli ją przywrócisz) i przed tą kopią zapasową dziennika transakcji. Musisz stosować kopie zapasowe logów w kolejności, w jakiej je stworzyłeś, bez przerw w łańcuchu logów.

Więcej informacji o kopiach zapasowych dzienników transakcyjnych można znaleźć w artykule Kopie zapasowe dzienników transakcyjnych oraz Stosowanie kopii zapasowych dzienników transakcyjnych.

Uprawnienia

Dla istniejącej bazy RESTORE danych uprawnienia domyślnie przypadają członkom stałych ról serwera sysadmin i dbcreator oraz właścicielowi (dbo) bazy danych.

RESTORE uprawnienia trafiają do ról, których skład serwer zawsze może sprawdzić. Serwer może sprawdzać członkostwo w stałej roli bazy danych tylko wtedy, gdy baza danych jest dostępna i nieuszkodzona, co nie zawsze jest prawdą, gdy RESTORE jest uruchamiany. Z tego powodu członkowie db_owner stałej roli bazy danych nie mają RESTORE uprawnień.

Remarks

W przypadku bazy danych lustrzanej lub drugiej bazy danych grupy dostępności, której nie dołączyłeś do grupy dostępności, przywróć ostatnią kopię zapasową logów z opcją NORECOVERY (-NoRecovery w PowerShell). Baza danych musi pozostać w stanie przywracania.

W przypadku pomocniczej bazy danych w konfiguracji dostarczania dzienników przywróć ostatnią kopię zapasową dziennika za pomocą opcji NORECOVERY lub STANDBY (-StandbyFile w PowerShell). Opcja ta STANDBY daje dostęp do bazy danych tylko do odczytu pomiędzy kolejnymi operacjami przywracania.

Korzystanie z programu SQL Server Management Studio

Ostrzeżenie

W typowym przywracaniu wybiera się kopie zapasowe logów razem z kopiami zapasowymi danych i różnicowymi w oknie dialogowym Przywracanie bazy danych.

  1. Połącz się z odpowiednią instancją SQL Server Database Engine. W Eksplorator obiektów wybierz nazwę serwera, aby rozwinąć drzewo serwera.

  2. Rozwiń Bazy danych. Wybierz bazę danych użytkownika lub rozwiń System Databases i wybierz bazę danych systemową.

  3. Kliknij prawym przyciskiem myszy na bazę danych, wskaż na Zadania, następnie na Przywracanie, a następnie wybierz Dziennik transakcji. Otwiera się okno dialogowe Przywracanie dziennika transakcji.

    Notatka

    Jeśli Dziennik Transakcji jest niedostępny, może być konieczne najpierw przywrócenie pełnej lub różnicowej kopii zapasowej. Użyj okna dialogowego Przywracanie bazy danych.

  4. Na stronie ogólnej, w polu listy Database, wybierz bazę danych. Lista pokazuje tylko bazy danych w stanie przywracania.

  5. Aby określić źródło i lokalizację zestawów kopii zapasowych do przywrócenia, wybierz jedną z następujących opcji:

    • Z poprzednich kopii zapasowych bazy danych

      Wybierz bazę danych do przywrócenia z listy rozwijanej. Lista zawiera tylko bazy danych z kopiami zapasowymi zarejestrowanymi w historii kopii zapasowych msdb.

    • z pliku lub taśmy

      Wybierz przycisk przeglądaj (...), aby otworzyć okno dialogowe Wybieranie urządzeń kopii zapasowej . W polu typu nośnika kopii zapasowej wybierz typ urządzenia. Aby dodać jedno lub więcej urządzeń do pola Nośnik kopii zapasowej, wybierz Dodaj.

      Po dodaniu wybranych urządzeń wybierz OK, aby wrócić do strony Ogólne.

  6. W Wybierz kopie zapasowe dziennika transakcji, aby przywrócić siatkę, wybierz kopie zapasowe do przywrócenia. Siatka wyświetla dostępne kopie zapasowe dzienników transakcyjnych dla wybranej bazy danych. Siatka przedstawia kopie zapasowe logów w kolejności numerów sekwencyjnych logów (LSN), które zawierają, i musisz je przywrócić w tej kolejności.

    W poniższej tabeli wymieniono nagłówki kolumn siatki i opisano ich wartości.

    Nagłówek Wartość
    Przywróć Wybrane pola wyboru wskazują, które zestawy kopii zapasowych należy przywrócić.
    nazwa Nazwa zestawu kopii zapasowych.
    elementu Składnik kopii zapasowej: Database, Filelub <puste> (w przypadku dzienników transakcji).
    Baza danych Nazwa bazy danych zaangażowanej w operację tworzenia kopii zapasowej.
    data rozpoczęcia Data i godzina rozpoczęcia operacji tworzenia kopii zapasowej w regionalnym ustawieniu klienta.
    data zakończenia Data i godzina zakończenia operacji tworzenia kopii zapasowej przedstawione w regionalnym ustawieniu klienta.
    Pierwszy LSN Numer sekwencji dziennika pierwszej transakcji w zestawie kopii zapasowych. Pole na kopie zapasowe plików.
    Ostatnie LSN Numer sekwencji dziennika ostatniej transakcji w zestawie kopii zapasowych. Pole na kopie zapasowe plików.
    Punkt Kontrolny LSN Numer sekwencji dziennika ostatniego punktu kontrolnego podczas tworzenia kopii zapasowej.
    Pełny LSN Numer sekwencji dziennika logu najnowszej pełnej kopii zapasowej bazy danych.
    Server Nazwa wystąpienia silnika bazy danych, które wykonało operację tworzenia kopii zapasowej.
    nazwa użytkownika Nazwa użytkownika, który wykonał operację tworzenia kopii zapasowej.
    rozmiar Rozmiar zestawu kopii zapasowych w bajtach.
    położenie Położenie zestawu kopii zapasowych w woluminie.
    wygasanie Data i godzina wygaśnięcia zestawu kopii zapasowych.
  7. Wybierz jedną z następujących opcji:

    • Punkt w czasie

      Pozostaw ustawienie domyślne (najnowsze możliwe) lub wybierz przycisk przeglądania, aby otworzyć okno dialogowe Przywracanie do określonego momentu i wybrać konkretną datę i godzinę.

    • : oznaczona transakcja

      Przywróć bazę danych do wcześniej oznaczonej transakcji. Ta opcja otwiera okno dialogowe Wybierz oznaczoną transakcję . Siatka w tym oknie dialogowym przedstawia oznaczone transakcje w wybranych kopiach zapasowych dzienników transakcyjnych.

      Domyślnie operacja przywracania obejmuje do oznaczonej transakcji, ale jej nie uwzględnia. Aby uwzględnić oznaczoną transakcję w przywracaniu, wybierz Uwzględnij oznaczoną transakcję.

      W poniższej tabeli wymieniono nagłówki kolumn siatki i opisano ich wartości.

      Nagłówek Wartość
      <puste> Wyświetla pole wyboru do zaznaczenia opcji.
      Mark transakcji Nazwa oznaczonej transakcji określonej przez użytkownika, gdy transakcja została zatwierdzona.
      Data Data i godzina transakcji, kiedy została zatwierdzona. Data i czas transakcji są wyświetlane tak, jak zapisane są w tabeli logmarkhistory w msdb, a nie zgodnie z datą i godziną komputera klienta.
      Opis Opis oznaczonej transakcji, jeśli istnieje, określony przez użytkownika w momencie jej dokonania.
      LSN Numer sekwencji dziennika oznaczonej transakcji.
      Baza danych Nazwa bazy danych, w której zatwierdzono oznaczoną transakcję.
      nazwa użytkownika Nazwa użytkownika bazy danych, który zadeklarował oznaczoną transakcję.
  8. Aby wyświetlić lub wybrać opcje zaawansowane, wybierz opcję Opcje w okienku Wybierz stronę.

  9. W sekcji opcji Przywrócenia wybierz jedną z następujących opcji:

    • Zachowaj ustawienia replikacji (WITH KEEP_REPLICATION)

      Zachowuje ustawienia replikacji podczas przywracania opublikowanej bazy danych na inny serwer niż ten, na którym została utworzona.

      Ta opcja jest dostępna tylko w połączeniu z opcją Pozostaw bazę danych gotową do użycia przez wycofanie niezatwierdzonych transakcji... (opisaną później), która jest równoważna przywróceniu kopii zapasowej z opcją RECOVERY.

      Wybranie tej opcji jest równoważne użyciu opcji KEEP_REPLICATION w instrukcji Transact-SQL RESTORE .

    • monituj przed przywróceniem każdej kopii zapasowej

      Przed każdą kolejną kopią zapasową po pierwszej ta opcja otwiera okno dialogowe Kontynuuj przywracanie, które pyta, czy chcesz kontynuować sekwencję przywracania. Okno dialogowe pokazuje nazwę następnego zestawu mediów (jeśli jest dostępna), nazwę zestawu kopii zapasowych oraz opis zestawu kopii zapasowych.

      Ta opcja jest szczególnie przydatna, gdy trzeba zamienić taśmy dla różnych zestawów nośników, na przykład gdy serwer ma tylko jedno urządzenie taśmowe. Wybierz OK tylko wtedy, gdy będziesz gotowy kontynuować.

      Jeśli wybierzesz Nie, baza danych pozostaje w stanie przywracania. Możesz kontynuować sekwencję przywracania później, od ostatniego zakończonego przywracania. Jeśli następna kopia zapasowa jest kopią zapasową danych lub różnicową, ponownie użyj zadania Przywróć bazę danych. Jeśli następna kopia zapasowa jest kopią zapasową dziennika, użyj zadania Przywróć dziennik transakcji.

    • Ogranicz dostęp do przywróconej bazy danych (WITH RESTRICTED_USER)

      Udostępnia przywróconą bazę danych tylko członkom db_owner, dbcreatorlub sysadmin.

      Wybranie tej opcji jest równoważne użyciu opcji RESTRICTED_USER w instrukcji Transact-SQL RESTORE .

  10. W opcji Recovery state określ stan bazy danych po operacji przywracania.

    • Pozostaw bazę danych gotową do użycia przez wycofywanie niezatwierdzonych transakcji. Nie można przywrócić dodatkowych dzienników transakcji. (RESTORE Z FUNKCJĄ ODZYSKIWANIA)

      Odzyskuje bazę danych. Ta opcja jest równoważna opcji RECOVERY w instrukcji RESTORE języka Transact-SQL.

      Wybierz tę opcję tylko wtedy, gdy nie masz innych kopii zapasowych logów do przywrócenia.

    • Pozostawić bazę danych niedziałającą i nie cofaj niezatwierdzonych transakcji. Można przywrócić dodatkowe dzienniki transakcji. (RESTORE BEZODZYSKIWANIA)

      Pozostawia bazę danych nieodzyskaną, w stanie PRZYWRACANIE. Ta opcja jest równoważna użyciu opcji NORECOVERY w instrukcji Transact-SQL RESTORE.

      Po wybraniu tej opcji opcja Zachowaj ustawienia replikacji jest niedostępna.

    • Pozostaw bazę danych w trybie tylko do odczytu. Cofnij niezatwierdzone transakcje, ale zapisz akcje cofania w pliku, aby efekty odzyskiwania mogły zostać odwrócone. (RESTORE Z WSTRZYMANIEM)

      Pozostawia bazę danych w stanie oczekiwania. Ta opcja jest równoważna użyciu opcji STANDBY w instrukcji Transact-SQL RESTORE.

      Ta opcja wymaga pliku w stanie gotowości.

  11. Jeśli zostawisz bazę danych w trybie tylko do odczytu, podaj nazwę pliku rezerwowego w polu tekstowym Plik Standby. Możesz wyszukać plik rezerwowy lub wpisać jego ścieżkę w polu tekstowym.

Korzystanie z Transact-SQL

Ważny

Aby uniknąć niejednoznaczności, wyraźnie określaj albo WITH NORECOVERY lub WITH RECOVERY w każdej instrukcji RESTORE, zwłaszcza w skryptach.

  1. Dla każdej kopii zapasowej dziennika transakcji przed ostatnią w sekwencji przywracania wykonaj polecenie RESTORE LOG o następujących wartościach:

    • Nazwa bazy danych, do której ma zostać zastosowany dziennik transakcji.
    • Urządzenie kopii zapasowej, które zawiera kopię zapasową dziennika transakcji.
    • Klauzula NORECOVERY.

    Poniższy przykład przedstawia podstawową składnię, gdzie <database_name> to nazwa bazy danych, a <backup_device> to nazwa urządzenia zawierającego kopię zapasową logów.

    RESTORE LOG <database_name>
    FROM <backup_device>
    WITH NORECOVERY
    [ ; ]
    

    Jeśli sekwencja przywracania ma tylko jedną kopię zapasową logów, pomiń ten krok.

  2. Dla ostatniej kopii zapasowej logów w sekwencji przywracania użyj jednej z następujących metod, aby odzyskać bazę danych:

    • Odzyskaj bazę danych jako część ostatniej instrukcji RESTORE LOG:

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH RECOVERY;
      GO
      
    • Odzyskaj bazę danych później, za pomocą osobnego RESTORE DATABASE polecenia:

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH NORECOVERY;
      
      RESTORE DATABASE <database_name>
      WITH RECOVERY;
      GO
      

      Baza danych pozostaje w stanie przywracania po ostatniej instrukcji RESTORE LOG. Możesz sprawdzić, czy przywróciłeś wszystkie niezbędne kopie zapasowe logów, a następnie przeprowadzić odzyskiwanie bazy danych. Takie podejście często jest przydatne przy przywracaniu w określonym momencie.

Przykłady (Transact-SQL)

Domyślnie baza danych AdventureWorks2025 używa prostego modelu odzyskiwania. Poniższe przykłady wymagają kopii zapasowych wykonanych w pełnym modelu odzyskiwania. Zanim utworzysz te kopie zapasowe, uruchom następujące polecenie, aby zmienić model odzyskiwania:

ALTER DATABASE AdventureWorks2025
SET RECOVERY FULL;

Przejście na pełny model odzyskiwania wchodzi w życie dopiero po wykonaniu pierwszej kopii zapasowej danych. Wykonaj pełną kopię zapasową bazy danych, aby rozpocząć ciąg kopii dziennika.

Poniższe przykłady przywracają kopie zapasowe do instancji, w której baza danych AdventureWorks2025 nie istnieje, na przykład na innym serwerze.

A. Zastosuj pojedynczą kopię zapasową dziennika transakcji

Poniższy przykład przywraca bazę danych AdventureWorks2025 z pełnej kopii zapasowej na urządzeniu kopii zapasowej o nazwie AdventureWorks2025_1. Następnie stosuje pierwszą kopię zapasową dziennika transakcyjnego z urządzenia kopii zapasowej o nazwie AdventureWorks2025_log. Na koniec odzyskuje bazę danych.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

B. Zastosuj wiele kopii zapasowych dziennika transakcji

Poniższy przykład przywraca bazę danych AdventureWorks2025 z pełnej kopii zapasowej na urządzeniu kopii zapasowej o nazwie AdventureWorks2025_1. Następnie stosuje pojedynczo pierwsze trzy kopie zapasowe dziennika transakcyjnego z urządzenia kopii zapasowej o nazwie AdventureWorks2025_log. Na koniec odzyskuje bazę danych.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 2,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 3,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

Użyj PowerShell

Użyj Restore-SqlDatabase cmdletu i ustaw -RestoreAction parametr na Log. Dołącz parametr -NoRecovery dla każdego przywracania w sekwencji oprócz ostatniego. Pomiń -NoRecovery podczas ostatniego przywracania logów, aby odzyskać bazę danych.

Notatka

Te przykłady wymagają modułu SqlServer . Aby uzyskać więcej informacji, zobacz Dostawca PowerShell SQL Server.

Pełną składnię można znaleźć w Restore-SqlDatabase.

Przykłady (PowerShell)

Poniższe przykłady przywracają kopie zapasowe do instancji, w której baza danych AdventureWorks2025 nie istnieje, na przykład na innym serwerze.

A. Zastosuj pojedynczą kopię zapasową dziennika transakcji

Poniższy przykład przywraca bazę AdventureWorks2025 danych z pełnej kopii zapasowej, pozostawiając ją w stanie przywracania. Następnie wykonuje kopię zapasową dziennika transakcyjnego i odzyskuje bazę danych.

$instance = "Computer\Instance"

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

$logRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_log1.trn"
    RestoreAction  = "Log"
}
Restore-SqlDatabase @logRestore

B. Zastosuj wiele kopii zapasowych dziennika transakcji

Poniższy przykład przywraca pełną kopię zapasową bazy danych, a następnie przywraca kolejno trzy kopie zapasowe dziennika transakcyjnego. Każde przywracanie oprócz ostatniego używa -NoRecovery, więc ostatnie przywracanie logów przywraca bazę danych.

$instance = "Computer\Instance"
$logBackups = @(
    "C:\Backup\AdventureWorks2025_log1.trn",
    "C:\Backup\AdventureWorks2025_log2.trn",
    "C:\Backup\AdventureWorks2025_log3.trn"
)

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

for ($i = 0; $i -lt $logBackups.Count; $i++) {
    $isLast = ($i -eq $logBackups.Count - 1)
    $logRestore = @{
        ServerInstance = $instance
        Database       = "AdventureWorks2025"
        BackupFile     = $logBackups[$i]
        RestoreAction  = "Log"
        NoRecovery     = -not $isLast
    }
    Restore-SqlDatabase @logRestore
}