Les bases de données du serveur SQL bloquées en état de restauration

79

J'ai un serveur Sharepoint. Nous avons eu un problème avec notre outil de sauvegarde et maintenant certaines de mes bases de données sont bloquées en restauration!

Image montrant la restauration de bases de données

Est-il possible d'arrêter le processus de restauration? et aussi, comment puis-je m'assurer que l'intégrité de la base de données n'a pas été compromise?

Pooya Yazdani
la source

Réponses:

129

Cela est probablement dû à l'ajout du WITH NORECOVERYparamètre par le script de restauration , afin que la base de données soit prête pour un journal des transactions à appliquer après la restauration.

La base de données attend maintenant le dernier fichier journal des transactions.

Vous pouvez soit:

  1. Appliquez le dernier journal des transactions en utilisant RESTORE LOG database_name FROM backup_device WITH RECOVERY;... ou
  2. Restaurez la base de données à nouveau, mais cette fois en utilisant ... WITH RECOVERY;... ou
  3. Forcez la base de données hors du mode restauration en exécutant: RESTORE DATABASE YourDb WITH RECOVERY;

Avant de faire cela, assurez-vous de bien comprendre les implications de ces options. Vous pouvez provoquer une perte de données si vous ne faites pas attention.

Voir ceci pour plus de détails:

Thomas Kejser
la source
Lorsque ceux-ci ne fonctionnent pas, consultez dba.stackexchange.com/questions/11175/… - à nouveau, BEAUCOUP DE MISES EN GARDE DE DOOM si vous ne savez pas ce que vous faites et comprenez tous les risques de perte de données. Mais si vous êtes sur un serveur non productif, vous disposez de bonnes sauvegardes pour effectuer une restauration récente, et vous pouvez vous permettre de redémarrer SQL sur ledit serveur. Cela fonctionne.
NateJ
6
"Forcez la base de données à quitter le mode restauration en exécutant: RESTORE DATABASE YourDb WITH RECOVERY". 20 minutes de services de gratte-tête et de redémarrage, puis de réparation avec une doublure. Merci!
Echilon
2
J'étais coincé avec la même situation que ma boîte de dev. L'option 3 a fonctionné comme un charme!
Moiz Tankiwala
J'ai essayé de restaurer une base de données à partir de .bak dans une nouvelle base de données, mais j'ai oublié de changer les noms de fichier sur le disque. La restauration a échoué, non pas parce que les fichiers étaient utilisés par une base de données existante, mais par une autre erreur. Cela a gâché la base de données existante (bloqué dans l'état de restauration). # 3 le remettre en ligne en une seconde et vérifier les données tout va bien. Merci!
CoDEmanX
44

Script T-SQL simple pour résoudre ce problème:

écrivez ce script dans la fenêtre New Query et exécutez:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;
Sina
la source
RESTORE DATABASE [nom_base_de_données] WITH RECOVERY .... Fonctionne parfaitement pour moi. Je vous remercie!
10
Faites très attention à comprendre les implications de cela. Si la base de données attend une restauration du journal, cela pourrait entraîner une perte considérable de données.
David Spillett
2
Ne fonctionne pas à cause d'une erreur. "La base de données ne peut pas être récupérée car le journal n'a pas été restauré."
Ian Boyd
0

Je viens d'avoir cette situation, et le remède était assez surprenant:

ALTER DATABASE DBName SET ONLINE;

Apparemment, la restauration NetBackup qui a éclaté l'a laissé dans un état étrange. Aucune autre solution n'a fonctionné (bien que je n'aie pas encore essayé de redémarrer le service SQL Server)

Je ferais attention à la base de données, cependant, car théoriquement, une fois qu'une restauration a commencé, elle a ensuite échoué, vous pourriez avoir des données corrompues. De toute façon, je vais simplement restaurer la base de données, donc cela ne m'importe pas.

ErikE
la source
Si la réponse à cette question est incorrecte, si vous essayez de définir une base de données en cours de «restauration» en ligne, vous obtiendrez le message d'erreur «ALTER DATABASE n'est pas autorisé tant qu'une base de données est à l'état de restauration».
James Jenkins
Peut-être que vous ne savez pas comment sur StackOverflow, nous répondons parfois à des questions légèrement différentes de celle posée. Cela apporte de la valeur car les gens se posent souvent des questions similaires aux leurs après une recherche en ligne. En ce qui concerne votre allégation factuelle au sujet ALTER DATABASEne sont pas permis, je vous assure que dans mon cas, la base de données était en fait montrant que dans le rétablissement de l' état, et en utilisant SET ONLINEen fait travaillé . Alors, sachez que vous m'appelez être trompé ou mentir. Est-ce ce que vous devez vraiment faire quand une alternative est disponible?
ErikE
@JamesJenkins Et quelle est cette alternative? L’alternative est l’hypothèse selon laquelle une base de données pourrait indiquer une restauration d’état mais pas une restauration. Ou bien cela pourrait être à la dernière étape de la restauration, avec la restauration réellement terminée afin qu'elle puisse être définie sur ONLINEstate. En résumé, je pense que votre commentaire et votre vote négatif sont déplacés pour ce site et que vos informations sont incorrectes sur le plan des faits car ils ne sont pas correctement qualifiés avec les données que j'ai présentées.
ErikE
0

Comme nous le savons, l'option de restauration de base de données par défaut est avec récupération, ce qui garantit que la base de données est disponible et en ligne pour utilisation après la restauration de la base de données.

Exemple:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

Voyons les points importants de la restauration sans récupération

  • La base de données n'est pas utilisable
  • Reste en mode restauration
  • La prochaine séquence de restauration peut être effectuée
  • N'annule aucune transaction non validée

Restaurer avec NoRecovery

Cette option est particulièrement utilisée lorsque plusieurs sauvegardes doivent être restaurées. Cela signifie que, lorsque vous exécutez la commande de restauration avec l'option norecovery, la base de données n'est transmise aux utilisateurs que lorsque la dernière sauvegarde de la séquence a été restaurée. Avec la dernière sauvegarde, l'option de récupération est utilisée et la base de données est en ligne.

Exemple:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

Puis:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO
Priyanka
la source
1
Vous pourriez avoir une faute de frappe dans votre réponse. La section intitulée ... à propos de la restauration avec récupération répertorie toutes les options qui s'appliquent à l' RESTORE ...WITH NORECOVERYoption. Pourriez-vous vérifier cela?
John aka hot2use