Borrar con conexiones abiertas

28/09/2006 - 17:47 por aydai | Informe spam
Hola a todos!!!
Es posible borrar una base de datos aunque haya conexiones abiertas???
desde un comando sql

Gracias.

Preguntas similare

Leer las respuestas

#1 SoftJaén
30/09/2006 - 11:24 | Informe spam
"" preguntó:

Es posible borrar una base de datos aunque haya conexiones abiertas?
desde un comando sql



Hola:

Si estamos hablando de bases de datos Microsoft Access o Microsoft SQL
Server, que yo sepa, no es posible mientras la base de datos se encuentre en
uso.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 Jesús López
30/09/2006 - 11:56 | Informe spam
Pero en SQL Server puedes ver qué conexiones están abiertas mirando
sysprocesses y matarlas con Kill.

Saludos:

Jesús López


"SoftJaén" escribió en el mensaje
news:uKP%
"" preguntó:

Es posible borrar una base de datos aunque haya conexiones abiertas?
desde un comando sql



Hola:

Si estamos hablando de bases de datos Microsoft Access o Microsoft SQL
Server, que yo sepa, no es posible mientras la base de datos se encuentre
en uso.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.


Respuesta Responder a este mensaje
#3 SoftJaén
30/09/2006 - 12:58 | Informe spam
"Jesús López" escribió:

Pero en SQL Server puedes ver qué conexiones están abiertas mirando
sysprocesses y matarlas con Kill.



Hola, Jesús:

Las conexiones sí, pero no los archivos fisicos de la base de datos, que me
imagino es lo que preguntaba el amigo en su mensaje: si se podía eliminar la
base de datos (DROP DATABASE), mientras había una conexión abierta, cosa que
entiendo que no se puede, salvo que yo esté equivocado.

Efectivamente, el comando KILL termina el proceso de usuario basado en el
identificador de proceso del sistema, pero si inmediatamente se ejecuta la
instrucción DROP DATABASE, se obtiene la siguiente excepción: El Id. de
proceso XX no está activo.

Por tanto, sigo pensando que no se puede eliminar una base de datos SQL
Server mientras que esté en uso, aunque se haya "matado" su identificador de
proceso. Al menos, esa es la conclusión a la que he llegado tras realizar
una pequeña prueba. :-)

Un saludo, Jesús.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#4 Jesús López
30/09/2006 - 18:43 | Informe spam
Enrique,

Tienes razón en que no se puede eliminar una base de datos en uso, yo eso no
te lo discuto, faltaría más !.

Pero cuando matas todas las conexiones que hay en una base de datos, ésta
deja de estar en uso y puede eliminarse con DROP DATABASE, lo que hace que
además se eliminen los archivos de base de datos.

Si has recibido el error "El Id de proceso XX no está activo" es porque
seguramente te has suicidado, te has matado a ti mismo y por lo tanto no
puedes ejecutar DROP DATABASE.

Para eliminar una base de datos X, te conectas a master, no a X, matas todas
las conexiones con X y después ejecutas DROP DATABASE X.

¿Podrías poner el código que has utilizado en esa prueba e indicar los pasos
que has seguido?

Saludos:

Jesús López
Respuesta Responder a este mensaje
#5 SoftJaén
30/09/2006 - 20:49 | Informe spam
"Jesús López" escribió:

Si has recibido el error "El Id de proceso XX no está activo" es porque
seguramente te has suicidado, te has matado a ti mismo y por lo tanto no
puedes ejecutar DROP DATABASE.



Jesús, llevas razón. Creo que me he "suicidado", porque desde el mismo
proyecto de Visual Basic. net, estaba utilizando dos objetos SqlConnection
distintos, aunque ambos tenían la misma cadena de conexión, es decir,
apuntaban a la misma base. Primero mataba el proceso, y con la misma
conexión a la base de datos X, trataba de eliminarla, de ahí que recibiera
la excepción comentada.

Para eliminar una base de datos X, te conectas a master, no a X, matas
todas las conexiones con X y después ejecutas DROP DATABASE X.



Así es. Ahora, lo que he hecho es abrir una conexión con la base de datos X
en el proyecto de Visual Basic, el cual lo he dejado ejecutándose, y desde
el Analizador de consultas he obtenido el Id. del proceso:

USE master
GO

SELECT spid, status, program_name
FROM sysprocesses
WHERE program_name like '.Net SqlClient%'
GO

Una vez obtenido el Id del proceso, he ejecutado una nueva consulta:

USE master
GO

KILL 54
GO

DROP DATABASE X
GO

Y, efectivamente, una vez matado el proceso se ha podido eliminar
físicamente la base de datos, aunque supuestamente, la conexión sigue
abierta en el proyecto de Visual Basic que aún continúa ejecutándose, ya que
la variable objeto SqlConnection la tengo declarada a nivel de la propia
clase Form.

MessageBox.Show(cnn.State.ToString) ' --> Open

Viendo el resultado de la propiedad «State», lo primero que se me viene a la
cabeza es que no te puedes "fiar ni un pelo" de dicho valor, porque si
alguien o algo ha matado el proceso, y encima ha eliminado la base de datos,
cuando se desee ejecutar una consulta de selección o acción, ¿me imagino que
se obtendrá la oportuna excepción? :-(

Gracias por la aclaración.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida