it-swarm.com.de

Der Prozess "TASK MANAGER" übernimmt eine Datenbank im Einzelbenutzermodus. Was ist es?

Dies ist ein Duplikat der Frage, die ich zu stackoverflow gestellt habe, aber mir wurde geraten, dass jemand hier eine bessere Vorstellung davon haben könnte, was passiert.

Ich habe ein sporadisches Problem, wenn ich ein Upgrade von SQL Server in einem Einzelbenutzermodus mit .NET SqlConnection durchführe. Eine andere Anwendung meldet sich irgendwie bei der Datenbank an, während der SQL-Code ausgeführt wird, und startet meinen Prozess. SqlConnection wird in keiner Weise geschlossen oder entsorgt. Aber eine andere Anwendung ist irgendwie mit der Datenbank verbunden und das bringt meine Verbindung zum Erliegen.

Wenn ich sp_who ausführe, kann ich sehen, dass ein Prozess, der die Kontrolle über die Datenbank übernommen hat, Command = "TASK MANAGER" ist.

Jeder kann mir sagen, was dieser Prozess ist, wozu er dient und wie in aller Welt er in eine Datenbank gelangen kann, die sich im Einzelbenutzermodus befindet und eine aktive Verbindung besteht.

13
galets

Ich denke das Rätsel wurde endlich gelöst :

Bevor Sie die Datenbank auf SINGLE_USER setzen, überprüfen Sie, ob die Option AUTO_UPDATE_STATISTICS_ASYNC auf OFF gesetzt ist. Wenn diese Option auf ON gesetzt ist, stellt der zum Aktualisieren von Statistiken verwendete Hintergrundthread eine Verbindung zur Datenbank her, und Sie können im Einzelbenutzermodus nicht auf die Datenbank zugreifen.

6
galets

Hatte heute das gleiche Problem: Wenn Sie Ihren AUTO_UPDATE_STATISTICS ASYNC nicht ausgeschaltet haben, können Sie Ihre Datenbank nicht eingeben. Sie können dies lösen, indem Sie Ihre Datenbank offline schalten. Es ist wichtig zu wissen, dass Sie Ihre Deadlock-Priorität auf hoch setzen müssen, da Sie sonst vom Befehl ausgeschlossen werden. Verwenden Sie die folgenden Befehle, um den EINZELNEN Benutzermodus zu verlassen

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

Gefolgt von

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

Gefolgt von

SET DEADLOCK_PRIORITY HIGH

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

Stoppen Sie die erweiterte Ereignisablaufverfolgung "system_health". Es wird unter aufgeführt

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

Starten Sie die Sitzung neu, sobald die Blocker behoben sind.

6
Raghu Nair

Sie müssen SQL Agent deaktivieren, bevor Sie den Einwegmodus starten. Da das Agentenkonto den Einzelbenutzerzugriff erhält. Denken Sie daran, dass der einzelne Benutzer nicht der erste Benutzer/Prozess ist, der eine Verbindung herstellt.

0
Nick Winstanley