Por padrão, todos RESTORE DATABASE
vêm com a RECOVERY
configuração. As opções 'NORECOVERY', basicamente informa ao SQL Server que o banco de dados está aguardando mais arquivos de restauração (pode ser um arquivo DIFF e um arquivo LOG e, pode incluir um arquivo de backup de log de cauda, se possível). As opções 'RECUPERAÇÃO', finalizam todas as transações e deixam o banco de dados pronto para realizar as transações.
Assim:
- se o seu banco de dados estiver configurado com o modelo de recuperação SIMPLE , você poderá executar uma restauração COMPLETA somente com a
NORECOVERY
opção quando tiver um backup DIFF . Nenhum backup de LOG é permitido no banco de dados do modelo de recuperação SIMPLE .
- Caso contrário, se o seu banco de dados estiver configurado com o modelo de recuperação COMPLETO ou BULK-LOGGED , você poderá executar uma restauração COMPLETA seguida pela
NORECOVERY
opção, executar um DIFF seguido por NORECOVERY
e, finalmente, executar a restauração LOG com a RECOVERY
opção
Lembre-se de que a última consulta de restauração deve ter RECOVERY
opção . Poderia ser uma maneira explícita ou não. Em termos de T-SQL, a situação:
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
A opção WITH REPLACE deve ser usada com cautela, pois pode levar à perda de dados
Ou, se você executar um backup COMPLETO e DIFF, poderá usar este
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
Obviamente, você pode executar uma restauração com a opção STATS = 10 que instrui o SQL Server a relatar a cada 10% concluído.
Se preferir, você pode observar o processo ou restaurar em consultas baseadas em tempo real. Como se segue:
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
Espero que esta ajuda.
DROP DATABASE db
comando através do SSMS e funcionou (anteriormente eu estava usando o SSMS de outra máquina para emitir os comandos). Eu estou supondo que as outras soluções teriam funcionado também.