Domyślnie każdy RESTORE DATABASE
jest dostarczany z RECOVERY
konfiguracją. Opcje „NORECOVERY” w zasadzie informują SQL Server, że baza danych czeka na więcej plików przywracania (może to być plik DIFF i LOG plik oraz, jeśli to możliwe, zawierać plik kopii zapasowej dziennika ogona). Opcje „ODZYSKIWANIE” kończą wszystkie transakcje i pozwalają bazie danych na wykonanie transakcji.
Więc:
- jeśli twoja baza danych jest skonfigurowana z modelem odzyskiwania SIMPLE , możesz wykonać PEŁNE przywracanie tylko z
NORECOVERY
opcją, jeśli masz kopię zapasową DIFF . Nie LOG zapasowej są dozwolone w SIMPLE bazie modelu odzyskiwania.
- W przeciwnym razie, jeśli baza danych jest skonfigurowana z PEŁNYM lub rejestrowane zbiorczej model odzyskiwanie, można przeprowadzić PEŁEN przywracania następnie
NORECOVERY
opcji, a następnie wykonać DIFF następnie NORECOVERY
, i, w końcu, należy wykonać ZALOGUJ przywrócić z RECOVERY
opcją.
Pamiętaj, OSTATNIE ZAPYTANIE PRZYWRACANE MUSI MIEĆ RECOVERY
OPCJĘ . Może to być sposób jawny lub nie. W przypadku T-SQL sytuacja:
1.
USE [master]
GO
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD,
RECOVERY -- This option could be omitted.
GO
Z opcją Z WYMIANA należy używać ostrożnie, ponieważ może to prowadzić do utraty danych
Lub, jeśli wykonujesz kopię zapasową FULL i DIFF, możesz jej użyć
USE [master]
GO
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1,
NOUNLOAD,NORECOVERY
GO
RESTORE DATABASE Database_name
FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1,
NOUNLOAD, RECOVERY
GO
2. USE [master]
GO
-- Perform a Tail-Log backup, if possible.
BACKUP LOG Database_name
GO
-- Restoring a FULL backup
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1,
NOUNLOAD,NORECOVERY
GO
-- Restore the last DIFF backup
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
NORECOVERY,NOUNLOAD
GO
-- Restore a Log backup
RESTORE LOG Database_name
FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
RECOVERY, NOUNLOAD
GO
Oczywiście możesz wykonać przywracanie z opcją STATS = 10 która informuje SQL Server o raportowaniu co 10% ukończenia.
Jeśli wolisz, możesz obserwować proces lub przywracać w zapytaniu w czasie rzeczywistym. Następująco:
USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO
Mam nadzieję, że to pomoże.
DROP DATABASE db
polecenie za pośrednictwem SSMS i zadziałało (wcześniej używałem SSMS z innego komputera do wydawania poleceń). Domyślam się, że inne rozwiązania również by zadziałały.