una studio servidor remota puede motor management entrar datos crear conectarse conectar como database sql-server-2005 performance

database - studio - motor de base de datos sql server



Tiempo de espera extremo al desconectar una base de datos de SQL Server (17)

Estoy intentando realizar un mantenimiento sin conexión (restauración de la base de datos dev desde la copia de seguridad en vivo) en mi base de datos de desarrollo, pero el comando ''Desconectar'' a través de SQL Server Management Studio se está ejecutando de forma extremadamente lenta, del orden de 30 minutos más ahora. Estoy casi en mi punto final y parece que no puedo encontrar ninguna referencia en línea sobre lo que podría estar causando el problema de la velocidad, o cómo solucionarlo.

Algunos sitios han sugerido que las conexiones abiertas a la base de datos causan esta desaceleración, pero la única aplicación que usa esta base de datos es la instancia de IIS de mi máquina dev, y el servicio se detiene, no hay más conexiones abiertas.

¿Qué podría estar causando esta desaceleración y qué puedo hacer para acelerarla?


¿Tiene alguna ventana abierta de SQL Server Management Studio que esté conectada a este DB?

Póngalo en modo de usuario único y vuelva a intentarlo.


Además, cierre cualquier ventana de consulta que tenga abierta y que esté conectada a la base de datos en cuestión;)


Cerrar la instancia de SSMS (Administrador de servicios de SQL) desde la cual se realizó la solicitud solucionó el problema por mí ...


Después de algunas búsquedas adicionales (nuevos términos de búsqueda inspirados en la respuesta de gbn y el comentario de u07ch sobre la respuesta de KMike) encontré esto, que se completó con éxito en 2 segundos

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(Actualizar)

Cuando esto todavía falla con el siguiente error, puede corregirlo según lo inspirado en esta publicación del blog :

ALTER DATABASE falló porque no se pudo colocar un bloqueo en la base de datos ''dbname'' Inténtelo de nuevo más tarde.

puede ejecutar el siguiente comando para averiguar quién mantiene un bloqueo en su base de datos:

EXEC sp_who2

Y usa cualquier SPID que encuentres en el siguiente comando:

KILL <SPID>

A continuación, ejecute de nuevo el comando ALTER DATABASE . Ahora debería funcionar.


En SSMS, configure la base de datos en solo lectura y luego vuelva. Las conexiones serán cerradas, lo que libera las cerraduras.

En mi caso había un sitio web que tenía conexiones abiertas a la base de datos. Este método fue bastante fácil:

  1. Haga clic derecho en la base de datos -> Propiedades -> Opciones
  2. Establecer la Database Read-Only en True
  3. Haga clic en ''Sí'' en el cuadro de diálogo y SQL Server cerrará todas las conexiones a la base de datos.
  4. Vuelva a abrir Opciones y desactive la opción de solo lectura.
  5. Ahora intente cambiar el nombre de la base de datos o desconectarla.

En SSMS: haga clic con el botón derecho en el icono del servidor SQL, Monitor de actividad. Procesos abiertos. Encuentra el procesado conectado. Haga clic derecho en el proceso, Kill.


En mi caso detuve el servidor Tomcat. Entonces inmediatamente el DB se desconectó.


En mi caso, después de esperar tanto para que terminara, no tuve paciencia y simplemente cerré el estudio de administración. Antes de salir, mostró el mensaje de éxito, db está fuera de línea. Los archivos estaban disponibles para cambiar el nombre.


En mi caso, había visto algunas tablas en la base de datos antes de ejecutar esta acción. Mi cuenta de usuario tenía una conexión activa a esta base de datos en SSMS. Una vez que me desconecté del servidor en SSMS (dejando abierto el cuadro de diálogo "Desconectar la base de datos"), la operación se realizó correctamente.


En mi caso, la base de datos estaba relacionada con una instalación anterior de Sharepoint. Al detener y deshabilitar los servicios relacionados en el administrador del servidor, se "deshabilita" la acción de desconectar, que se había ejecutado durante 40 minutos, y se completó de inmediato.

Es posible que desee comprobar si algún servicio está utilizando actualmente la base de datos.



La próxima vez, desde el cuadro de diálogo Desconectar, recuerde marcar la casilla de verificación ''Eliminar todas las conexiones activas''. También estuve en SQL_EXPRESS en la máquina local sin conexiones, pero esta desaceleración sucedió para mí a menos que haya marcado esa casilla de verificación.


Para mí, solo tenía que entrar en el Monitor de actividad laboral y detener dos cosas que se estaban procesando. Luego se desconectó de inmediato. En mi caso, aunque sabía cuáles eran esos 2 procesos y que estaba bien detenerlos.


Para solucionar esto, detuve el sitio web que estaba conectado a la base de datos en IIS e inmediatamente el panel ''congelado'' ''desconectar'' de la base de datos ''se descongela.


Probé todas las sugerencias a continuación y nada funcionó.

  1. EXEC sp_who
  2. Matar <SPID>

  3. ALTER DATABASE SET SINGLE_USER CON Rollback Inmediato

    ALTERE LA BASE DE DATOS AJUSTE OFFLINE CON ROLLBACK INMEDIATO

    Resultado: los dos comandos anteriores también fueron bloqueados.

4. Haga clic con el botón derecho en la base de datos -> Propiedades -> Opciones Establecer base de datos de solo lectura en Verdadero Haga clic en ''Sí'' en el cuadro de diálogo y SQL Server cerrará todas las conexiones a la base de datos.

Resultado: la ventana se atascó en la ejecución.

Como último recurso, reinicié el servicio del servidor SQL desde el administrador de configuración y luego ejecuté ALTER DATABASE SET OFFLINE WITH ROLLBACK INMEDIATE. Funcionó a las mil maravillas


Siempre que se encuentre con este tipo de cosas, siempre debe pensar en su registro de transacciones. La declaración de alter db con restitución inmediata indica que este es el caso. Vea esto en http://msdn.microsoft.com/en-us/library/ms189085.aspx

Continúe con los puntos de control, etc. Debe decidir si vale la pena guardar las transacciones en su registro y luego elegir el modo para ejecutar su db en consecuencia. Realmente no hay razón para que tengas que esperar, pero tampoco hay razón para que pierdas datos: puedes tener ambos.


ejecutar el procedimiento almacenado sp_who2

Esto te permitirá ver si hay bloqueos bloqueados ... para eliminarlos, deberías solucionarlo.