Necesito reiniciar una base de datos porque algunos procesos no funcionan. Mi plan es desconectarlo y volver a conectarlo nuevamente.
Estoy tratando de hacer esto en Sql Server Management Studio 2008:
use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go
Recibo estos errores:
Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Msg 5061, Level 16, State 1, Line 4
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 4
ALTER DATABASE statement failed.
¿Qué estoy haciendo mal?
sql
sql-server-2008
ssms
JOE SKEET
fuente
fuente
Respuestas:
Después de recibir el error, ejecute
Busque la base de datos en la lista. Es posible que una conexión no haya finalizado. Si encuentra alguna conexión a la base de datos, ejecute
donde
<SPID>
está el SPID para las sesiones que están conectadas a la base de datos.Pruebe su secuencia de comandos después de eliminar todas las conexiones a la base de datos.
Desafortunadamente, no tengo una razón por la que está viendo el problema, pero aquí hay un enlace que muestra que el problema ha ocurrido en otro lugar.
http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/
fuente
set single_user
intento que aún está pendiente.KILL
tampoco lo resolvería.KILL (87)
resultados enMsg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.
erm ....Logré reproducir este error haciendo lo siguiente.
Conexión 1 (dejar en funcionamiento durante un par de minutos)
Conexiones 2 y 3
fuente
Prueba esto si está "en transición" ...
http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html
fuente
SET OFFLINE
declaración mencionada por el OP (tal vez hay escenarios en los que funciona, pero no lo hizo para mí)Agregaré esto aquí en caso de que alguien tenga tanta suerte como yo.
Al revisar la lista de procesos sp_who2 , tenga en cuenta los procesos que se ejecutan no solo para la base de datos afectada sino también para el maestro . En mi caso, el problema que estaba bloqueando la base de datos estaba relacionado con un procedimiento almacenado que inició un xp_cmdshell.
Compruebe si tiene algún proceso en estado KILL / RollBack para la base de datos maestra
Si tiene el mismo problema, solo el comando KILL probablemente no ayudará. Puede reiniciar el servidor SQL, o una mejor manera es encontrar el cmd.exe en los procesos de Windows en el sistema operativo del servidor SQL y matarlo.
fuente
En SQL Management Studio, vaya a Seguridad -> Inicios de sesión y haga doble clic en su Inicio de sesión. Elija Roles de servidor en la columna izquierda y verifique que sysadmin esté marcado.
En mi caso, inicié sesión en una cuenta sin ese privilegio.
HTH!
fuente
Matar la ID del proceso funcionó muy bien para mí. Al ejecutar el comando "EXEC sp_who2" sobre una nueva ventana de consulta ... y filtrar los resultados para la base de datos "ocupada", matar los procesos con el comando "KILL" logró hacer el truco. Después de eso, todo volvió a funcionar.
fuente
Solo para agregar mis dos centavos. Me puse en la misma situación, mientras buscaba los privilegios mínimos requeridos de un inicio de sesión de db para ejecutar con éxito la declaración:
Parece que la instrucción ALTER se completa con éxito , cuando se ejecuta con un inicio de sesión de sysadmin , pero requiere la parte de limpieza de conexiones, cuando se ejecuta bajo un inicio de sesión que tiene "solo" permisos limitados como:
PD: He pasado horas tratando de descubrir por qué la "ALTER DATABASE .." no funciona cuando se ejecuta bajo un inicio de sesión que tiene el rol dbcreator + ALTER CUALQUIER privilegio de DATABASE . Aquí está mi hilo de MSDN !
fuente
Sé que esta es una publicación antigua, pero recientemente me encontré con un problema muy similar. Desafortunadamente, no pude usar ninguno de los comandos de alterar la base de datos porque no se pudo colocar un bloqueo exclusivo. Pero nunca pude encontrar una conexión abierta a la base de datos. Eventualmente tuve que eliminar forzosamente el estado de salud de la base de datos para forzarla a un estado de restauración en lugar de recuperarla.
fuente
En casos raros (p. Ej., Después de que se haya comprometido una transacción pesada), un proceso del sistema CHECKPOINT en ejecución que mantiene un bloqueo de ARCHIVO en el archivo de la base de datos evita la transición al modo MULTI_USER.
fuente
En mi escenario, no hubo ningún proceso que bloqueara la base de datos bajo sp_who2. Sin embargo, descubrimos que debido a que la base de datos es mucho más grande que nuestras otras bases de datos, los procesos pendientes todavía se estaban ejecutando, por lo que la base de datos bajo el grupo de disponibilidad todavía se mostraba como roja / fuera de línea después de que intentamos 'reanudar los datos' haciendo clic derecho en la base de datos en pausa.
Para verificar si todavía tiene procesos en ejecución, simplemente ejecute este comando: seleccione el porcentaje completado de sys.dm_exec_requests donde percent_complete> 0
fuente