Après avoir cliqué sur "Mettre la base de données hors ligne" dans le studio de gestion, ce message reste bloqué et ne se ferme pas si vous cliquez sur Fermer.
Quelle est la bonne façon de gérer des emplois bloqués comme ceux-ci dans le studio de gestion? Pouvez-vous les tuer via le moniteur d'activité? Dois-je rechercher quel processus empêche ce travail de se terminer et y mettre fin?
sql-server
ssms
UN V
la source
la source
ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
abord ... sinon, il reste simplement en attente et, pour une base de données occupée, cela peut durer éternellement.Réponses:
Je dirais de ne jamais utiliser la fonction "Take Offline" dans l'interface graphique, sauf si vous savez avec certitude que la base de données n'est pas utilisée. Par n'importe quoi. C'est difficile à savoir sans faire quelques démarches, alors pourquoi ne pas enregistrer ce script quelque part et toujours l'utiliser?
Et puis l'inverse bien sûr:
La raison pour laquelle vous devez d'abord le définir
SINGLE_USER
est de supprimer tous les utilisateurs existants (il existe une option pour le faire dans la boîte de dialogue de détachement, mais pas la boîte de dialogue de mise hors ligne), car SQL Server a besoin d'un accès exclusif à la base de données pour prendre hors ligne. Maintenant, vous voudrez peut-être faire quelques travaux supplémentaires de toute façon pour voir qui utilise actuellement la base de données, comme si vous le faisiez au milieu d'une opération de sauvegarde importante ou d'un travail ETL ou quoi d'autre, cela pourrait être problématique.EDIT : J'ai déposé une suggestion sur Connect à ce sujet (voir Connect # 2687832 ) et je l'ai également publiée sur Trello (classée sous "Object Explorer").
la source
Lorsque vous êtes déjà dans une situation de blocage, n'oubliez pas que vous pouvez rechercher des connexions ouvertes sur le serveur avec
dans une autre base de données, comme master.
Analysez les résultats pour tout endroit où la base de données est celle que vous essayez de mettre hors ligne.
Notez la valeur de la colonne spid (process id) de ces lignes.
Un à la fois, exécutez
où "##" est le spid.
Assurez-vous certainement que ces processus ne sont pas importants pour rester en cours d'exécution ... ils seront arrêtés sans même terminer la dernière commande et sans avertissement.
la source