web-dev-qa-db-fra.com

Le processus "TASK MANAGER" reprend une base de données en mode mono-utilisateur. Qu'Est-ce que c'est?

Ceci est un double de la question que j'ai posée sur stackoverflow , mais on m'a dit que quelqu'un ici pourrait avoir une meilleure idée de ce qui se passe.

J'ai un problème sporadique, lors de la mise à niveau de SQL Server en mode mono-utilisateur, à l'aide de .NET SqlConnection, une autre application se connecte en quelque sorte à la base de données, tandis que le code SQL est en cours d'exécution et lance mon processus. SqlConnection n'est pas fermé ou éliminé de quelque façon que ce soit. Mais une autre application se retrouve en quelque sorte connectée à la base de données et cela met fin à ma connexion.

Lorsque j'exécute sp_who, je pouvais voir qu'un processus qui prenait le contrôle de la base de données était Command = "TASK MANAGER".

N'importe qui pourrait me dire quel est ce processus, quel est son objectif et comment, dans le monde, il pourrait entrer dans une base de données, qui est en mode mono-utilisateur, et il y a une connexion active?

13
galets

Je pense que le mystère enfin résol :

Avant de définir la base de données sur SINGLE_USER, vérifiez que l'option AUTO_UPDATE_STATISTICS_ASYNC est définie sur OFF. Lorsqu'il est défini sur ON, le thread d'arrière-plan utilisé pour mettre à jour les statistiques prend une connexion avec la base de données et vous ne pourrez pas accéder à la base de données en mode mono-utilisateur.

6
galets

Eu le même problème aujourd'hui, si vous n'avez pas désactivé votre AUTO_UPDATE_STATISTICS ASYNC, vous ne pourrez pas entrer dans votre base de données, vous pouvez résoudre ce problème en mettant votre base de données hors ligne. Il est important de savoir que vous devez définir votre priorité de blocage sur élevé, sinon vous serez bloqué hors de la commande. Utilisez les commandes suivantes pour sortir du mode utilisateur UNIQUE

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

Suivi par

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

Suivi par

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE
10
Stijn Wynants

Arrêtez la trace des événements étendus "system_health". Il sera répertorié sous

SQL Server Management Studio
-> [ServerName]
-> Management
-> Extended Events
-> Right-Click on 'System_health'
-> Hit Stop Session

Une fois le bloqueur résolu, redémarrez la session.

6
Raghu Nair

Vous devez désactiver SQL Agent "avant" de démarrer le mode à usage unique. Comme le compte d'agent saisira l'accès utilisateur unique. N'oubliez pas que l'utilisateur unique n'est pas vous le premier utilisateur/processus à se connecter.

0
Nick Winstanley