web-dev-qa-db-fra.com

SQL Server affiche la base de données en cours de récupération

Aujourd'hui, après une panne de courant, une base de données (avec Recovery: full) affiche "In Recovery" dans SSMS. Donc:

myDatabase (En cours de récupération) (état de la base de données: récupération, arrêt)

Une fois terminé, le "processus de récupération" de la base de données affiche le nom myDatabase sans "(en cours de récupération)". Je pensais que le problème était résolu, mais ce n'était pas le cas.

Lorsque j'ai démarré l'application qui utilise cette base de données, le texte supplémentaire "(En cours de récupération)" apparaît à nouveau à côté du nom de ma base de données.

J'ai attendu la fin du "processus de récupération", puis j'ai mis la base de données hors ligne et l'ai remise en ligne.

J'ai redémarré le serveur, redémarré l'ordinateur et lorsque mon application était en cours d'exécution, le texte supplémentaire apparaît à nouveau. Dans les journaux SQL Server, le message "Démarrage de la base de données 'myDatabase'" apparaît plusieurs fois. Il semble que la base de données fonctionne parce que je peux insérer des données, mais l'état montre que quelque chose se produit.

Le journal du serveur ne montre rien d'intéressant. La seule chose anormale est que j'ai 30 entrées de "Démarrage de la base de données 'myDatabase'".

Je sais que lorsque le serveur démarre, chaque base de données passe par la récupération avant d'être prête à l'emploi. Mais dans mon cas, la base de données est mise en ligne puis affiche "myDatabase (In recovery)". Si je ferme l'application, la base de données passe à Status: Normal. Ça me rend fou.

J'ai même installé une nouvelle instance de SQL Server et y ai placé l'ancienne base de données "myDatabase". Le problème persiste.

Lorsque j'exécute cette requête:

SELECT databasepropertyex('nyDatabase', 'STATUS')

Il montre la récupération, en ligne, suspect et le retour en ligne, puis la récupération et ainsi de suite.

23
Andres

Réponse wiki communautaire initialement laissé comme une modification à la question par son auteur:

Le problème était que la propriété de base de données AutoClose était activée.

La solution consistait à définir AutoClose sur false.

2
user126897

Je ne sais pas si cela aiderait à résoudre le problème, mais vous pouvez essayer.

Courir:

RESTORE DATABASE YourDatabase WITH RECOVERY

Vérifiez si ce qui précède fait sortir la base de données du mode de récupération. Si ce n'est pas le cas, le problème peut être autre chose.

Pouvez-vous essayer la commande ci-dessous et voir si la base de données est corrompue?

DBCC CHECKDB ('YourDBname') WITH NO_INFOMSGS, ALL_ERRORMSGS

S'il détecte une corruption, vous souhaiterez peut-être réparer la base de données à l'aide de DBCC CHECKDB

16
RK Kuppala

Chaque fois que vous mettez une base de données en ligne, elle passe par un processus de récupération. Je suis cependant un peu confus par votre formulation du problème. Êtes-vous en train de voir la base de données entrer en récupération à tout moment autre que lorsque la base de données est mise hors ligne (soit à partir de votre panne de courant d'origine, soit par votre mise hors ligne puis à nouveau en ligne)? Si c'est le cas, la base de données se déconnecte pour une autre raison. Il est préférable de vérifier les journaux du serveur SQL pour voir ce qui se passe.

Vous devez également vérifier le journal des événements Windows pour quelque chose comme une panne de disque. La base de données ne doit pas démarrer ni entrer en restauration pendant les opérations normales.

6
Ben Thul