Temps d’attente extrême lors de la mise hors ligne d’une firebase database SQL Server

J’essaie d’effectuer une maintenance hors connexion (restauration de la firebase database de développement à partir de la sauvegarde en direct) sur ma firebase database de développement, mais la commande «Take Offline» via SQL Server Management Studio fonctionne extrêmement lentement, de l’ordre de 30 minutes. Je suis à peu près à mes esprits et je n’arrive pas à trouver des références en ligne sur ce qui pourrait causer le problème de vitesse, ou comment y remédier.

Certains sites ont suggéré que les connexions ouvertes à la firebase database provoquent ce ralentissement, mais la seule application qui utilise cette firebase database est l’instance IIS de ma machine dev et le service est arrêté – il n’y a plus de connexions ouvertes.

Qu’est-ce qui pourrait causer ce ralentissement et que puis-je faire pour l’accélérer?

Après quelques recherches supplémentaires (nouveaux termes de recherche inspirés de la réponse de gbn et du commentaire de u07ch sur la réponse de KMike), j’ai trouvé ceci, qui s’est terminé avec succès en 2 secondes:

ALTER DATABASE  SET OFFLINE WITH ROLLBACK IMMEDIATE 

(Mettre à jour)

Lorsque cela échoue toujours avec l’erreur suivante, vous pouvez corriger le problème en s’inspirant de cet article :

ALTER DATABASE a échoué car un verrou n’a pas pu être placé sur la firebase database ‘dbname’ Réessayez plus tard.

vous pouvez exécuter la commande suivante pour savoir qui garde un verrou sur votre firebase database:

 EXEC sp_who2 

Et utilisez le SPID vous trouvez dans la commande suivante:

 KILL  

Ensuite, exécutez à nouveau la commande ALTER DATABASE . Cela devrait maintenant fonctionner.

Il y a très probablement une connexion à la firebase database à partir de quelque part (un exemple rare: mise à jour statistique asynchrone )

Pour rechercher des connexions, utilisez sys.sysprocesses

 USE master SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB') 

Pour forcer les déconnexions, utilisez ROLLBACK IMMEDIATE

 USE master ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

Avez-vous des fenêtres SQL Server Management Studio ouvertes connectées à cette firebase database?

Mettez-le en mode utilisateur unique, puis réessayez.

En ce qui me concerne, après avoir tant attendu pour que ça se termine, je n’avais pas la patience et simplement un studio de gestion fermé. Avant de quitter, il affiche le message de réussite, db est hors ligne. Les fichiers étaient disponibles pour être renommés.

Dans SSMS: cliquez avec le bouton droit sur l’icône du serveur SQL, Moniteur d’activité. Processus ouverts Trouvez le traité connecté. Cliquez avec le bouton droit sur le processus, Kill.

exécuter la procédure stockée sp_who2

Cela vous permettra de voir s’il y a des verrous bloquants.

Chaque fois que vous rencontrez ce type de chose, vous devez toujours penser à votre journal de transactions. Le statment alter db avec rollback immediate indique que c’est le cas. Vérifiez ceci: http://msdn.microsoft.com/en-us/library/ms189085.aspx

Détectez les points de contrôle, etc. Vous devez décider si les transactions de votre journal valent la peine d’être sauvegardées ou non, puis choisissez le mode d’exécution de votre firebase database en conséquence. Il n’y a vraiment aucune raison pour que vous ayez à attendre, mais aussi aucune raison pour que vous perdiez des données non plus – vous pouvez avoir les deux.

Pour contourner ce problème, j’ai arrêté le site Web qui était connecté à la firebase database dans IIS et immédiatement le panneau «gelé» «take db offline» est devenu gelé.

La fermeture de l’instance de SSMS (SQL Service Manager) à partir de laquelle la requête a été faite a résolu le problème pour moi …..

Dans mon cas, j’avais regardé quelques tables dans la firebase database avant d’exécuter cette action. Mon compte d’utilisateur détenait une connexion active à cette firebase database dans SSMS. Une fois que je me suis déconnecté du serveur dans SSMS (en laissant ouverte la boîte de dialog ‘Take database offline’), l’opération a réussi.

Fermez également toutes les fenêtres de requête éventuellement ouvertes connectées à la firebase database en question;)

Dans SSMS, définissez la firebase database en lecture seule, puis en arrière. Les connexions seront fermées, ce qui libère les serrures.

Dans mon cas, il y avait un site Web ayant des connexions ouvertes à la firebase database. Cette méthode était assez facile:

  1. Cliquez avec le bouton droit sur la firebase database -> Propriétés -> Options
  2. Définir la Database Read-Only sur True
  3. Cliquez sur “Oui” dans la boîte de dialog d’avertissement SQL Server fermera toutes les connexions à la firebase database.
  4. Rouvrez les options et désactivez la lecture seule
  5. Maintenant, essayez de renommer la firebase database ou de la déconnecter.

Pour moi, je devais simplement aller dans le moniteur d’activité du travail et arrêter deux choses en cours de traitement. Ensuite, il s’est déconnecté immédiatement. Dans mon cas, cependant, je savais ce que ces deux processus étaient et qu’il était correct de les arrêter.

Dans mon cas, j’ai arrêté le serveur Tomcat. alors immédiatement la firebase database s’est déconnectée.

Dans mon cas, la firebase database était liée à une ancienne installation Sharepoint. L’arrêt et la désactivation des services associés dans le gestionnaire de serveur ont permis de “libérer” l’action en mode hors connexion, qui avait duré 40 minutes et s’est terminée immédiatement.

Vous souhaiterez peut-être vérifier si des services utilisent actuellement la firebase database.