El proceso de "TASK MANAGER" se está haciendo cargo de una base de datos en modo de usuario único. ¿Qué es?


13

Este es un duplicado de la pregunta que hice en stackoverflow , pero me dijeron que alguien aquí podría tener una mejor idea de lo que está sucediendo.

Tengo un problema esporádico, cuando actualizo SQL Server en un modo de usuario único, usando .NET SqlConnection, alguna otra aplicación inicia sesión de alguna manera en la base de datos, mientras se ejecuta el código SQL, y elimina mi proceso. SqlConnection no está cerrado ni dispuesto de ninguna manera. Pero alguna otra aplicación termina de alguna manera conectada a la base de datos y eso elimina mi conexión.

Cuando ejecuto sp_who, pude ver que un proceso que tomó el control de la base de datos es Command = "TASK MANAGER".

Cualquiera podría decirme en qué consiste este proceso, cuál es su propósito y cómo podría ingresar en una base de datos, que está en modo de usuario único, y hay una conexión activa.


¿Apaga el Agente SQL durante este proceso? Las tareas denominadas "TASK MANAGER" (con números spid bajos) son procesos internos.
Jon Seigel

@ JonSeigel no, no lo hice. ¿Estás diciendo que el Agente SQL es un proceso real que ejecuta TASK MANAGER?
galets

No estoy 100% seguro. Lo que sí sé es que el Agente SQL se conecta a la instancia cuando se está ejecutando, y esto puede evitar que inicie sesión mientras el servidor está en modo de usuario único. Tuve ese problema ayer, y la detención del Agente SQL lo solucionó.
Jon Seigel

2
Para que quede claro, este no es el mismo Administrador de tareas que usa en Windows para ver los procesos y el rendimiento del sistema.
Aaron Bertrand

Respuestas:


10

Tuve el mismo problema hoy: si no ha APAGADO su AUTO_UPDATE_STATISTICS ASYNC, no podrá ingresar a su base de datos, puede resolver esto poniendo su base de datos fuera de línea. Es importante saber que debe establecer su prioridad de punto muerto en alta, de lo contrario quedará bloqueado fuera del comando. Use los siguientes comandos para salir del modo de usuario ÚNICO

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

Seguido por

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

Seguido por

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE

3
Muchas gracias por esto. Sin embargo, descubrí que no era necesario el paso OFFLINE / ONLINE; el SET MULTIUSER WITH ROLLBACK IMMEDIATEtrabajo solo por sí mismo cuando SET DEADLOCK_PRIORITY HIGHse hizo primero
Ross Presser

6

Creo que el misterio finalmente se resolvió :

Antes de establecer la base de datos en SINGLE_USER, verifique que la opción AUTO_UPDATE_STATISTICS_ASYNC esté establecida en OFF. Cuando se establece en ON, el subproceso en segundo plano utilizado para actualizar las estadísticas se conecta a la base de datos, y no podrá acceder a la base de datos en modo de usuario único.


6

Detenga el seguimiento de eventos extendidos "system_health". Se enumerará en

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

Una vez que el bloqueador esté reparado, reinicie la sesión.


Aunque la otra respuesta explica por qué sucede esto, esta explica cómo resolverlo.
Boris Callens

Resolución perfecta para mi. Funcionó como se esperaba
Im88

0

Debe deshabilitar el Agente SQL 'antes' de iniciar el modo de uso único. Como el agente accout tomará el acceso de usuario único. Recuerde que el usuario único no es usted, es el primer usuario / proceso en conectarse.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.