sql server - usuarios - Cómo borrar la base de datos, la base de datos de error 5030 no se puede bloquear
tipos de bloqueos sql server (8)
Este error normalmente ocurre cuando su base de datos está en modo Multi usuario donde los usuarios acceden a su base de datos o algunos objetos hacen referencia a su base de datos. Primero debe configurar la base de datos para el modo de usuario único:
ALTER DATABASE dbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Ahora intentaremos eliminar la base de datos
delete DATABASE ...
Finalmente, establezca la base de datos en el modo de usuario múltiple
ALTER DATABASE dbName
SET MULTI_USER WITH ROLLBACK IMMEDIATE
Estoy tratando de eliminar una base de datos existente en SQL Server 2005. Mi primer intento produjo el siguiente error:
5030: la base de datos no se pudo bloquear exclusivamente para realizar la operación.
Desde entonces he matado a todos los procesos que están accediendo a la base de datos. También eliminé la suscripción de replicación en la que había participado anteriormente.
¿Alguna idea sobre qué otra cosa podría estar bloqueando además de los procesos y la replicación de SQL Server?
Actualización : reinicié el servidor, y eso lo solucionó. Estaba tratando de evitar eso, ya que este es un servidor de producción, pero ¿qué puedes hacer?
¿No sabe si alguien dejó una transacción en un estado de reversión incompleto (o no completado)? También podría verificar la lista de bloqueos.
En el estudio de administración, goto Management-> Activity Monitor (haga clic con el botón derecho) -> View Processes. Eso le dará una lista completa de todo lo que se está ejecutando, puede ordenar la lista por la Base de datos para ver qué está todavía adjunta y también puede eliminar todas las conexiones. Es fácil terminar con conexiones huérfanas que le impedirán obtener el acceso exclusivo que necesita.
Nadie más debería estar usando el DB, incluyéndote a ti mismo.
Odio decirlo, pero una solución rápida es reiniciar el sistema, asegúrese de que el servicio del servidor del servidor sql no se haya iniciado, entonces debería poder eliminar.
Además, ¿se detiene IIS si db está conectado a una aplicación web?
¿Un servidor de producción en el que tantas conexiones usan la base de datos pero usted quiere soltarlo? :)
Sin embargo, cómo expulsar a todos de la base de datos:
USE [dbname];
ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
A continuación, suelte la base de datos:
USE [master];
DROP DATABASE [dbname];
Todavía hay una ventana de oportunidad muy pequeña entre USE [master];
y DROP DATABASE ...
donde alguna otra conexión puede capturar el 1 único bloqueo permitido en la base de datos, pero por lo general no vale la pena trabajar en eso.
¿Por qué haríamos una base de datos borrada en el modo multiusuario?
ALTER DATABASE dbName SET MULTI_USER WITH ROLLBACK IMMEDIATE
Para evitar este error, utilice el script T-SQL a continuación en la base de datos maestra. Asegúrese de ejecutar esto (y modifique el @dbname) para cada base de datos en la que esté ejecutando el comando ALTER DATABASE.
"La base de datos no se puede bloquear exclusivamente para realizar la operación"
Este script "asesino de conexión" funcionará si Windows ha establecido conexiones JDBC a la base de datos. Pero este script no puede matar las conexiones JDBC para los servicios de Linux (por ejemplo, JBoss). Entonces aún obtendrá ese error si no detiene JBoss manualmente. No he probado otros protocolos, pero por favor coméntelos si encuentra más información a medida que construye nuevos sistemas.
USE master;
DECLARE @dbname sysname
Set @dbname = ''DATABASE_NAME_HERE-PROD''
Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
Execute (''Kill '' + @spid)
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname) and spid > @spid
End