Nie można przywrócić bazy danych SQL Server z pełnej kopii zapasowej, przetwarzanie dziennika kończy się niepowodzeniem, baza danych jest w stanie „przywracania”


14

Próbuję skonfigurować bazę danych do celów programistycznych na lokalnym komputerze SQL Server Developer Edition 12.0.2000.8 na moim komputerze. Mam pełną kopię zapasową bazy danych i osobne pliki kopii zapasowych tylko do dziennika transakcji, które zostały mi przesłane przez sieć.

Podczas próby przywrócenia z pełnej kopii zapasowej po pewnym czasie (może ~ 1 godzina, baza danych ma rozmiar ~ 270 GB), pojawia się błąd:

System.Data.SqlClient.SqlError: Wystąpił błąd podczas przetwarzania dziennika dla bazy danych „nazwa bazy danych”. Jeśli to możliwe, przywróć z kopii zapasowej. Jeśli kopia zapasowa nie jest dostępna, konieczne może być przebudowanie dziennika. (Microsoft.SqlServer.SmoExtended)

Następnie db jest w stanie „Przywracanie ..”.

Chciałem uruchomić coś takiego (mam to z tego pytania)

ALTER DATABASE recovery_test_2 SET EMERGENCY;
ALTER DATABASE recovery_test_2 SET SINGLE_USER;

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;

przeciwko temu, ale oczywiście nie mogę, ponieważ baza danych jest w stanie „Przywracanie ..”. Ponowne uruchomienie procesu przywracania na nim prowadzi do tego samego komunikatu o błędzie, upuszczenie i ponowne przywrócenie również nie pomogło.

Jak mogę uruchomić bazę danych i działać? Spójność transakcyjna nie ma dla mnie znaczenia.

Automatycznie wygenerowany skrypt przywracania SSMS:

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

Wynik zapytania sugerowany przez @Craig Efrein

Nie można odbudować dziennika, ponieważ podczas zamykania bazy danych istniały otwarte transakcje / użytkownicy, nie wystąpił żaden punkt kontrolny ani baza danych była tylko do odczytu. Ten błąd może wystąpić, jeśli plik dziennika transakcji zostanie ręcznie usunięty lub utracony z powodu awarii sprzętu lub środowiska.


Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Paul White 9

Odpowiedzi:


2

Z komentarzy przeniesionych na czat, ta notatka z PO:

Właśnie próbowałem dołączyć go za pomocą GUI. Kiedy wybrałem plik .mdf, SSMS stwierdził, że baza danych składa się z 3 plików (danych, indeksu, dziennika), ale jakoś przywracałem Z MOVE, szczegóły bazy danych o ścieżce pliku mówiły, że to źle! Właśnie wskazałem im stary plik dziennika / danych / indeksu i ... Baza danych jest w trybie online.


-3

Przejdź do trybu pojedynczego użytkownika i przywróć.

przykład:
Pierwsze przywracanie korzysta z opcji NORECOVERY, więc można wykonać dodatkowe przywracanie. Drugie polecenie przywraca dziennik transakcji, a następnie przełącza bazę danych w tryb online do użytku użytkownika końcowego.

RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'
WITH RECOVERY
GO

1
Pytanie dotyczy pojedynczej instrukcji RESTORE DATABASE, nie jest przeprowadzane oddzielne przywracanie dziennika transakcji. Prawdopodobnie źródłowa baza danych i / lub plik kopii zapasowej jest uszkodzony.
Bryan,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.