Je sais qu'il y a des questions qui résolvent le problème d'une base de données bloquée RESTORING
et j'ai utilisé ces solutions pour remettre manuellement la base de données en ligne, mais mon scénario est quelque peu différent.
J'ai une restauration automatisée à l'aide de scripts Powershell qui restaure une copie de la production sur une instance DEV. Les scripts sont inchangés pendant environ un an et parfois le processus de restauration se termine mais la base de données restaurée est bloquée RESTORING
(parfois le script fonctionne bien, parfois il échoue comme ça).
Chaque fois que si je réexécute manuellement le processus, il fonctionne ou si je restaure manuellement la base de données à partir de l'interface utilisateur de SSMS ou via T-SQL, il se termine sans problème.
J'ai trouvé des réponses qui recommandaient de s'exécuter CHECKDB
sur la base de données restaurée mais rien n'est sorti comme cause de ce problème.
Étant donné que les scripts de restauration restaurent une sauvegarde complète de la base de données et utilisent une "WITH RECOVERY"
option, j'essaie de savoir ce qui pourrait arrêter le processus de restauration, bien que je le restaure en utilisant "WITH RECOVERY"
.
Toutes les suggestions sont vraiment appréciées car je suis coincé à essayer de comprendre pourquoi cela se produit de temps en temps.
J'aimerais beaucoup résoudre la cause première du problème plutôt que de traiter les symptômes, qui consiste à restaurer manuellement la base de données une fois de plus.
Mettre à jour:
Github Gist comme @Brent recommandé - ici .
la source
EXEC sys.xp_readerrorlog 0,1;
- recherchez des messages au moment de l'opération de restauration.Réponses:
Le rasoir d'Occam suggère de commencer par l'évidence:
Si votre script laisse parfois une base de données en état de restauration, alors déboguez le script.
Commencez par enregistrer ce que vous faites dans une table ou un fichier. Ensuite, lorsque vous vous retrouvez avec la base de données en état de restauration, parcourez vos journaux pour voir ce qui s'est mal passé. (Si vous voulez un deuxième regard de la communauté, essayez de télécharger votre script en tant que Github Gist, mais gardez à l'esprit que plus il est gros, plus il peut être difficile pour les gens de repérer les bogues.)
Si vous ne voulez pas faire cela, essayez d'exécuter une trace Profiler ou Extended Events pour suivre les événements de restauration, mais soyez averti - c'est beaucoup plus difficile qu'il n'y paraît. (Lisez les commentaires sur ce post pour encore plus d'idées de lecteurs qu'ils ont essayées et échouées.)
la source