Par défaut, tout RESTORE DATABASE
est livré avec la RECOVERY
configuration. Les options «NORECOVERY» indiquent essentiellement à SQL Server que la base de données attend plus de fichiers de restauration (peut être un fichier DIFF et un fichier LOG et, si possible, inclure un fichier de sauvegarde du journal de fin). Les options 'RECOVERY', terminent toutes les transactions et laissent la base de données prête à effectuer des transactions.
Donc:
- si votre base de données est configurée avec le modèle de récupération SIMPLE , vous ne pouvez effectuer une restauration COMPLÈTE avec
NORECOVERY
option que lorsque vous disposez d'une sauvegarde DIFF . Aucune sauvegarde de LOG n'est autorisée dans la base de données du modèle de récupération SIMPLE .
- Sinon, si votre base de données est configurée avec le modèle de récupération FULL ou BULK-LOGGED , vous pouvez effectuer une restauration FULL suivie d'une
NORECOVERY
option, puis effectuer un DIFF suivi NORECOVERY
et enfin, effectuer une restauration LOG avec RECOVERY
option.
N'oubliez pas, LA DERNIÈRE REQUÊTE DE RESTAURATION DOIT AVOIR UNE RECOVERY
OPTION . Cela pourrait être explicite ou non. Dans les thermes de T-SQL, la situation:
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
L'option WITH REPLACE doit être utilisée avec prudence car elle peut entraîner une perte de données
Ou, si vous effectuez une sauvegarde COMPLÈTE et DIFF, vous pouvez utiliser ceci
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
Bien sûr, vous pouvez effectuer une restauration avec l'option STATS = 10 qui indique à SQL Server de signaler tous les 10% achevés.
Si vous préférez, vous pouvez observer le processus ou restaurer dans une requête en temps réel. Comme suit:
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
J'espère que cette aide.
DROP DATABASE db
commande via SSMS et cela a fonctionné (auparavant, j'utilisais SSMS d'une autre machine pour émettre les commandes). Je suppose que les autres solutions auraient également fonctionné.