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.
Odpowiedzi:
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.
źródło
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.
źródło