Salir del modo de usuario único
Actualmente, mi base de datos está en modo Usuario único. Cuando intento ampliar mi base de datos, aparece un error:
No se puede acceder a la base de datos 'my_db'. (ObjectExplorer)
Además, cuando intento eliminar la base de datos, aparece el error:
No se pueden realizar cambios en el estado o las opciones de la base de datos 'my_db' en este momento. La base de datos está en modo de usuario único y actualmente hay un usuario conectado a ella.
¿Cómo salgo del modo de usuario único? No tengo ningún usuario que utilice esta base de datos.
Cuando intento navegar por mi sitio con IIS, el error que aparece es:
Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de la pila de excepciones a continuación.
Siento que el modo de usuario único está causando esto.
SSMS en general utiliza varias conexiones a la base de datos detrás de escena. Deberá eliminar estas conexiones antes de cambiar el modo de acceso:
- Primero, asegúrese de que el explorador de objetos apunte a una base de datos del sistema como master.
- En segundo lugar, ejecute a
sp_who2
y busque todas las conexiones a la base de datos 'my_db'. Elimine todas las conexiones haciendoKILL { session id }
que la identificación de sesión estéSPID
listada porsp_who2
. - En tercer lugar, abra una nueva ventana de consulta.
Después de esos 3 pasos, ejecute el siguiente código.
-- Start in master
USE MASTER;
-- Add users
ALTER DATABASE [my_db] SET MULTI_USER
GO
Consulte el artículo de mi blog sobre la gestión de archivos de bases de datos. Esto fue escrito para mover archivos, pero la administración de usuarios es la misma.
Primero, busque KILL
todos los procesos que se han estado ejecutando actualmente.
Luego, ejecute lo siguiente T-SQL
para configurar la base de datos en MULTI_USER
modo.
USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>')
EXEC(@kill);
GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO