Identifier la cause première du blocage de la base de données à l'état RESTAURATION


10

Je sais qu'il y a des questions qui résolvent le problème d'une base de données bloquée RESTORINGet 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 CHECKDBsur 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 .


1
Vous pouvez obtenir la réponse à partir des journaux SQL Server et de l'observateur d'événements, avez-vous vérifié?. Existe-t-il un problème d'espace, car cela peut entraîner le blocage de l'état de restauration. Vérifiez-vous l'intégrité de la sauvegarde avant de restaurer? Comment est votre sous
Shanky

@Shanky Je vais les consulter, bien que je n'aie pas directement accès à ces informations (je dois me familiariser avec mon administrateur SAN). L'intégrité de la sauvegarde est définie pour être vérifiée lors de la sauvegarde et lors de l'écriture sur le disque.
Radu Gheorghiu

1
Que dit le journal des erreurs de SQL Server? Essayez de lancer EXEC sys.xp_readerrorlog 0,1;- recherchez des messages au moment de l'opération de restauration.
Max Vernon

@MaxVernon Le journal des erreurs à partir du moment où la restauration s'est produite . J'ai vérifié le message d'erreur et il semble recommander de vérifier l'espace disque, ce qui est suffisant. Je vais creuser plus profondément et voir ce que je peux trouver, mais d'un coup d'œil, cela pourrait s'étendre beaucoup et m'obliger à regarder beaucoup de choses .
Radu Gheorghiu du

Réponses:


8

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.)


Merci Brent, voici de bonnes lignes directrices! Je reviendrai avec une mise à jour quand j'aurai plus d'infos, pour le moment la DB va bien, je verrai ce qui se passera quand le processus recommencera demain matin.
Radu Gheorghiu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.