Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Conexiones abiertas

Estas en el tema de Conexiones abiertas en el foro de SQL Server en Foros del Web. Amigos, necesito de su ayuda. conocen ustedes alguna manera de matar las conexiones abiertas que tengo en un servidor sql server 2005, lo que pasa ...
  #1 (permalink)  
Antiguo 19/02/2008, 17:43
Avatar de Romi28x  
Fecha de Ingreso: octubre-2007
Mensajes: 185
Antigüedad: 16 años, 6 meses
Puntos: 0
Conexiones abiertas

Amigos, necesito de su ayuda.

conocen ustedes alguna manera de matar las conexiones abiertas que tengo en un servidor sql server 2005, lo que pasa es que tengo varias aplicaciones que me están dejando conexiones abiertas y esto causa un poco de lentitud en algunos momentos cuando llego a tener muchas de estas conexiones, yo se que lo correcto es que revise las aplicaciones y ver cuantas de ellas no están cerrando la conexión apropiadamente pero las aplicaciones son heredadas (no las hice yo) y es un poco mas difícil revisar tanto código por que son varias de estas aplicaciones, así que por el momento como una salida rápida pense en que tal ves hay alguna manera de poder cerrar todas estas conexiones muertas desde la aplicaciones de VB6.0 (esta es la herramienta en donde están desarrolladas estas estas aplicaciones), creanlo en esta empresa en donde estoy trabajando hay mas o menos 150 usuarios usando estas aplicaciones y hay momento en donde el servidor tiene hasta 1800 conexiones abiertas, algunas abiertas por que el usuario la esta usando pero otras estan ahi desde hace un dia atras o el usuario ya no esta pero ella continuan y es asi que quiero matarlas todas pero buscando una manera de decirle a esa super consulta jaja que me mate solo aquellas que ya no tienen o no estan haciendo nada.

esto es posible.
  #2 (permalink)  
Antiguo 20/02/2008, 10:50
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Conexiones abiertas

"A pedradas"

ALTER DATABASE tubase
SET SINGLE_USER
WITH ROLLBACK_IMMEDIATE

Despues, lo regresas a su estado normal

ALTER DATABASE tubase
SET MULTI_USER

Pero esto es matar las chinches a PEDRADAS, deberias revolver tu problema de origen.
  #3 (permalink)  
Antiguo 20/02/2008, 12:00
Avatar de Romi28x  
Fecha de Ingreso: octubre-2007
Mensajes: 185
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Conexiones abiertas

Yo se amigo que debo resolver desde la fuente este problema que tengo, pero de todas maneras gracias por la información, tengo si una duda, esta instrucción que me estas dando mata hasta las conexiones abiertas que si tienen razón de ser, es decir matas las que si están siendo usada por X usuario y aquellas que están colgadas ahí sin hacer nada? las mata a todas sin importar??
  #4 (permalink)  
Antiguo 20/02/2008, 18:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Conexiones abiertas

Si, mata a todas las conexiones, o bien, puedes utilizar algo mas "fino"

select 'Kill ' + str(spid)
from master..sysprocesses p,
master..sysdatabases d
where p.status != 'BACKGROUND'
and d.dbid = p.dbid
and d.name = 'MiDatabase' -- Aqui va el nombre de tu base de datos.

Ejecutas lo que te de como resultado
  #5 (permalink)  
Antiguo 20/02/2008, 18:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Conexiones abiertas

Algo aun mas fino:

-- Desconecta a los usuarios de "x" base
-- IIslas 2008

CREATE PROCEDURE pr_DesconectaUsuarios
@Database sysname
AS
BEGIN

Set nocount on

Declare @nOrden int
Declare @nOrdenMax int
Declare @cSQL nvarchar(1000)

if object_id('tempdb..#spid') is not null
Drop table #spid

set @cSQL = ''

Select identity(int,1,1) as nOrden ,
d.dbid as dbId,
d.name as dbName,
loginame as LoginName,
spid as SpId,
'Kill ' + str(spid) as cSQL
Into #spid
From master..sysprocesses p,
master..sysdatabases d
Where p.status != 'BACKGROUND'
And d.dbid = p.dbid
And d.name = @Database

if (select count(*) from #spid) = 0
return(0)

Select dbId,dbName,spid,LoginName,cSQL
From #spid


Select @nOrden = min(nOrden ),
@nOrdenMax = max(nOrden)
From #spid

While @nOrden <= @nOrdenMax
Begin
Select @cSQL = cSQL
From #spid
Where nOrden = @nOrden

Exec sp_executesql @cSQL

Set @nOrden = @nOrden + 1

End
END
  #6 (permalink)  
Antiguo 21/02/2008, 07:55
Avatar de Romi28x  
Fecha de Ingreso: octubre-2007
Mensajes: 185
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Conexiones abiertas

Gracias por la ayuda iislas te pasaste, are las pruebas en una bd que tengo para hacer todo tipo de cosas raras (no la bd de producción) y ver que resulta.

si tienes algún consejo mas u otra idea te agradeceré la compartas conmigo y con todos los que nos estén leyendo.
  #7 (permalink)  
Antiguo 21/02/2008, 11:37
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Conexiones abiertas

Bueno, pues lo expuesto, es lo que se me ha ocurrido, espero que si alguien mas tiene comentarios al respecto, los comparta con todos.

Saludos Romi28x
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:14.