SQL Server Performance

Cerrar Conexiones

Discussion in 'Preguntas sobre SQL Server en Español.' started by naguinaga, Feb 23, 2005.

  1. naguinaga New Member

    Hola a todos:

    Tengo una duda, no se como poder desconectar a todos los usuarios que estén conectados a una base de datos.

    La unica manera que puedo hacerlo es reiniciar el servicio MSSQLServer, y creo que es un poco expeditivo.

    Supongo que habrá una manera mejor de hacerlo

    Muchas gracias

    Salu2
  2. Luis Martin Moderator

    Podes usar sp_who para identificar a los usuarios con sus ID y luego Kill ID.
    Te dire que también es expeditivo, pero al menos, selectivo.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  3. naguinaga New Member

    Hay alguna manera de echar a todos los usuarios, que estén conectados a una base de datos. y dejar a los que están en otras bases de datos que puedan seguir trabajando.

    Gracias
  4. octavio New Member

    Con el administrador corporativo, seleccionar la base de datos, botón derecho del ratón--->separar base de datoss----> indica el número de usuarios conectados, si es 0 no hay nadie, pulsar cancelar para no separar la base de datos, si es distinto de 0 pinchar el botón borrar, pide confirmación y si se desea enviar un mensaje de aviso, cuando el número de usuarios sea 0 pinchar en cancelarr
  5. Luis Martin Moderator

    Lo que dice Octavio es cierto, solamente que a veces el EM por ser GUI puede tener problemas o demoras.
    De la misma forma puedes seleccionar con sp_who aquellos usuarios que estan conectados a la base en cuestion y luego usar el Kill como describí en el otro post.

    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



  6. naguinaga New Member

    Muchas gracias es justo lo que necesitaba, ya que el método del Kill para mi caso es un poco tedioso, ya que puedo tener mas de 200 conexiones con distintos usuarios, si tengo que hacer para cada uno un Kill, cuando haya acabado seguro que se han conectado mas gente.

    Saludos

    Nacho
  7. c_maldon Member

    Siempre podés recurrir a un script, o un query que te contruya uno.
    Por ejemplo:

    select 'Kill ' + str(spid)
    from master..sysprocesses p,
    master..sysdatabases d
    where p.status != 'BACKGROUND'
    andd.dbid = p.dbid
    and d.name = 'MiDatabase'



  8. naguinaga New Member

    Y si quiero que el resultado de la select se ejecute directamente? como puedo hacerlo para que lo haga todo seguido (listar los SPID y hacer los KILLS) ?

    Saludos

    Nacho
  9. c_maldon Member

    Podrías utilizar el siguiente script:

    Set nocount on

    Declare @nOrden int
    Declare @nOrdenMax int
    Declare @cSQL varchar(255)

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

    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 = 'MiDatabase'

    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( @cSQL )

    Set @nOrden = @nOrden + 1

    End

Share This Page