Quiero cambiar el nombre de una base de datos, pero sigo recibiendo el error 'no se pudo obtener el bloqueo exclusivo' en la base de datos, lo que implica que todavía hay algunas conexiones activas.
¿Cómo puedo eliminar todas las conexiones a la base de datos para poder cambiarle el nombre?
Script para lograr esto, reemplace 'DB_NAME' con la base de datos para eliminar todas las conexiones a:
fuente
and spid <> @@SPID
a laSELECT @sKillConnection
declaración para que no intentara matar mi conexión actual, lo que generaría un mensaje de error.Mátalo y mátalo con fuego:
fuente
Usando SQL Management Studio Express:
En el árbol del Explorador de objetos, desglose en Gestión hasta "Monitor de actividad" (si no puede encontrarlo allí, haga clic con el botón derecho en el servidor de la base de datos y seleccione "Monitor de actividad"). Al abrir el Monitor de actividad, puede ver toda la información del proceso. Debería poder encontrar los bloqueos para la base de datos que le interesa y eliminar esos bloqueos, lo que también eliminará la conexión.
Debería poder cambiar el nombre después de eso.
fuente
Siempre he usado:
fuente
fuente
Desconectarse lleva un tiempo y a veces tengo algunos problemas con eso ...
La forma más sólida en mi opinión:
Separar Haga clic derecho en DB -> Tareas -> Separar ... marque "Soltar conexiones" Ok
Vuelva a adjuntar Haga clic con el botón derecho en Bases de datos -> Adjuntar .. Agregar ... -> seleccione su base de datos y cambie la columna Adjuntar como a su nombre de base de datos deseado. Okay
fuente
use la base de datos 'maestra' y ejecute esta consulta, eliminará todas las conexiones activas de su base de datos.
fuente
Por lo general, me encuentro con ese error cuando estoy tratando de restaurar una base de datos. Por lo general, solo voy a la parte superior del árbol en Management Studio y hago clic derecho y reinicio el servidor de la base de datos (porque está en una máquina de desarrollo, esto podría no ser ideal en producción ) Esto cierra todas las conexiones de la base de datos.
fuente
ALTER DATABASE ... SET SINGLE_USER
comandos en otras respuestas devolvieron el mismo error 'no se pudo obtener el bloqueo exclusivo').En MS SQL Server Management Studio en el explorador de objetos, haga clic derecho en la base de datos. En el menú contextual que sigue, seleccione 'Tareas -> Desconectar'
fuente
Otro enfoque de "matarlo con fuego" es simplemente reiniciar el servicio MSSQLSERVER. Me gusta hacer cosas desde la línea de comandos. Pegar esto exactamente en CMD lo hará: NET STOP MSSQLSERVER & NET START MSSQLSERVER
O abra "services.msc" y busque "SQL Server (MSSQLSERVER)" y haga clic derecho, seleccione "reiniciar".
Esto "seguro, seguro" matará TODAS las conexiones a TODAS las bases de datos que se ejecutan en esa instancia.
(Me gusta más que muchos enfoques que cambian y cambian la configuración en el servidor / base de datos)
fuente
Aquí le mostramos cómo hacer este tipo de cosas de manera confiable en MS SQL Server Management Studio 2008 (también puede funcionar para otras versiones):
fuente
La opción que funciona para mí en este escenario es la siguiente:
fuente
Prueba esto:
fuente
Haga clic derecho en el nombre de la base de datos, haga clic en Propiedad para obtener la ventana de propiedades, abra la pestaña Opciones y cambie la propiedad "Restringir acceso" de Usuario múltiple a Usuario único. Cuando presiona el botón OK, le pedirá que cierre todas las conexiones abiertas, seleccione "Sí" y estará listo para cambiar el nombre de la base de datos ...
fuente
Esto no funcionó para mí (SQL2008 Enterprise), tampoco pude ver ningún proceso en ejecución o usuarios conectados a la base de datos. Reiniciar el servidor (haga clic con el botón derecho en Servidor SQL en Management Studio y seleccione Reiniciar) me permitió restaurar la base de datos.
fuente
Estoy usando SQL Server 2008 R2, mi base de datos ya estaba configurada para un solo usuario y había una conexión que restringía cualquier acción en la base de datos. Por lo tanto, la solución recomendada de SQLMenace respondió con error. Aquí hay uno que funcionó en mi caso .
fuente
Yo uso sp_who para obtener una lista de todos los procesos en la base de datos. Esto es mejor porque es posible que desee revisar qué proceso matar.
Resultado
Puede usar el comando en la columna KillCommand para eliminar el proceso que desea.
fuente
Puede usar el comando SP_Who y eliminar todos los procesos que usan su base de datos y luego cambiarle el nombre.
fuente