O processo "TASK MANAGER" está assumindo um banco de dados no modo de usuário único. O que é isso?

13

Esta é uma duplicata da pergunta que fiz no stackoverflow , mas fui avisado que alguém aqui poderia ter uma idéia melhor do que está acontecendo.

Eu tenho um problema esporádico, ao atualizar o SQL Server no modo de usuário único, usando o .NET SqlConnection, algum outro aplicativo de alguma forma efetua login no banco de dados enquanto o código SQL está sendo executado e inicia meu processo. SqlConnection não é fechado ou descartado de forma alguma. Mas alguma outra aplicação acaba conectada ao banco de dados e isso expulsa minha conexão.

Quando executo sp_who, pude ver que um processo que assumiu o controle do banco de dados é Command = "TASK MANAGER".

Alguém poderia me dizer qual é esse processo, qual é o seu objetivo e como ele pode entrar em um banco de dados, que está no modo de usuário único e existe uma conexão ativa?

galets
fonte
Você desliga o SQL Agent durante esse processo? As tarefas denominadas "TASK MANAGER" (com baixo número de spid) são processos internos.
Jon Seigel
@ JonSeigel não, eu não fiz. Você está dizendo que o SQL Agent é um processo real que executa o TASK MANAGER?
galets 11/07/12
Não tenho 100% de certeza. O que eu sei é que o SQL Agent se conecta à instância quando está em execução, e isso pode impedir que você efetue login enquanto o servidor estiver no modo de usuário único. Ontem tive esse problema e a interrupção do SQL Agent o corrigiu.
Jon Seigel
2
Só para esclarecer, esse não é o mesmo Gerenciador de Tarefas que você usa no Windows para visualizar processos e desempenho do sistema.
Aaron Bertrand

Respostas:

10

Teve o mesmo problema hoje: se você não desativou seu AUTO_UPDATE_STATISTICS ASYNC, não poderá entrar no seu banco de dados, poderá resolvê-lo colocando-o offline. É importante saber que você precisa definir sua prioridade de conflito como alta, caso contrário, você ficará fora do comando. Use os seguintes comandos para sair do modo de usuário Ú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
Stijn Wynants
fonte
3
Muito obrigado por isso. No entanto, descobri que a etapa OFFLINE / ONLINE não era necessária; o SET MULTIUSER WITH ROLLBACK IMMEDIATEtrabalhou apenas por si só quando SET DEADLOCK_PRIORITY HIGHfoi feito pela primeira vez
Ross Presser
6

Eu acho que o mistério finalmente foi resolvido :

Antes de definir o banco de dados como SINGLE_USER, verifique se a opção AUTO_UPDATE_STATISTICS_ASYNC está definida como OFF. Quando definido como LIGADO, o encadeamento em segundo plano usado para atualizar estatísticas estabelece uma conexão com o banco de dados e você não poderá acessar o banco de dados no modo de usuário único.

galets
fonte
6

Pare o rastreamento de eventos estendidos "system_health". Será listado em

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

Depois que o bloqueador estiver corrigido, reinicie a sessão.

Raghu Nair
fonte
Embora a outra resposta explique por que isso acontece, esta explica como resolvê-lo.
Boris Callens
Resolução perfeita para mim. Ele funcionou como esperado
Im88
0

Você precisa desativar o SQL Agent 'antes' de iniciar o modo de uso único. À medida que o agente conta, obtém acesso de usuário único. Lembre-se de que o usuário único não é o primeiro usuário / processo a se conectar.

Nick Winstanley
fonte