Il processo "TASK MANAGER" sta rilevando un database in modalità utente singolo. Che cos'è?


13

Questo è un duplicato della domanda che ho posto su StackOverflow , ma mi è stato consigliato che qualcuno qui potrebbe avere un'idea migliore di ciò che sta accadendo.

Ho un problema sporadico, quando aggiorno SQL Server in modalità utente singolo, usando .NET SqlConnection, alcune altre applicazioni accedono in qualche modo al database, mentre il codice SQL viene eseguito e avvia il mio processo. SqlConnection non è chiuso o eliminato in alcun modo. Ma qualche altra applicazione finisce in qualche modo connessa al database e questo mi dà il via.

Quando eseguo sp_who, ho potuto vedere che un processo che ha preso il controllo del database è Command = "TASK MANAGER".

Qualcuno potrebbe dirmi che cos'è questo processo, qual è il suo scopo e come nel mondo potrebbe entrare in un database, che è in modalità utente singolo, e c'è una connessione attiva?


Chiudi SQL Agent durante questo processo? Le attività denominate "TASK MANAGER" (con numeri spid bassi) sono processi interni.
Jon Seigel,

@JonSeigel no, non l'ho fatto. Stai dicendo che SQL Agent è un processo reale che esegue TASK MANAGER?
saluta l'

Non ne sono sicuro al 100%. Quello che so è che SQL Agent si connette all'istanza quando è in esecuzione e ciò può impedirti di accedere mentre il server è in modalità utente singolo. Ho avuto quel problema ieri e l'arresto di SQL Agent l'ha risolto.
Jon Seigel,

2
Giusto per essere chiari, questo non è lo stesso Task Manager che usi in Windows per visualizzare i processi e le prestazioni del sistema.
Aaron Bertrand

Risposte:


10

Ha avuto lo stesso problema oggi. Se non hai disattivato AUTO_UPDATE_STATISTICS ASYNC, non sarai in grado di accedere al tuo database, puoi risolverlo mettendo offline il database. È importante sapere che è necessario impostare la priorità di deadlock su alta, altrimenti si verrà bloccati dal comando. Utilizzare i seguenti comandi per uscire dalla modalità utente SINGOLO

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

Seguito da

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

Seguito da

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE

3
Grazie molte per questo. Tuttavia ho scoperto che il passaggio OFFLINE / ONLINE non era richiesto; ha SET MULTIUSER WITH ROLLBACK IMMEDIATEfunzionato da solo quando è SET DEADLOCK_PRIORITY HIGHstato fatto per primo
Ross Presser

6

Penso che il mistero sia stato finalmente risolto :

Prima di impostare il database su SINGLE_USER, verificare che l'opzione AUTO_UPDATE_STATISTICS_ASYNC sia impostata su OFF. Se impostato su ON, il thread in background utilizzato per aggiornare le statistiche prende una connessione al database e non sarà possibile accedere al database in modalità utente singolo.


6

Arresta la traccia degli eventi estesi "system_health". Sarà elencato sotto

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

Una volta risolti i blocchi, riavvia la sessione.


Sebbene l'altra risposta spieghi perché ciò accada, questa spiega come risolverlo.
Boris Callens,

Risoluzione perfetta per me. Funzionava come previsto
Im88,

0

È necessario disabilitare "prima" di SQL Agent l'avvio della modalità monouso. Come agente accout afferrerà l'accesso per singolo utente. Ricorda il singolo utente non sei tu il primo utente / processo a connettersi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.