Mamy bardzo dużą bazę danych (~ 6 TB), której plik dziennika transakcji został usunięty (podczas gdy SQL Server był zamknięty. Próbowaliśmy:
- Odłączanie i ponowne podłączanie bazy danych; i
- Odzyskiwanie pliku dziennika transakcji
... ale jak dotąd nic nie działało.
Aktualnie prowadzimy:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... ale biorąc pod uwagę rozmiar bazy danych, prawdopodobnie zajmie to kilka dni.
pytania
Czy istnieje różnica między powyższym poleceniem a następnym?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Czy
REPAIR_ALLOW_DATA_LOSS
zamiast tego powinniśmy wykonywać ?
Warto zauważyć, że dane pochodzą z innych źródeł, więc baza danych może zostać odbudowana, jednak podejrzewamy, że naprawienie bazy danych będzie znacznie szybsze niż ponowne włożenie wszystkich danych.
Aktualizacja
Dla osób utrzymujących wynik: ALTER DATABASE/REBUILD LOG
polecenie zostało zakończone po około 36 godzinach i zgłoszono:
Ostrzeżenie: dziennik bazy danych „dbname” został odbudowany. Zagubiona została spójność transakcyjna. Łańcuch PRZYWRACANIA został zerwany, a serwer nie ma już kontekstu w poprzednich plikach dziennika, więc musisz wiedzieć, jakie były.
Powinieneś uruchomić DBCC CHECKDB, aby sprawdzić fizyczną spójność. Baza danych została ustawiona w tryb tylko dbo. Gdy będziesz gotowy udostępnić bazę danych do użytku, musisz zresetować opcje bazy danych i usunąć wszelkie dodatkowe pliki dziennika.
Następnie przeprowadziliśmy DBCC CHECKDB
(zajęło około 13 godzin), co było udane. Powiedzmy, że wszyscy nauczyliśmy się, jak ważne jest tworzenie kopii zapasowych baz danych (i udzielanie kierownikom projektów dostępu do serwera ...).