Jeśli pojawi się błąd, który brzmi Instrukcja BACKUP LOG jest niedozwolona, gdy model odzyskiwania jest PROSTY gdy próbujesz wykonać kopię zapasową bazy danych w SQL Server lub Azure SQL Edge, dzieje się tak, ponieważ próbujesz wykonać kopię zapasową dzienników transakcji w bazie danych, która korzysta z prostego modelu odzyskiwania.
Aby to naprawić, zmień model odzyskiwania na pełne lub zbiorcze rejestrowanie.
Błąd
Oto przykład kodu T-SQL, który powoduje błąd:
BACKUP LOG Music
TO DISK = '/var/opt/mssql/backups/Music.trn';
Wynik:
Msg 4208, Level 16, State 1, Line 1 The statement BACKUP LOG is not allowed while the recovery model is SIMPLE. Use BACKUP DATABASE or change the recovery model using ALTER DATABASE.
Przyczyna
Jak wspomniano, błąd jest powodowany podczas próby wykonania kopii zapasowej dzienników transakcji w bazie danych, która korzysta z prostego modelu odzyskiwania.
Prosty model odzyskiwania nie obsługuje kopii zapasowych dziennika.
Rozwiązanie
Aby rozwiązać ten problem, ustaw model odzyskiwania bazy danych na FULL
lub BULK_LOGGED
:
USE master;
ALTER DATABASE Music
SET RECOVERY FULL;
W tym przykładzie baza danych została ustawiona w tryb pełnego odzyskiwania.
Jednak przed rozpoczęciem tworzenia kopii zapasowych dzienników transakcji konieczne będzie wykonanie co najmniej jednej pełnej kopii zapasowej bazy danych. Jeśli tego nie zrobisz, otrzymasz błąd 4214, który stwierdza, że LOGU KOPII ZAPASOWEJ nie można wykonać, ponieważ nie ma bieżącej kopii zapasowej bazy danych .
Oto przykład wykonania pełnej kopii zapasowej bazy danych:
BACKUP DATABASE Music
TO DISK = '/var/opt/mssql/backups/Music.bak'
WITH FORMAT;
Teraz można wykonać kopię zapasową dzienników transakcji zgodnie z wymaganiami:
BACKUP LOG Music
TO DISK = '/var/opt/mssql/backups/Music.trn';
Wynik:
Processed 3 pages for database 'Music', file 'Music_log' on file 1.
Korzystasz z Azure SQL Edge?
Jeśli korzystasz z usługi Azure SQL Edge, może się okazać, że ten problem występuje często. Dzieje się tak prawdopodobnie dlatego, że bazy danych utworzone za pomocą SQL Edge domyślnie korzystają z prostego modelu odzyskiwania. A to dlatego, że model
baza danych używa prostego modelu odzyskiwania.
Zawsze możesz zmienić model odzyskiwania na model
baza danych do FULL
, co spowoduje, że kolejne bazy danych będą domyślnie korzystać z pełnego trybu odzyskiwania.