Atualmente, meu banco de dados está no modo de usuário único. Quando tento expandir meu banco de dados, recebo um erro:
O banco de dados 'my_db' não está acessível. (ObjectExplorer)
Além disso, quando tento excluir o banco de dados, recebo o erro:
Alterações no estado ou nas opções do banco de dados 'my_db' não podem ser feitas no momento. O banco de dados está no modo de usuário único e um usuário está atualmente conectado a ele.
Como saio do modo de usuário único? Não tenho nenhum usuário usando esse banco de dados.
Quando tento navegar no meu site com o IIS, o erro que recebo é:
Uma exceção não tratada foi gerada durante a execução da solicitação da web atual. Informações sobre a origem e o local da exceção podem ser identificadas usando o rastreamento da pilha de exceções abaixo.
Sinto como se o modo de usuário único estivesse causando isso.
fonte
Primeiro, encontre e
KILL
todos os processos em execução no momento.Em seguida, execute o seguinte
T-SQL
para definir o banco de dados noMULTI_USER
modofonte
Para sair do modo de usuário único, tente:
ALTER DATABASE [my_db] SET MULTI_USER
Para voltar ao modo de usuário único, você pode usar:
ALTER DATABASE [my_db] SET SINGLE_USER
fonte
fonte
Eu tentei isso está funcionando
fonte
Eu tive o mesmo problema, e o session_id to kill foi encontrado usando esta consulta:
fonte
Pressione CTRL + 1
encontre o processo que bloqueia seu banco de dados. Procure na coluna dbname pelo seu db e observe o spid. Agora você precisa executar essa instrução:
fonte
O seguinte funcionou para mim:
fonte
Outra opção é:
ALTER DATABASE [Your_Db] SET MULTI_USER
fonte
Caso alguém se depare com esse segmento, aqui está uma solução à prova de balas para o SQL Server presa no MODO DE USUÁRIO ÚNICO
- Obtenha o ID do processo (spid) da conexão que você precisa matar
- Substitua 'DBName' pelo nome real do banco de dados
Como alternativa, você também pode usar o comando "sp_who" para obter o "spid" da conexão aberta:
- Ou use esse SP
- Em seguida, execute o seguinte e substitua [spid] e [DBName] pelos valores corretos
fonte
Não tenho certeza se isso ajuda alguém, mas eu tive o mesmo problema e não consegui encontrar o processo que estava me atrasando. Fechei o SSMS e parei todos os serviços que atingiam a instância local. Então, quando voltei e executei o exec sp_who2, ele me mostrou o culpado. Eu matei o processo e consegui fazer o Multi_User funcionar e, em seguida, reinicie os serviços. Tivemos o IIS acessando-o a cada poucos minutos / segundos, procurando por determinados pacotes.
fonte
Encontrei o mesmo problema esta manhã. Acabou sendo um problema simples. Eu tinha uma janela de consulta aberta, definida como o banco de dados de usuário único no explorador de objetos. O procedimento armazenado sp_who2 não mostrou a conexão. Depois de fechado, pude configurá-lo para
fonte
Adicionando à resposta de Jespers , para ser ainda mais eficaz:
SET DEADLOCK_PRIORITY HIGH
usosDEADLOCK_PRIORITY
de 5.O que está acontecendo é que os outros processos ficam com uma fenda no banco de dados e, se o seu processo tiver um valor mais baixo
DEADLOCK_PRIORITY
, ele perde a corrida.Isso evita encontrar e matar o outro spid (que pode precisar ser feito várias vezes).
É possível que você precise executar
ALTER DATABASE
mais de uma vez (mas Jesper faz isso). Código modificado:fonte
Use este script
Encontre a coluna dbname e spid
agora execute
fonte
Hoje, enfrentei o mesmo problema em que meu banco de dados foi alterado do modo Multiusuário para Usuário Único e isso acabou me impedindo de publicar o banco de dados.
Para corrigir esse problema, tive que fechar todas as instâncias do Visual Studio e executar o comando abaixo na janela de consulta do Sql Server -
Este comando alterou o banco de dados de Usuário único para Usuário múltiplo e, posteriormente, consegui publicar.
fonte
Até me deparo com o mesmo problema, incapaz de encontrar conexões ativas com o my_db para matá-lo, mas ainda mostra o mesmo erro. Acabo desconectando todas as conexões SSMS possíveis para qualquer banco de dados no servidor, crio uma nova conexão a partir do SSMS e altero para Multiusuário.
Nota: Este parece ser um erro possível no SQL Server 2005!
fonte
Acabamos de experimentar isso no SQL 2012. Um processo de replicação entrou em cena quando matamos a sessão original que a definiu como usuário único. Mas sp_who2 não mostrou esse novo processo anexado ao banco de dados. Fechar o SSMS e reabrir nos permitiu ver esse processo no banco de dados e, em seguida, poderíamos matá-lo e mudar para o modo multiusuário imediatamente e isso funcionou.
Não consigo descobrir a lógica por trás disso, mas parece ser um bug no SSMS e ainda está se manifestando no SQL 2012.
fonte
use mestre
IR
selecione d.name, d.dbid, spid, login_time, nt_domain, nt_username, nome de login de sysprocesses p sysdatabases de junção interna d em p.dbid = d.dbid em que d.name = 'nome do banco de dados'
matar 568 - matar spid
ALTER DATABASE database name '
SET MULTI_USER ir
fonte