Por defecto, todo RESTORE DATABASE
viene con la RECOVERY
configuración. Las opciones de 'NORECOVERY', básicamente le dicen al SQL Server que la base de datos está esperando más archivos de restauración (podría ser un archivo DIFF y un archivo LOG y, si es posible, podría incluir un archivo de respaldo de registro de cola). Las opciones de 'RECUPERACIÓN' finalizan todas las transacciones y dejan la base de datos lista para realizar transacciones.
Entonces:
- si su base de datos está configurada con el modelo de recuperación SIMPLE , solo puede realizar una restauración COMPLETA con la
NORECOVERY
opción, cuando tiene una copia de seguridad DIFF . No se permiten copias de seguridad de LOG en la base de datos del modelo de recuperación SIMPLE .
- De lo contrario, si su base de datos está configurada con un modelo de recuperación COMPLETO o REGISTRO A GRANEL , puede realizar una restauración COMPLETA seguida de la
NORECOVERY
opción, luego realizar un DIFF seguido de NORECOVERY
y, por último, realizar la restauración del LOG con la RECOVERY
opción.
Recuerde, LA ÚLTIMA CONSULTA DE RESTAURACIÓN DEBE TENER RECOVERY
OPCIÓN . Podría ser una forma explícita o no. En términos de T-SQL, la situación:
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
La opción CON REEMPLAZO debe usarse con precaución ya que puede conducir a la pérdida de datos
O, si realiza una copia de seguridad COMPLETA y DIFF, puede usar esto
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
Por supuesto, puede realizar una restauración con la opción STATS = 10 que le dice al SQL Server que informe cada 10% completado.
Si lo prefiere, puede observar el proceso o restaurar en una consulta basada en tiempo real. De la siguiente manera:
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 esto ayude.
DROP DATABASE db
comando a través de SSMS y funcionó (anteriormente estaba usando SSMS desde otra máquina para emitir los comandos). Supongo que las otras soluciones también habrían funcionado.